Gatling如何实现feeder在repeat循环中每次读取新值并解决报错
问题解决方案
核心问题原因
- 链式调用缺失:Gatling DSL依赖链式结构构造执行链路,你在
repeat代码块内的feed(mapfeeder)和后续exec请求没有用.连接,导致feed动作没有被加入实际执行流程,坐标参数从未注入会话,因此请求时抛出mapx属性未定义的错误。 - 冗余feed动作:你在
ABC_02_DetailsPage_MAPgroup外提前执行了一次feed(mapfeeder),这就是之前只复用第一个值的原因——会话中已经存在mapx等属性,后续循环如果没有执行新的feed就会一直读取旧值。 - CSV表头异常:报错信息中属性名存在多余空格,需确认你的
data/cordinates.csv表头严格为mapx、mapy、maptoken,无多余空格、大小写偏差。
修正后的代码示例
val mapfeeder = csv(fileName = "data/cordinates.csv").circular object PDP { val pdp = group("ABC_01_DetailsPage") { exec(http("PropertyDetailsPage") .get("/abc/property/detail.html?propertyId=12345&index=0&q=${address_json6}&qt=address&_qt=address&offset=1&sort=address&limit=20&view=property&mode=&radius=1.0Km&landuse=All") .check(substring("Change in Median Price"))) } .pause(duration = 1) // 删掉此处冗余的feed,改到循环内每次执行 .group("ABC_02_DetailsPage_MAP") { repeat(30) { // 用.连接feed和exec,确保每次循环先读取新的feeder值再发请求 feed(mapfeeder) .exec(http("/mapping") .get(uri22 + "?mapTypeId=1006&x=${mapx}&y=${mapy}&z=19&access_token=${maptoken}")) } } } val scn = scenario("RecordedSimulation") .feed(SearchFeeder) .exec(Homepage.homepage, Login.login, SearchLink.search, SearchEntry.searchentry, PDP.pdp, Logout.logout) setUp(scn.inject(atOnceUsers(1))).protocols(httpProtocol)
调试建议
如果修改后仍有问题,可以在feed后增加会话打印逻辑,确认参数读取正常:
feed(mapfeeder) .exec { session => println(s"mapx: ${session("mapx").as[String]}, mapy: ${session("mapy").as[String]}") session } .exec(http("/mapping")...)
内容的提问来源于stack exchange,提问作者newtogroovy
相关产品推荐
相关产品推荐

