如何从Locust获取单个任务的统计信息?
我来帮你解决这个问题!在Locust里跟踪整个任务的统计信息和手动生成日志其实并不复杂,下面分两部分给你详细说明:
一、跟踪整个任务的运行时长与成功状态
Locust默认只统计单个HTTP请求的指标,但我们可以通过它的events系统手动触发任务级别的统计事件,这样就能在UI面板看到整个任务的耗时、成功率等数据了。具体步骤如下:
- 记录任务的开始时间:用
time.time()在任务开头标记时间点 - 执行任务内的所有HTTP请求:保留你原有的请求逻辑
- 自定义成功/失败判断:根据业务规则确定任务是否执行成功
- 触发自定义统计事件:通过
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
相关产品推荐
相关产品推荐

