如何为每个场景实现每分钟4000次请求并夜间重复执行数小时
解决方案
核心修改点
- 调整请求速率:将目标换算为每分钟4000次请求(约66.67次/秒)
- 添加循环逻辑:让整个场景序列执行完成后自动重复
- 设置持续运行时长:指定夜间测试的总时长(比如8小时)
修改后的代码
{ // 定义每个场景的注入逻辑:稳定保持每分钟4000次请求(换算为≈66.67次/秒) PopulationBuilder createScenario = create.injectOpen(constantUsersPerSec(4000.0 / 60).during(Duration.ofMinutes(1))); PopulationBuilder getScenario = get.injectOpen(constantUsersPerSec(4000.0 / 60).during(Duration.ofMinutes(1))); PopulationBuilder searchScenario = search.injectOpen(constantUsersPerSec(4000.0 / 60).during(Duration.ofMinutes(1))); PopulationBuilder downloadScenario = download.injectOpen(constantUsersPerSec(4000.0 / 60).during(Duration.ofMinutes(1))); PopulationBuilder deleteScenario = delete.injectOpen(constantUsersPerSec(4000.0 / 60).during(Duration.ofMinutes(1))); // 保持原逻辑:随机打乱get/search/download的执行顺序 List<PopulationBuilder> scenarioList = new ArrayList<>(); scenarioList.add(getScenario); scenarioList.add(searchScenario); scenarioList.add(downloadScenario); Collections.shuffle(scenarioList); // 构建完整场景序列:create → 随机场景 → delete ChainBuilder fullScenarioSequence = createScenario .andThen(scenarioList) .andThen(deleteScenario); setUp( // 无限重复整个场景序列,直到达到总运行时长 fullScenarioSequence.repeat(forever()) ) .protocols(httpProtocol) // 设置夜间测试总时长,示例为8小时,可按需调整 .maxDuration(Duration.ofHours(8)); }
关键细节说明
- 速率换算:直接将每分钟4000次请求转换为每秒速率(
4000.0/60),确保每个场景运行时稳定达到目标请求量。 - 循环与时长控制:用
repeat(forever())实现场景序列的无限重复,配合maxDuration限制总运行时长,避免无限制执行。 - 随机顺序保留:延续原代码的场景打乱逻辑,保证每次循环的场景执行顺序不同。
- 节流可选:如果担心注入速率波动,可添加全局节流配置,但注意不要同时使用注入速率和节流规则,避免相互冲突导致速率不符合预期:
.throttle(reachRps((int)(4000.0/60)).in(10), holdFor(Duration.ofMinutes(1)))
内容的提问来源于stack exchange,提问作者Adam
相关产品推荐
相关产品推荐

