如何在Gatling的repeat函数中使用feeder值?排查代码未执行请求问题
问题排查与解决方案
现有代码不执行请求的原因
- 你用
val times = 0定义了不可变变量,还试图在exec块里修改它——Scala里val初始化后无法修改,而且这种全局变量的方式完全不适合Gatling的并发场景,多个虚拟用户会互相覆盖这个值。 repeat(times)里的times是在场景初始化阶段就确定的固定值(也就是0),不会从Session里动态读取,所以循环根本不会执行,自然没有请求发送。
动态用Feeder值实现Repeat的正确写法
Gatling的repeat支持直接从Session中读取动态值,不需要额外的全局变量。直接用表达式语法引用Session里的count字段即可:
private val scn = scenario("BasicSimulation") .feed(csv("你的CSV文件路径.csv")) // 确保CSV文件路径配置正确 .repeat(session => session("count").as[Int]) { exec(http("request") .get("https://test.com")) }
或者更简洁的Scala表达式写法:
private val scn = scenario("BasicSimulation") .feed(csv("你的CSV文件路径.csv")) .repeat("count") { // 直接传入Session中的字段名 exec(http("request") .get("https://test.com")) }
核心逻辑说明
repeat的参数可以是一个Session => Int的函数,Gatling会在运行时针对每个虚拟用户的Session动态获取count值,实现不同用户执行不同次数的请求(foo执行10次,bar执行20次)。- 完全避开了全局变量的并发问题,每个用户的Session独立存储自己的
count值。
内容的提问来源于stack exchange,提问作者Janp95
相关产品推荐
相关产品推荐

