Locust与产品SDK集成无统计数据,求request.Session类要求
解决Locust集成SDK时无测试统计数据的Session类要求
要让Locust能捕获SDK的请求统计,你的SDK自定义Session类必须满足以下几个核心要求:
所有请求必须委托给Locust client处理
不能用原生requests.Session或自行实现HTTP请求逻辑,要把get/post/put/delete等所有请求方法,都转发到你注入的LocustHttpUser.client实例上。只有这样,Locust才能追踪到请求的发起、耗时、结果等数据。对齐标准
requests.Session的核心接口
你的SDK Session类要和标准库的requests.Session接口兼容,至少要实现:- 基础请求方法:
get()、post()、put()、delete()、patch() - 底层请求入口:
request()(很多SDK会基于这个方法封装上层逻辑)
- 基础请求方法:
给请求添加可识别的统计标识
调用Locust client时,要通过name参数给请求指定自定义名称(比如name="SDK_用户查询接口"),这样Locust的统计面板会按这个名称分组展示,避免所有请求混在一起。传递SDK的自定义配置到请求
如果你的SDK Session有默认headers、超时时间、认证信息等配置,要把这些参数合并到Locust client的请求参数里,确保SDK的业务逻辑不受影响。
简单示例代码
class SDKSession: def __init__(self, locust_client): self.locust_client = locust_client # 保留SDK自身的默认配置 self.default_headers = {"X-SDK-Version": "v2.1.0"} self.timeout = 10 def request(self, method, url, **kwargs): # 合并SDK默认配置和请求传入的参数 merged_headers = {**self.default_headers, **kwargs.get("headers", {})} kwargs.update({ "headers": merged_headers, "timeout": kwargs.get("timeout", self.timeout) }) # 调用Locust client,指定统计名称 return self.locust_client.request( method, url, name=f"SDK_{method.upper()}_{url.split('/')[-1]}", **kwargs ) # 转发常用请求方法到request def get(self, url, **kwargs): return self.request("GET", url, **kwargs) def post(self, url, **kwargs): return self.request("POST", url, **kwargs) # 在Locust用户类中注入自定义Session class SDKLoadTestUser(HttpUser): def on_start(self): # 假设你的SDK核心类接受session参数 self.sdk_instance = MyBusinessSDK(session=SDKSession(self.client))
你之前没看到统计数据,大概率是因为替换的_session没有把请求真正转发给Locust client,导致Locust无法捕获到请求行为。
内容的提问来源于stack exchange,提问作者Rishav Bhardwaj
相关产品推荐
相关产品推荐

