LoadRunner并行调用场景下单个GET接口响应时间的统计方法咨询
LoadRunner并行调用场景下单个GET接口响应时间的统计方法咨询
嗨,你提的这个问题确实是LoadRunner并行场景里常见的痛点——毕竟直接在web_concurrent_start/web_concurrent_end块里用lr_start_transaction和lr_end_transaction会因为并行执行的时序混乱,导致响应时间统计完全不准。你想到用web_reg_async_attributes是完全正确的方向,这个函数就是专门用来追踪并行/异步请求的各项指标的,我给你详细讲下用法和实操例子:
核心思路
web_reg_async_attributes是一个注册型函数,需要在并行请求发起前调用,通过唯一的ID绑定对应的请求,之后就能获取到该请求的响应时间、HTTP状态码等关键指标。我们可以把这些指标输出到日志,甚至手动封装成LoadRunner可识别的事务,方便在测试报告里查看统计数据。
完整代码示例
假设你的三个GET接口分别是/api/endpoint1、/api/endpoint2、/api/endpoint3,代码写法如下:
// 第一步:为每个并行请求注册异步属性(必须放在web_concurrent_start之前) web_reg_async_attributes( "ID=Async_Req1", "URL=http://your-api-domain/api/endpoint1", LAST); web_reg_async_attributes( "ID=Async_Req2", "URL=http://your-api-domain/api/endpoint2", LAST); web_reg_async_attributes( "ID=Async_Req3", "URL=http://your-api-domain/api/endpoint3", LAST); // 第二步:开启并行请求块 web_concurrent_start(NULL); // 发起第一个GET请求 web_url("GET_Endpoint1", "URL=http://your-api-domain/api/endpoint1", LAST); // 发起第二个GET请求 web_url("GET_Endpoint2", "URL=http://your-api-domain/api/endpoint2", LAST); // 发起第三个GET请求 web_url("GET_Endpoint3", "URL=http://your-api-domain/api/endpoint3", LAST); web_concurrent_end(NULL); // 第三步:获取并处理每个请求的响应时间 char req1_rt[20], req2_rt[20], req3_rt[20]; // 从注册的属性中提取响应时间(单位:毫秒) strcpy(req1_rt, lr_get_attrib_string("Async_Req1.ResponseTime")); strcpy(req2_rt, lr_get_attrib_string("Async_Req2.ResponseTime")); strcpy(req3_rt, lr_get_attrib_string("Async_Req3.ResponseTime")); // 输出到日志,方便调试 lr_output_message("Endpoint1 响应时间:%s ms", req1_rt); lr_output_message("Endpoint2 响应时间:%s ms", req2_rt); lr_output_message("Endpoint3 响应时间:%s ms", req3_rt); // 可选:封装为LoadRunner事务,便于在测试报告中统计 lr_start_transaction("Endpoint1_Response"); lr_end_transaction("Endpoint1_Response", atoi(req1_rt)); lr_start_transaction("Endpoint2_Response"); lr_end_transaction("Endpoint2_Response", atoi(req2_rt)); lr_start_transaction("Endpoint3_Response"); lr_end_transaction("Endpoint3_Response", atoi(req3_rt));
关键注意事项
- 唯一ID:每个
web_reg_async_attributes的ID必须唯一,不能重复,否则会导致指标匹配错误。 - URL匹配:
URL参数支持部分匹配(比如用通配符*),但尽量精准,避免误匹配到其他无关请求。如果接口URL有动态参数,也可以只写固定前缀部分。 - 额外指标:除了
ResponseTime,还可以获取Async_ReqX.Status(HTTP状态码)、Async_ReqX.Size(响应大小)等属性,帮助你排查请求异常问题。 - 请求类型兼容:不管用
web_url还是web_custom_request发起GET请求,这个方法都适用,只要保证注册函数在请求之前调用即可。
备注:内容来源于stack exchange,提问作者Narendra Sai
相关产品推荐
相关产品推荐

