如何在LoadRunner Vugen中捕获请求体中仅出现的动态值?
解决LoadRunner中
ctl00$head$txtMagicNo的动态值捕获问题 这个txtMagicNo的值是客户端JavaScript动态生成的,没有在前后请求的响应中返回,所以常规关联、虚拟请求的方法都不适用,解决步骤如下:
1. 定位生成该值的JavaScript逻辑
打开浏览器开发者工具(F12),按以下步骤操作:
- 进入
Sources面板,加载请求对应的Referer页面(http://loadrunnertips.com/LoadRunner_Correlation_Challenge_Exp.aspx) - 搜索关键词
txtMagicNo或MagicNo,找到赋值该输入框的JS代码,分析其生成规则:- 常见规则:时间戳拼接随机数、基于页面已有参数(如
__VIEWSTATE)的哈希计算、固定密钥加密等
- 常见规则:时间戳拼接随机数、基于页面已有参数(如
2. 在LoadRunner脚本中模拟JS生成逻辑
LoadRunner支持C语言函数,将JS的生成逻辑转译为C代码,生成对应值后存入参数:
示例1:时间戳+随机数逻辑
如果JS代码是类似document.getElementById('ctl00_head_txtMagicNo').value = Date.now() + Math.floor(Math.random()*1000),脚本中可写:
// 获取当前毫秒级时间戳 long long timestamp = gettimeofday_ms(); // 生成0-999的随机数 int rand_num = rand() % 1000; // 拼接成目标值 char magic_no[20]; sprintf(magic_no, "%lld%d", timestamp, rand_num); // 保存为参数{MagicNo} lr_save_string(magic_no, "MagicNo");
示例2:基于__VIEWSTATE的MD5加密逻辑
如果JS是对__VIEWSTATE拼接固定密钥做MD5加密,脚本中可写:
char viewstate_buf[10240], combined_buf[10240], md5_result[33]; // 提取已关联的__VIEWSTATE参数值 lr_eval_string_ext("{VIEWSTATE}", strlen("{VIEWSTATE}"), viewstate_buf, sizeof(viewstate_buf), 0, 0, NULL); // 拼接VIEWSTATE与固定密钥 sprintf(combined_buf, "%s%s", viewstate_buf, "your_found_secret_key"); // 计算MD5值 lr_md5(combined_buf, strlen(combined_buf), md5_result); // 保存为参数 lr_save_string(md5_result, "MagicNo");
3. 替换脚本中的硬编码值
将原脚本中的硬编码行:
"Name=ctl00$head$txtMagicNo", "Value=1118330860", ENDITEM,
替换为参数引用:
"Name=ctl00$head$txtMagicNo", "Value={MagicNo}", ENDITEM,
4. 验证逻辑正确性
- 在浏览器中多次触发请求,记录
txtMagicNo的生成规律,对比脚本生成的值是否匹配 - 运行LoadRunner脚本,检查请求是否成功提交,无参数错误或服务器拒绝的情况
内容的提问来源于stack exchange,提问作者user23059256
相关产品推荐
相关产品推荐

