Gatling遍历session存储ID列表循环执行删除接口问题
问题根因
foreach循环逻辑失效是两处写法错误导致的:
- 你在foreach方法第二个参数定义了单次遍历的单个ID会存到session key为
id的位置,但删除接口路径里传的是全量ID集合变量taxonomyIDs,相当于把整个列表传给了只接收单个ID的路径参数,接口无法识别 - 路径参数的变量引用没有匹配你定义的循环临时变量,拿错了值
正确实现代码
ScenarioBuilder init = scenario("Initialization") .exec(http("getAllTaxonomies") .get("/services/taxonomy-packages") .check(jsonPath("$..id") .findAll().saveAs("taxonomyIDs"))) // 遍历存好的ID列表,当前遍历到的单个ID存到session key为id的位置 .foreach("${taxonomyIDs}", "id") .on(exec(http("deleteTaxonomy") // 直接引用单个id变量作为路径参数即可 .delete("/services/taxonomy-packages/${id}") .check(status().is(204))));
补充说明
- 你用
jsonPath(...).findAll().saveAs("taxonomyIDs")存到session里的本身就是标准Java List类型,不需要额外找List存储方案,Gatling内部已经完成了类型转换和存储 - 如果需要在遍历前校验ID列表是否拉取成功,可以在getAllTaxonomies请求后加
check(status().is(200))校验,避免接口报错拿到空列表导致后续删除逻辑不执行
内容的提问来源于stack exchange,提问作者rstkhldntsk1997
相关产品推荐
相关产品推荐

