在性能测试领域,日志管理是定位问题的关键环节。作为一名长期使用LoadRunner的测试工程师,我经常遇到同事询问如何在并发测试中快速定位失败请求的问题。LoadRunner提供了完善的日志记录机制,但很多测试人员只停留在基础使用层面,未能充分发挥其诊断价值。
Virtual User Generator(VuGen)中的日志设置看似简单,实则直接影响问题排查效率。当脚本在Controller中大规模运行时,完善的日志策略能帮助我们:
特别是在持续集成环境中,合理的日志配置可以节省大量问题排查时间。根据我的项目经验,约70%的性能问题可以通过分析日志直接定位。
在VuGen的运行时设置(Run-time Settings)中,找到"Log"选项卡,会看到"Data returned by server"选项。这个配置项控制着是否记录服务器返回的完整响应数据。
重要提示:生产环境压测时应谨慎启用此选项,因为记录完整响应数据会显著增加负载生成器的I/O压力和磁盘占用。
启用该选项后,我们可以在日志中看到:
log复制Action.c(25): Notify: Saving Parameter "Param1 = Welcome123" [MsgId: MMSG-22993]
Action.c(25): web_url("login") started [MsgId: MMSG-22993]
Action.c(25): Notify: Redirecting "https://example.com/login" (redirection depth is 0) [MsgId: MMSG-22993]
Action.c(25): Notify: Resource "https://example.com/static/js/main.js" (specified in argument number 3) will be downloaded [MsgId: MMSG-22993]
VuGen提供三种日志级别:
我的实践经验是:
在VuGen中执行脚本时,Replay Log窗口会实时显示执行情况。关键是要学会解读不同消息类型:
| 消息类型 | 颜色 | 含义 | 处理建议 |
|---|---|---|---|
| MSG-25984 | 红色 | 严重错误 | 必须修复 |
| MSG-22993 | 黑色 | 普通信息 | 关注上下文 |
| MSG-26627 | 黄色 | 警告 | 评估影响 |
| MSG-26985 | 绿色 | 成功 | 正常流程 |
典型错误日志示例:
log复制Action.c(42): Error -26627: HTTP Status-Code=500 (Internal Server Error) for "https://api.example.com/submit" [MsgId: MERR-26627]
Action.c(42): web_submit_data("submit") highest severity level was "ERROR", 0 body bytes, 0 header bytes [MsgId: MMSG-26388]
在Controller中执行压力测试时,获取日志的三种途径:
实时监控日志:
错误快照功能:
c复制lr_set_debug_message(LR_MSG_CLASS_EXTENDED_LOG | LR_MSG_CLASS_RESULT_DATA, LR_SWITCH_ON);
这段代码可以在检测到错误时自动保存上下文数据
结果分析器(Results Analysis)中的日志整合:
通过lr_log_message函数可以增强日志:
c复制// 记录关键变量值
lr_log_message("Current user token: %s", lr_eval_string("{token}"));
// 记录检查点结果
if(atoi(lr_eval_string("{status_code}")) != 200){
lr_error_message("API failed with status: %s", lr_eval_string("{response}"));
}
| 错误代码 | 可能原因 | 解决方案 |
|---|---|---|
| -26612 | 连接超时 | 检查网络/增加超时阈值 |
| -27995 | 证书问题 | 更新证书或禁用SSL验证 |
| -26366 | 参数化错误 | 检查参数文件路径和格式 |
| -27496 | 资源未找到 | 验证URL和资源路径 |
某次电商压测中出现随机失败,通过分析日志发现:
log复制Action.c(18): Error -27728: Step download timeout (120 seconds) exceeded
for "https://static.example.com/product_1234.jpg" [MsgId: MERR-27728]
排查过程:
在大型压力测试中,日志记录本身会成为性能瓶颈。我的优化建议:
采样记录策略:
c复制// 只记录前100个用户的完整日志
if(atoi(lr_eval_string("{vuserID}")) < 100){
lr_set_debug_message(LR_MSG_CLASS_EXTENDED_LOG, LR_SWITCH_ON);
}
错误定向记录:
c复制// 只在错误发生时记录详细数据
if(rc = lr_continue_on_error(1)){
lr_log_message("Error context: %s", lr_eval_string("{response}"));
}
日志分卷存储:
在实际项目中,我通常会建立日志管理规范:
这种分级策略既保证了问题可诊断性,又避免了不必要的性能开销。记住,好的日志策略不是记录越多越好,而是在适当的时候记录适当的信息。