You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

将Locust作为Python库使用时如何输出CSV统计文件?

解决Locust作为库使用时CSV统计文件的最终写入问题

我明白你现在的处境——已经成功初始化了StatsCSVFileWriter实例,但不确定怎么在测试结束时触发它完成最终的CSV文件写入。其实你只需要在测试流程的最后加上一个关键调用即可,咱们来一步步调整你的代码:

核心问题分析

StatsCSVFileWriter会在测试运行期间周期性写入统计数据,但测试结束时(runner退出后),还有一些最终的汇总数据需要写入,同时需要关闭文件句柄避免资源泄漏。这时候就需要手动调用它的close()方法来完成收尾工作。

修改后的完整代码

import os
import time
import gevent
from locust import Environment, StatsCSVFileWriter
from locust.stats import stats_printer, stats_history
# 请替换为你的User类所在的模块导入
from your_user_module import User

def start_locust(time_hh: int, time_mm: int, user: int, spawn_rate: int):
    # 初始化环境与运行器
    env = Environment(user_classes=[User])
    env.create_local_runner()
    # 配置CSV写入器
    stats_path = os.path.join(os.getcwd(), "data")
    csv_writer = StatsCSVFileWriter(
        environment=env,
        base_filepath=stats_path,
        full_history=True,
        percentiles_to_report=[90.0, 95.0]
    )
    # 显式绑定事件监听器,确保所有统计数据被捕获
    env.events.request_success.add_listener(csv_writer.request_success)
    env.events.request_failure.add_listener(csv_writer.request_failure)
    env.events.report_to_master.add_listener(csv_writer.report_to_master)
    env.events.worker_report.add_listener(csv_writer.worker_report)
    
    # 启动WebUI
    env.create_web_ui(host="127.0.0.1", port=8089, stats_csv_writer=csv_writer)
    # 启动实时统计打印协程
    gevent.spawn(stats_printer(env.stats))
    # 启动统计历史保存协程
    gevent.spawn(stats_history, env.runner)
    # 开始测试
    env.runner.start(user_count=user, spawn_rate=spawn_rate)
    # 设置测试停止定时器
    time_in_seconds = (time_hh * 60 * 60) + (time_mm * 60)
    gevent.spawn_later(time_in_seconds, lambda: env.runner.quit())
    # 等待测试协程完成
    env.runner.greenlet.join()
    
    # 关键操作:测试结束后触发CSV写入器的最终写入与资源清理
    csv_writer.close()
    
    # 关闭WebUI服务
    env.web_ui.stop()

关键修改点说明

  1. 绑定事件监听器:虽然初始化时传入了environment,但显式绑定请求成功/失败、主从节点报告等核心事件,能确保所有统计数据都被正确捕获并写入文件。
  2. 调用csv_writer.close():在测试协程完成后调用这个方法,它会:
    • 将剩余未写入的统计数据追加到CSV文件
    • 生成最终的汇总统计行
    • 关闭打开的文件句柄,避免资源泄漏

这样调整后,测试结束时你就能得到完整的CSV统计文件,包含所有请求的历史数据和指定的百分位数统计结果。

内容的提问来源于stack exchange,提问作者Angi2412

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.29 04:17:30