【发布时间】:2015-01-03 03:01:57
【问题描述】:
我有一个用于 Web 应用程序的 JMeter (2.12 r1636949) 测试计划。线程组中的一个有问题的步骤是应用程序中远程 URI 的 HTTP 采样器,它需要一个没有 Content-Type 标头的 HTTP POST,否则它会因 HTTP 500 错误而失败。更改 Web 应用程序不是一种选择 - 使用 Fiddler 检查流量表明浏览器能够做到这一点。
如何禁止从 JMeter HTTPSampler 发送 HTTP 标头 Content-Type?
我尝试过的:
- 将 HTTP 标头管理器添加到采样器,并将
Content-Type设置为空白(并设置为“REMOVEME”) - 使用以下行添加 BeanShell 预处理器:
sampler.getHeaderManager().removeHeaderNamed("Content-Type"); - 设置 HTTPSampler“与浏览器兼容的标头”复选框,因为根据its documentation,这可以抑制
Content-Type,但显然仅如果设置了“使用多部分/表单数据进行 POST” .我无法设置它,因为 webapp URI(千叶 XForms...Flux/exec/Flux.fireAction路径)也不接受 multipart。该应用程序似乎严格要求以换行符分隔的正文数据,但没有 Content-Type。
以上都不会导致 JMeter 成功调用远程资源,或者,就此而言,避免发送Content-Type。我已经将我在查看结果树中看到的内容与 Fiddler 中记录的应用流量进行了比较,我所能看到的唯一不同是缺少Content-Type。
我试图在 JMeter 线程组中重新创建来自 Fiddler 的原始请求示例:
POST http://hostname/AppName/Flux/exec/Flux.fireAction HTTP/1.1
Accept: */*
Accept-Language: en-us
Referer: http://...referer url...
Accept-Encoding: gzip, deflate
User-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; WOW64; Trident/6.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; InfoPath.3; MS-RTC LM 8)
Host: hostname
Content-Length: 143
DNT: 1
Connection: Keep-Alive
Pragma: no-cache
Cookie: JSESSIONID=0000N1QLLDQCQycbKzkeaYFfCr3:18ujjmvjf
callCount=1
c0-scriptName=Flux
c0-methodName=fireAction
c0-id=9983_1420240552716
c0-param0=string:C187
c0-param1=string:1420240546765
xml=true
更新:
我能够通过一点 JMeter hack 成功调用服务器端 URL。通过遵循 2.12 source(我确定将采样器设置为 HttpClient 4)并仔细检查 HTTP Sampler docs(特别是用于发送文件的 MIME-Type 注释),我将采样器切换到 Parameters选项卡并将以前的正文数据内容移动到一个文本文件,现在作为 single 文件引用以发送 no 参数名称和内容类型设置为text/plain。但是,正文内容需要是动态的,因此静态文件不会这样做 - 我需要引用几个线程组变量。我目前正在研究如何读取/写入文件,可能作为预处理器以线程安全的方式设置此内容,但这似乎是一个巨大的黑客攻击。我认为这可能是一个值得的补丁,允许没有内容类型的正文数据,特别是在默认情况下不确定TODOcomment。
【问题讨论】:
标签: jmeter