如何在空手道中直接匹配数据库查询结果和 API 响应
How to match DB query result and API response directly in karate
我的代码如下=>
@UserValidationEmail
Feature: Verify User Details
Scenario: Verify User Details api
Given url 'http://127.0.0.1/user/?id=123'
When method get
Then status 200
* def DbUtils = Java.type('com.intuit.karate.treebo.util.DbUtils')
* def db = new DbUtils()
* def query = "SELECT * FROM user_table where id = 123"
* def dbResult = db.readRows(query)
* match dbResult[0] contains response.data
API 调用 http://127.0.0.1/user/?id=123 的响应是 =>
{"status":"success","data":{"id":123,"created_at":"2018-01-18T10:27:24.631959","modified_at":"2018-01 18T10:27:24.641493","first_name":"Foo","last_name":"Bar","email":"foo@bar.com","phone_number":null}}
数据库查询的响应是=>
[print] dbResult: [{id=123, password=bZeGU3h66cp, created_at=2018-01-18 15:57:24.631959, modified_at=2018-01-18 15:57:24.641493, first_name=Foo, last_name=Bar, email=foo@bar.com, phone_number=null}]
在尝试使用 contains 匹配以上两个结果时,出现以下错误:
Tests in error:
* match dbResult[0] contains response.data(Scenario: Verify User Details api): path: $[0].created_at, actual: 2018-01-18 15:57:24.631959, expected: '2018-01-18T10:27:24.631959', reason: actual value is not a string
我能否将数据库查询的结果直接匹配到 API 响应?
我们来看一下留言:
path: $[0].created_at, actual: 2018-01-18 15:57:24.631959, expected: '2018-01-18T10:27:24.631959'
reason: actual value is not a string
很明显,返回的结果行有一个 java.util.Date
或类似的,而不是一个字符串。即使它是一个字符串,请注意值也不相同。
将该字段转换为字符串并进行比较。或者这很可能对您有用 - 只需在比较之前执行此操作即可:
* set response.data.created_at = '#ignore'
如果您需要进一步了解,请阅读有关模糊匹配的文档:https://github.com/intuit/karate#fuzzy-matching
我的代码如下=> @UserValidationEmail
Feature: Verify User Details
Scenario: Verify User Details api
Given url 'http://127.0.0.1/user/?id=123'
When method get
Then status 200
* def DbUtils = Java.type('com.intuit.karate.treebo.util.DbUtils')
* def db = new DbUtils()
* def query = "SELECT * FROM user_table where id = 123"
* def dbResult = db.readRows(query)
* match dbResult[0] contains response.data
API 调用 http://127.0.0.1/user/?id=123 的响应是 =>
{"status":"success","data":{"id":123,"created_at":"2018-01-18T10:27:24.631959","modified_at":"2018-01 18T10:27:24.641493","first_name":"Foo","last_name":"Bar","email":"foo@bar.com","phone_number":null}}
数据库查询的响应是=>
[print] dbResult: [{id=123, password=bZeGU3h66cp, created_at=2018-01-18 15:57:24.631959, modified_at=2018-01-18 15:57:24.641493, first_name=Foo, last_name=Bar, email=foo@bar.com, phone_number=null}]
在尝试使用 contains 匹配以上两个结果时,出现以下错误:
Tests in error:
* match dbResult[0] contains response.data(Scenario: Verify User Details api): path: $[0].created_at, actual: 2018-01-18 15:57:24.631959, expected: '2018-01-18T10:27:24.631959', reason: actual value is not a string
我能否将数据库查询的结果直接匹配到 API 响应?
我们来看一下留言:
path: $[0].created_at, actual: 2018-01-18 15:57:24.631959, expected: '2018-01-18T10:27:24.631959'
reason: actual value is not a string
很明显,返回的结果行有一个 java.util.Date
或类似的,而不是一个字符串。即使它是一个字符串,请注意值也不相同。
将该字段转换为字符串并进行比较。或者这很可能对您有用 - 只需在比较之前执行此操作即可:
* set response.data.created_at = '#ignore'
如果您需要进一步了解,请阅读有关模糊匹配的文档:https://github.com/intuit/karate#fuzzy-matching