如何在条件循环中使用karate.match

时间:2018-11-30 11:02:58

标签: karate

我该如何实现以下

* eval if(TestCaseType == "negative") karate.match(messageConstructedFromRequestData_N1,messageFromApiResponse_N1)

* eval if(TestCaseType == "positive") karate.match(messageConstructedFromRequestData_P1,messageFromApiResponse_P1)

我基本上想在满足特定条件时匹配变量。 我尝试过了

* eval if(TestCaseType == "negative-2") result = karate.match(messageConstructedFromRequestData_N2,responseMessage_N2)

当我打印结果时,我得到的结果为“ true”,但是我无法将其分配给变量,然后断言结果。像这样

* def y = result
* match y == { pass: true, message: null }

2 个答案:

答案 0 :(得分:0)

我认为您正在过度设计测试。把事情简单化。分为多个步骤。例如:

* def first = { available: true, collection: true }
* def second = { code: 'foo', message: 'bar' }
* def testType = 2

* def response = second
* def expected = testType == 2 ? { code: '#string', 'message': '#string' } : { available: '#boolean', collection: '#boolean' }
* match response == expected

仔细查找文档中“条件逻辑”部分。记住,如果确实需要,可以调用另一个功能(或Java代码)来简化操作。

但老实说,我认为您的测试过于复杂。

答案 1 :(得分:-1)

def conditional =
  """
  function() {if(result.pass){
  var arr = []
    arr[0] = karate.match(response.businessData.productRule.productName, '#string').pass;
    arr[1] = karate.match(response.businessData.productRule.productName, '#stdfsring').pass;
    return arr;  
    }
  }
  """
  * def callFunction = call conditional
  * print callFunction
  * match callFunction !contains false