【问题标题】:How to match DB query result and API response directly in karate如何在空手道中直接匹配数据库查询结果和 API 响应
【发布时间】:2018-06-21 10:14:46
【问题描述】:

我的代码如下=> @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

我可以将 DB 查询的结果直接匹配到 API 响应吗?

【问题讨论】:

    标签: karate intuit


    【解决方案1】:

    我们来看看消息:

    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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-06-03
      • 1970-01-01
      • 1970-01-01
      • 2019-04-06
      • 1970-01-01
      • 2018-09-21
      • 1970-01-01
      相关资源
      最近更新 更多