Karate 在空手道中,将变量作为请求URL(而不是查询参数)的一部分从一个特征文件传递到另一个特征文件

Karate 在空手道中,将变量作为请求URL(而不是查询参数)的一部分从一个特征文件传递到另一个特征文件,karate,Karate,我有一个生成车辆id的功能,并作为变量存储在该功能中。我想在另一个特性中将此id作为请求URL的一部分传递,作为一种拆卸活动 这是我从一个名为activateHicle.feature的功能调用它的方式 Scenario : Activate a vehicle * header X-API-Key = apiKey * def result = callonce read('createVehicle.feature') * def vehicleId = re

我有一个生成车辆id的功能,并作为变量存储在该功能中。我想在另一个特性中将此id作为请求URL的一部分传递,作为一种拆卸活动

这是我从一个名为activateHicle.feature的功能调用它的方式

Scenario : Activate a vehicle   

    * header X-API-Key = apiKey
    * def result = callonce read('createVehicle.feature')
    * def vehicleId = result.vId

 # some workflow steps
  ........
  ........
  ........

 # tear down - delete the vehicle created
  * call read('deleteVehicle.feature'){ vehcileId: '#(vehicleId)' }
Scenario: Delete a vehicle 
  * header X-API-Key = apiKey
  * def myurl = 'https://xxx/vehicle'+ vehicleId +'?permanent=yes'


    Given myurl
    And request ''
    When method delete
    Then status 200
在调用的功能中-deleteVehicle.feature

Scenario : Activate a vehicle   

    * header X-API-Key = apiKey
    * def result = callonce read('createVehicle.feature')
    * def vehicleId = result.vId

 # some workflow steps
  ........
  ........
  ........

 # tear down - delete the vehicle created
  * call read('deleteVehicle.feature'){ vehcileId: '#(vehicleId)' }
Scenario: Delete a vehicle 
  * header X-API-Key = apiKey
  * def myurl = 'https://xxx/vehicle'+ vehicleId +'?permanent=yes'


    Given myurl
    And request ''
    When method delete
    Then status 200
我的方法对吗?我想在其他工作流中重用deleteVehicle.feature,因此不在同一个ActivateHicle.feature中执行此操作(这将非常容易)。我也参考了文档,但它展示了如何使用请求主体中的变量,而不是作为可以在被调用的特性中的任何地方使用的变量。我不想在请求正文中使用它(但希望将其用作请求URL的一部分),例如:

 Scenario:
 Given url loginUrlBase
 And request { userId: '#(username)', userPass: '#(password)' }
我还提到。我也这样做了,但得到了一个javascript错误:

 feature.deleteVehicle: -unknown-:11 - javascript evaluation failed: 
 'https://xxx/vehicle'+ vehicleId +'?permanent=yes', ReferenceError: "vehicleId" 
  is not  defined in <eval> at line number 1
  feature.SVT: SVT.feature:80 - javascript evaluation failed: vehicleId: '#(vehicleId)' }, <eval>:1:14 Expected eof 
   but found }
   vehicleId: '#(vehicleId)' }
                             ^ in <eval> at line number 1 at column number 14
feature.deleteVehicle:-未知-:11-javascript评估失败:
'https://xxx/vehicle“+vehicleId+”?永久=是,参考错误:“vehicleId”
未在第1行中定义
feature.SVT:SVT.feature:80-javascript评估失败:vehicleId:“#(vehicleId)”},:1:14预期eof
但是发现}
vehicleId:“#(vehicleId)”}
^在第1行第14列中

有人能帮忙并提出建议吗

你能简化你的例子吗?我唯一能确定的是,在
call
功能之后和call参数之前需要一个空格:

* call read('deleteVehicle.feature') { vehcileId: '#(vehicleId)' }
我们通常建议的模式是设置not tearDown,因为如果出现错误,tearDown有不执行的风险。也就是说,请看挂钩:


有时,您应该保持简单,只在需要的地方调用功能(使用args)。

这就是问题所在。呼叫功能和参数之间的空间。这就解决了问题。谢谢你,彼得。我也会看看挂钩。我希望编写一个处理拆卸的后功能场景,正如您正确指出的那样,拆卸上方的故障不会执行它。再次感谢皮特我犯的另一个错误是:
givemyurl
应该是
giveurl myurl