Karate API数据库校验:匹配borrower对象中first_name失败求助
问题描述
我能成功读取单个字段并完成匹配校验:
* def query = "select first_name from uds.enrollment where email = '" + randomEmail + "'" * def dbresponse = db.readValue(query) * print dbresponse * match dbresponse == (randomFirstName)
在同一张数据库表中,first_name存储在borrower对象字段内。我可以通过以下方式获取整个borrower对象:
* def query = "select borrower from uds.enrollment where email = '" + randomEmail + "'" * def dbresponse = db.readValue(query) * print dbresponse
但尝试执行匹配时报错:
* match dbresponse.first_name == (randomFirstName)
错误信息:
match failed: EQUALS $ | actual path does not exist (STRING:STRING) '#notpresent' 'Kerrie'
解决方案
核心原因
报错提示actual path does not exist,说明dbresponse本身没有first_name属性。大概率是数据库中borrower字段存储的是JSON字符串而非原生JSON类型,此时db.readValue返回的是字符串格式的JSON,而非可直接访问属性的对象。
解决步骤
- 先将返回的JSON字符串解析为可操作的对象,再进行匹配:
* def query = "select borrower from uds.enrollment where email = '" + randomEmail + "'" * def dbresponse = db.readValue(query) * def borrowerObj = karate.fromString(dbresponse) // 把JSON字符串解析为对象 * match borrowerObj.first_name == randomFirstName
- 先通过
print dbresponse确认返回内容格式:- 如果输出是带引号的字符串(如
"{\"first_name\":\"Kerrie\"}"),则必须执行上述解析步骤; - 如果输出是类似
{first_name=Kerrie}的对象格式,需检查字段名拼写/大小写是否和数据库一致(不过你之前单独查询first_name能匹配,这种概率极低)。
- 如果输出是带引号的字符串(如
另外,少数情况下数据库驱动会给JSON字段包裹一层顶级键(比如返回{"borrower": {"first_name": "Kerrie"}}),此时需改为match dbresponse.borrower.first_name == randomFirstName,可通过print输出确认结构。
内容的提问来源于stack exchange,提问作者mark quinteros
相关产品推荐
相关产品推荐

