Karate 空手道:当发送jsonPath到另一个功能时,';设置';函数don';我看不到jsonPath
我有两个特性:第一个是我有参数的地方,第二个是我想从第一个特性发送参数网的地方 第一个特点:Karate 空手道:当发送jsonPath到另一个功能时,';设置';函数don';我看不到jsonPath,karate,Karate,我有两个特性:第一个是我有参数的地方,第二个是我想从第一个特性发送参数网的地方 第一个特点: Feature: test @dev Scenario: test * def arguments = { value: '123.00', jspath: '..transferData.amount',consent_body: 'classpath:consent_domestic.json' } * def createConsentResult = call read('
Feature: test
@dev
Scenario: test
* def arguments = { value: '123.00', jspath: '..transferData.amount',consent_body: 'classpath:consent_domestic.json' }
* def createConsentResult = call read('classpath:reuseable/features/changeConsentBody.feature') arguments
第二个特点:
@ignore
Feature: Change consent body - 1 parameter
Background:
* url ''
* call read('classpath:reuseable/features/commonFunction.feature')
@act
Scenario : Change consent body - 1 parameter
* path 'consents'
* def consentBody = read(consent_body)
* print "jsonPath: "+jspath
* set consentBody jspath= value
When request consentBody
And method post
Then status 201
这里*def approvedbody=read(approvement\u body)
karate将“approvement\u body”视为一个变量,并使用该变量的值
这里,*print“jsonPath:+jspath
karate将“jspath”视为一个变量,并使用此变量的值,然后打印:[print]jsonPath:…transferData.amount
但是此处*设置jspath=value
空手道不将“jspath”视为变量,也不使用此变量的值。相反,空手道显示错误:
changeApproverBody.feature:17-意外路径:jspath
在这种情况下,空手道需要将“jspath”视为一个变量,并使用该变量的值。很抱歉,如果你真的想让人们有耐心去理解问题,你的问题必须简化。请以后参考: 也就是说,我看到了两个明显的问题。顺便说一下,请在
=
标志的两侧保留空白:
* set consentBody jspath = value
变量不适用于set
命令。并且不能使用JsonPath。如果您有动态路径,则可以执行此操作,请参阅:
如果要“批量”更新数组,而不是.transferData.amount
-请使用以下操作:
* def foo = [{},{}]
* def fun = function(x){ x.transferData = { amount: 100 }; return x }
* def res = karate.map(foo, fun)
* match res == [{ transferData: { amount: 100 } }, { transferData: { amount: 100 } }]
最后,我敦促您仔细阅读本文,尽量避免使用“通用”测试用例和使用
调用,这只会使事情变得不必要地复杂:另一种方法是在同意书\u hominal.json
中使用嵌入式表达式,您可以添加”#(值)“
作为要修改的所有金额的值。类似这样的{transferData:{amount:'#(value)}}}
如果“变量对set命令不起作用”,那么为什么对“approvedbody”和“value”起作用呢?对于三个参数中的两个,它是有效的,我认为如果它也适用于第三个参数,这将是合乎逻辑的。@cheparskyset
对于90%编写简单测试用例而不试图太“通用”的人来说是有用的。如果您觉得不正确,请假定set
关键字不存在,并坚持使用eval
。
* def foo = [{},{}]
* def fun = function(x){ x.transferData = { amount: 100 }; return x }
* def res = karate.map(foo, fun)
* match res == [{ transferData: { amount: 100 } }, { transferData: { amount: 100 } }]