You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.02 06:03:33