Loadrunner脚本执行错误:Requested image not found解析与解决

一、错误现象与影响分析

在Loadrunner性能测试场景中,”Requested image not found”错误通常出现在脚本回放阶段,具体表现为:

  1. 脚本录制时正常,但回放时HTTP请求返回404状态码
  2. 错误日志中明确提示资源路径(如图片、CSS、JS文件)无法定位
  3. 导致页面渲染不完整,影响后续业务操作验证

该问题对测试结果的影响具有隐蔽性:

  • 基础功能测试可能因资源缺失而中断
  • 性能数据采集可能包含异常请求
  • 自动化测试流程可能因断言失败而终止

典型错误日志示例:

  1. Action.c(123): Error -26612: HTTP Status-Code=404 (Not Found) for "https://example.com/static/images/logo.png"
  2. [MsgId: MERR-26612]
  3. Action.c(123): web_url("home_page") highest severity level was "ERROR", 1 body bytes, 283 header bytes

二、问题根源深度剖析

1. 环境配置差异

(1)测试环境与生产环境资源路径不一致

  • 开发环境使用相对路径(如/static/img/
  • 生产环境部署在CDN导致路径变更
  • 负载均衡配置引发的域名解析差异

(2)协议版本不匹配

  • HTTPS站点强制跳转导致资源请求被拦截
  • HTTP/2协议下资源加载机制变化

(3)代理配置问题

  • 录制时使用代理服务器但回放时未配置
  • 代理规则过滤了特定类型的静态资源

2. 脚本实现缺陷

(1)硬编码资源路径

  1. // 错误示例:直接使用绝对路径
  2. web_url("logo",
  3. "URL=https://dev.example.com/static/images/logo.png",
  4. LAST);

(2)动态参数处理不当

  • 未捕获的JavaScript动态加载资源
  • AJAX请求返回的动态路径未参数化

(3)会话保持问题

  • 登录态失效导致权限资源无法访问
  • Cookie/Session过期策略不一致

3. 资源依赖管理

(1)第三方资源变更

  • CDN服务商更新资源版本
  • 第三方库升级导致路径结构变化

(2)本地缓存干扰

  • 浏览器缓存策略影响资源加载验证
  • Loadrunner缓存机制与真实用户行为差异

三、系统化解决方案

1. 环境标准化建设

(1)路径管理规范

  1. // 推荐方案:使用参数化路径
  2. char* resourcePath;
  3. if (strcmp(lr_get_host_name(), "dev.example.com") == 0) {
  4. resourcePath = "/dev-static/images/";
  5. } else {
  6. resourcePath = "/prod-static/images/";
  7. }
  8. web_url("logo",
  9. "URL={resourcePath}logo.png",
  10. LAST);

(2)协议一致性验证

  • 使用Wireshark抓包对比录制/回放请求差异
  • 配置Loadrunner的HTTP高级选项:
    1. // 在Runtime Settings -> Internet Protocol -> Preferences
    2. Enable "Follow Redirects"
    3. Disable "Cache Control" during replay

2. 脚本优化实践

(1)资源加载验证机制

  1. // 添加资源存在性检查
  2. web_reg_find("Text=logo.png",
  3. "SaveCount=pngCount",
  4. LAST);
  5. web_url("home_page",
  6. "URL=https://example.com/",
  7. LAST);
  8. if (atoi(lr_eval_string("{pngCount}")) == 0) {
  9. lr_error_message("Critical resource missing");
  10. return -1;
  11. }

(2)动态资源处理策略

  • 使用web_reg_save_param捕获动态路径
  • 结合关联函数处理加密资源名

3. 资源依赖管理方案

(1)构建资源版本控制系统

  • 维护资源哈希值与路径的映射表
  • 实现自动化校验脚本:
    1. # 示例校验脚本
    2. import requests
    3. def verify_resource(url):
    4. try:
    5. response = requests.get(url, timeout=5)
    6. return response.status_code == 200
    7. except:
    8. return False

(2)本地化测试资源

  • 搭建内部资源服务器
  • 配置Loadrunner使用本地镜像:
    1. // 在vuser_init段设置
    2. lr_save_string("http://local-resource/static/", "localBasePath");
    3. web_set_proxy("", "", "", 0); // 禁用代理

四、预防性措施与最佳实践

  1. 环境一致性检查清单

    • 域名解析验证
    • 证书有效性检查
    • 跨域资源共享(CORS)配置
  2. 脚本维护规范

    • 建立资源路径白名单
    • 实施脚本版本控制
    • 定期执行回归测试
  3. 性能测试优化建议

    • 对静态资源设置合理超时时间:
      1. // 在Runtime Settings中配置
      2. web_set_timeout("Step Download Timeout", 30);
    • 使用资源下载监控工具(如Fiddler)辅助分析
  4. 自动化校验机制

    • 集成资源校验到CI/CD流程
    • 开发自定义校验插件
    • 建立告警阈值体系

五、典型案例解析

案例1:CDN资源路径变更

  • 问题现象:回放时404错误集中在CDN资源
  • 根本原因:生产环境切换CDN供应商未更新脚本
  • 解决方案:
    1. 修改脚本使用相对路径
    2. 配置CDN回源策略
    3. 添加资源校验前置步骤

案例2:动态加载图片缺失

  • 问题现象:特定操作后图片无法显示
  • 根本原因:JavaScript动态生成图片URL未捕获
  • 解决方案:

    1. // 使用web_reg_save_param捕获动态URL
    2. web_reg_save_param("dynamicImg",
    3. "LB/IC=data:image/png;base64,",
    4. "RB/IC=\"",
    5. LAST);
    6. // 执行触发动态加载的操作
    7. web_click("generate_image_btn",
    8. "Snapshot=t1.inf",
    9. LAST);

通过系统化的环境管理、脚本优化和资源控制,可有效解决Loadrunner脚本执行中的”Requested image not found”错误。建议测试团队建立资源校验自动化体系,将静态资源监控纳入持续集成流程,从源头预防此类问题的发生。在实际项目中,可结合百度智能云提供的性能测试解决方案,利用其分布式执行环境和智能诊断功能,进一步提升测试效率和问题定位精度。