使用JMeter 5.4.1录制.Net应用时permission相关页面返回500或异常响应
运行环境
- JMeter版本:5.4.1
- 测试浏览器:MS Edge 94.0、Google Chrome 94.0、FireFox 92.0.1
问题特征
90%的普通页面录制流程完全正常,无页面崩溃问题,响应返回正确;仅发起permission.aspx或permission.asp页面相关请求时,会触发报错,或页面展示错误响应内容。已尝试将录制类型从httpclient4切换为Java,问题未解决。
报错信息
JMeter日志错误
Cause: java.io.IOException: Server returned HTTP response code: 500 for URL: https://xxxx.xx.xx.com/
服务端返回异常详情
USERID:
ASP.Net EXCEPTION:
StatusCode: 200
Error Message: Exception of type 'System.Web.HttpUnhandledException' was thrown.(错误信息:已引发“System.Web.HttpUnhandledException”类型的异常)
Inner Exception: System.NullReferenceException: Object reference not set to an instance of an object.(内部异常:System.NullReferenceException:未将对象引用设置到对象的实例)
根因判断
该异常本质是.NET服务端的空引用报错,触发原因是JMeter录制时未完整携带权限页面依赖的特定请求参数、请求头或Cookie。权限类页面通常会额外校验会话上下文、请求来源、.NET专属身份校验令牌等强校验字段,普通页面的通用录制规则无法覆盖这类场景。
解决步骤
- 录制前清空浏览器全部Cookie、缓存,先手动完整走一遍从登录到访问permission页面的流程,确认页面可正常加载后再启动JMeter录制,不要跳过前置身份校验步骤直接访问权限页面。
- 打开JMeter的HTTP(S) Test Script Recorder配置页,在
Requests Filtering标签下取消所有针对Cookie、请求头的过滤规则,确保.NET特有的__RequestVerificationToken、.ASPXAUTH等身份校验字段被完整录制。 - 录制完成后,将JMeter捕获的permission相关请求,与浏览器开发者工具中捕获的正常请求做逐字段比对,补充缺失的
Referer、Origin请求头,以及表单提交所需的所有隐藏字段参数。 - 若重放仍报错,在权限请求同级添加
HTTP Cookie Manager,勾选Clear cookies each iteration,手动补全权限校验依赖的Cookie键值对后再测试。
内容的提问来源于stack exchange,提问作者Qlee

