JMeter执行.NET4.8脚本时报AjaxControlToolkit程序集哈希错误如何解决?
故障根因
Assembly "AjaxControlToolkit, Version=3.5.60501.0, Culture=neutral, PublicKeyToken=28f01b0e84b6d53e" does not contain a script with hash code 报错的直接诱因是硬编码了ScriptManager动态生成的隐藏域值,该值由服务端基于当前请求上下文、AjaxControlToolkit版本、加载的脚本资源动态计算哈希,每次会话/请求都会发生变化,多线程或二次执行时静态值和服务端新生成的哈希不匹配就会抛错。你已经完成了ViewState和EventValidation的动态处理,仅需要补充对ScriptManager相关隐藏域的动态提取即可解决问题。
修复操作步骤
- 第一步:定位ScriptManager生成的隐藏字段
AjaxControlToolkit对应的ScriptManager会生成两类需要提取的隐藏域:- 名称以
__TSM_HiddenField_开头的隐藏域(ToolkitScriptManager特有字段,存储所有脚本资源的哈希集合) - 所有携带
hash参数的ScriptResource.axd/WebResource.axd请求,其哈希值来源均存储在上述隐藏域中
- 名称以
- 第二步:添加JMeter正则表达式提取器
在上一个返回包含ScriptManager隐藏域的请求节点下,添加正则表达式提取器,基础配置参考:- 引用名称:自定义变量名,例如
script_manager_hash - 正则表达式:
<input type="hidden" name="__TSM_HiddenField_.+?" id="__.+?" value="(.+?)" /> - 模板:
$1$ - 匹配数字:
1
- 引用名称:自定义变量名,例如
- 第三步:替换所有静态的ScriptManager相关值
将脚本中所有硬编码的ScriptManager隐藏域提交值、以及ScriptResource.axd请求中的hash参数值,全部替换为提取到的变量${script_manager_hash},如果场景中需要拆分多个独立哈希值,对应调整提取规则拆分变量即可。 - 第四步:校验配置正确性
先将线程组设置为2个线程、循环执行3次,确认查看结果树中无报错后,再逐步提升到目标压测线程数即可。
注意:如果正则匹配不到值,可直接在浏览器访问对应页面,右键查看源代码搜索hidden和ScriptManager相关字段,调整正则表达式的name/ID匹配规则即可
内容的提问来源于stack exchange,提问作者Archana
相关产品推荐
相关产品推荐

