Artillery负载测试payload文件每行数据重复发送问题如何解决
解决方案
1. 修复测试阶段的语法错误
你当前的phases配置存在语法问题,把同一个测试阶段的duration和arrivalRate拆成了两个独立的阶段对象,导致实际运行逻辑不符合预期:
原错误配置:
phases: - duration: 30 - arrivalRate: 10
上述配置等价于定义了两个测试阶段:第一个阶段时长30秒,使用默认的每秒1个虚拟用户(VU)的速率;第二个阶段未定义时长会持续运行,速率为每秒10个VU。这就导致仅30个VU被创建,每个VU被复用10次发送请求,因此每个VU绑定的同一行payload数据被重复发送10次。
正确的单阶段配置要把两个参数放在同一个对象中:
phases: - duration: 30 arrivalRate: 10
如果你想要更严格控制总请求数,也可以用arrivalCount参数,效果一致(30秒内均匀创建300个VU,速率刚好每秒10次):
phases: - arrivalCount: 300 duration: 30
2. 补充payload配置避免循环复用
在payload配置中添加loop: false,确保payload行不会被循环复用,所有行用完后如果还有新的VU会直接结束测试,避免数据重复:
payload: path: "../SampleData.csv" fields: - "userId" - "username" - "password" order: sequence skipHeader: true loop: false # 新增这行配置
最终完整可用配置
config: target: http://localhost:8000 payload: path: "../SampleData.csv" fields: - "userId" - "username" - "password" order: sequence skipHeader: true loop: false phases: - duration: 30 arrivalRate: 10 scenarios: - flow: - post: url: "/register" json: uid: "{{ userId }}" alias: "{{ username }}" password: "{{ password }}"
这个配置运行后,每个新建的VU都会按顺序拿到payload里的一行新数据,每个VU仅执行一次POST请求就退出,刚好300个请求对应300行payload,速率为每秒10次,完全符合预期需求。
内容的提问来源于stack exchange,提问作者Stuart
相关产品推荐
相关产品推荐

