在Artillery中能否同时运行多个场景?多API并行负载测试咨询
并行/联合运行多API负载测试的方案
根据你手里的5份YAML测试文件,下面按主流负载测试工具给出具体实现方法:
针对k6工具
1. 并行运行多个YAML文件
直接通过命令行批量启动进程,或者写个简单的Shell脚本:
# 单次执行命令(bash环境) k6 run api-test-1.yaml & k6 run api-test-2.yaml & k6 run api-test-3.yaml & k6 run api-test-4.yaml & k6 run api-test-5.yaml wait
如果需要重复执行,写个Shell脚本更方便:
#!/bin/bash # 遍历当前目录下所有YAML测试文件 for test_file in *.yaml; do echo "Starting test: $test_file" k6 run "$test_file" & done # 等待所有测试进程结束 wait echo "All tests completed"
如果要统一查看汇总报告,可以给每个k6命令加上--out influxdb=http://localhost:8086/k6参数,将结果同步到InfluxDB,再用Grafana可视化汇总数据。
2. 合并成单一测试脚本
把5个API的负载逻辑整合到一个k6脚本(JS格式),通过**场景(scenarios)**配置不同API的负载规则,这样一次启动就能同时测试所有API:
import http from 'k6/http'; import { check } from 'k6'; // 配置每个API的独立负载场景 export const options = { scenarios: { api1_scenario: { executor: 'constant-vus', vus: 15, duration: '10m', exec: 'testAPI1', }, api2_scenario: { executor: 'ramping-vus', startVUs: 5, stages: [ { duration: '3m', target: 20 }, { duration: '5m', target: 20 }, { duration: '2m', target: 0 }, ], exec: 'testAPI2', }, // 依次添加api3、api4、api5的场景配置 }, }; // API1的测试逻辑 export function testAPI1() { const res = http.get('https://your-api-1.com/endpoint'); check(res, { 'API1 status 200': (r) => r.status === 200 }); } // API2的测试逻辑 export function testAPI2() { const payload = JSON.stringify({ key: 'value' }); const params = { headers: { 'Content-Type': 'application/json' } }; const res = http.post('https://your-api-2.com/endpoint', payload, params); check(res, { 'API2 status 201': (r) => r.status === 201 }); } // 补充api3、api4、api5的测试函数
针对JMeter工具
1. 并行运行多个YAML测试计划
用JMeter命令行批量启动:
jmeter -n -t api-test-1.yaml & jmeter -n -t api-test-2.yaml & jmeter -n -t api-test-3.yaml & jmeter -n -t api-test-4.yaml & jmeter -n -t api-test-5.yaml wait
也可以通过Maven/Gradle的JMeter插件配置多测试计划,实现并行执行。
2. 合并成单一测试计划
打开JMeter,新建一个测试计划,为每个API添加独立的线程组,分别配置线程数、Ramp-Up时间、循环次数等负载参数,然后在对应线程组下添加取样器、断言、监听器等组件。运行这个合并后的测试计划,就能同时对所有API执行负载测试。
针对Locust工具
1. 并行运行多个YAML文件
通过命令行启动多个Locust进程:
locust -f api-test-1.yaml & locust -f api-test-2.yaml & locust -f api-test-3.yaml & locust -f api-test-4.yaml & locust -f api-test-5.yaml wait
2. 合并成单一测试文件
编写一个Python格式的Locustfile,导入各API的测试逻辑,定义多个用户类:
from locust import HttpUser, task, between class API1User(HttpUser): wait_time = between(1, 3) host = "https://your-api-1.com" @task def test_api1(self): response = self.client.get("/endpoint") response.assert_status_code(200) class API2User(HttpUser): wait_time = between(2, 4) host = "https://your-api-2.com" @task def test_api2(self): payload = {"key": "value"} response = self.client.post("/endpoint", json=payload) response.assert_status_code(201) # 添加API3、API4、API5的用户类
启动Locust时指定这个文件,就能同时模拟不同用户群体访问各个API。
通用注意事项
- 并行测试前要确认本地/测试机的CPU、内存、网络带宽足够,避免资源瓶颈影响测试结果。
- 合并测试时,确保每个API的负载配置相互独立,避免互相干扰。
内容的提问来源于stack exchange,提问作者isumit
相关产品推荐
相关产品推荐

