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

如何从Locust获取单个任务的统计信息?

我来帮你解决这个问题!在Locust里跟踪整个任务的统计信息和手动生成日志其实并不复杂,下面分两部分给你详细说明:

一、跟踪整个任务的运行时长与成功状态

Locust默认只统计单个HTTP请求的指标,但我们可以通过它的events系统手动触发任务级别的统计事件,这样就能在UI面板看到整个任务的耗时、成功率等数据了。具体步骤如下:

  1. 记录任务的开始时间:用time.time()在任务开头标记时间点
  2. 执行任务内的所有HTTP请求:保留你原有的请求逻辑
  3. 自定义成功/失败判断:根据业务规则确定任务是否执行成功
  4. 触发自定义统计事件:通过events.request.fire()把任务的耗时、状态等数据提交给Locust统计系统

代码示例

import time
from locust import HttpUser, task, events

class MyTaskUser(HttpUser):
    @task
    def multi_request_task(self):
        task_start = time.time()
        task_success = True
        
        try:
            # 执行第一个HTTP请求
            self.client.get("/api/init")
            # 执行第二个HTTP请求
            submit_response = self.client.post("/api/submit", json={"payload": "test_data"})
            
            # 自定义成功条件:比如检查响应内容是否符合预期
            if submit_response.json().get("result") != "success":
                task_success = False
        except Exception as e:
            # 捕获任何异常,标记任务失败
            task_success = False
        
        # 计算任务总耗时(转成毫秒,和Locust默认统计单位一致)
        task_duration = (time.time() - task_start) * 1000
        
        # 触发自定义统计事件,让Locust统计这个任务的指标
        events.request.fire(
            request_type="TASK",
            name="multi_request_task",
            response_time=task_duration,
            response_length=0,  # 任务没有响应长度可以设为0
            exception=None if task_success else Exception("任务执行失败"),
            context=self.context
        )

这样配置后,你在Locust的UI面板就能看到名为multi_request_task的统计条目,包含该任务的总执行次数、成功率、平均耗时等核心指标。

二、手动创建自定义日志

Locust的HttpUser类自带了self.logger属性,它是Python标准logging.Logger的实例,已经和Locust的日志系统集成,会自动包含用户ID、时间戳等上下文信息,直接使用即可:

常用日志级别及用法

  • self.logger.info("任务开始执行"):记录正常流程信息
  • self.logger.warning("请求返回非预期状态码"):记录需要关注的警告信息
  • self.logger.error("任务执行失败"):记录错误或失败事件
  • self.logger.debug("请求响应内容:xxx"):记录调试细节,需要启动Locust时加--loglevel DEBUG才能看到

日志示例(嵌入到任务中)

@task
def multi_request_task(self):
    self.logger.info("开始执行多请求任务")
    task_start = time.time()
    task_success = True
    
    try:
        init_response = self.client.get("/api/init")
        self.logger.debug(f"/api/init请求状态码:{init_response.status_code}")
        
        submit_response = self.client.post("/api/submit", json={"payload": "test_data"})
        if submit_response.json().get("result") != "success":
            task_success = False
            self.logger.warning("任务失败:提交接口返回非成功结果")
    except Exception as e:
        task_success = False
        self.logger.error(f"任务执行出错:{str(e)}", exc_info=True)  # exc_info=True会打印堆栈信息
    
    if task_success:
        self.logger.info("多请求任务执行成功")
    else:
        self.logger.error("多请求任务执行失败")
    
    # 触发统计事件(省略重复代码)

通过这些日志,你可以在控制台或日志文件中追踪每个任务的执行细节,方便排查问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 08:10:59