Karate框架中跨不同URL场景传递数据驱动测试数据的方法
Karate框架中跨场景传递数据驱动测试参数的实现方法
你的核心需求是让Scenario Outline里的每组测试数据,都能传递给被调用的Scenario2,分别执行两个场景后比对响应结果。原代码的问题在于调用Scenario2时没有传递参数,导致Scenario2无法获取<id>和<name>的值,无法正常发起请求。
修改后的完整代码
Scenario Outline: 1st Scenario * url "XYZ url" * request {id: <id>, name: <name>} * method POST * def response1 = response # 保存当前场景的响应 # 调用Scenario2并传递当前组的测试参数 * def scen2Result = call read('@Scen2') { id: <id>, name: <name> } * def response2 = scen2Result.response # 获取Scenario2的响应 # 比对两个场景的响应结果 * match response1 == response2 Examples: | id | name | | 1 | Tripti | | 2 | Tan | @Scen2 @ignore Scenario: 2nd Scenario * url "ABC url" # 直接使用传入的id和name参数,无需用< >包裹 * request {id: id, name: name} * method POST
关键修改说明
- 参数传递:在
call语句中通过花括号{}把当前Scenario Outline的<id>和<name>作为参数传递给Scenario2,这样Scenario2的上下文里就会有这两个变量。 - 变量引用:Scenario2中直接使用
id和name即可,不需要再用< >,因为call操作会自动把参数注入到被调用场景的作用域中。 - 响应保存:明确保存两个场景的响应结果,避免变量覆盖,确保比对的是对应组数据的响应。
这样修改后,Examples里的每组数据都会触发一次完整流程:执行Scenario1、传递参数给Scenario2执行、比对两组响应,完全符合你的需求。
内容的提问来源于stack exchange,提问作者Tripti Paliwal
相关产品推荐
相关产品推荐

