我有一个针对Web应用程序的JMeter(2.12 r1636949)测试计划。线程组中的一个有问题的步骤是应用程序中的远程URI的HTTP采样器,它需要没有Content-Type
标头的HTTP POST,否则它会因HTTP 500错误而失败。更改Web应用程序不是一个选项 - 使用Fiddler检查流量显示浏览器能够执行此操作。
如何禁止从JMeter HTTPSampler发送HTTP标头Content-Type
?
我尝试了什么:
Content-Type
设置为空白(以及“REMOVEME”)的情况下将HTTP标头管理器添加到采样器sampler.getHeaderManager().removeHeaderNamed("Content-Type");
Content-Type
,但显然仅如果“使用multipart / form-data为POST“已设置。我无法设置此项,因为webapp URI(千叶XForms ...Flux/exec/Flux.fireAction
路径)也不接受multipart。该应用程序似乎严格要求换行符分隔的正文数据,但没有Content-Type。 以上都不会导致JMeter成功调用远程资源,或者就此而言,不会发送Content-Type
。我将我在“查看结果树”中看到的内容与Fiddler中记录的应用流量进行了比较,我所能看到的只是Content-Type
的缺席。
来自Fiddler的原始请求示例我正在尝试在JMeter线程组中重新创建:
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
注释)我将采样器切换到参数选项卡,将以前的正文数据内容移动到现在作为单文件引用的文本文件,并使用否参数名称和内容类型设置为{ {1}}。但是,正文内容需要是动态的,因此静态文件不会 - 我需要引用一些线程组变量。我目前正在研究如何读取/写入一个文件,可能作为PreProcessor以线程安全的方式设置这个内容,但这似乎是一个大规模的黑客攻击。我认为这可能是一个有价值的补丁,允许Body Data没有内容类型,特别是在默认情况下不确定text/plain
comment。
答案 0 :(得分:0)
我通过在HTTP Sampler之前添加一个BeanShell Sampler来解决这个问题,它将动态文本(使用vars.get(...)
)作为其“响应”返回。在该采样器中,我使用a function for the per-virtual-user filename使用“保存响应文件”侦听器,将文件名存储为变量。在HTTP Sampler中,我在File Path
字段中使用了此变量,Parameter Name
text/plain
和MIME-Type.
下面是BeanShell脚本,如果这可以帮助任何人,以及解决方法的屏幕截图。
//script for prepping Flux.fireAction request
sb = new StringBuilder();
NL = System.getProperty("line.separator");
sb.append("callCount=1").append(NL);
sb.append("c0-scriptName=Flux").append(NL);
sb.append("c0-methodName=fireAction").append(NL);
sb.append("c0-id=2728_1420218928279").append(NL);
sb.append("c0-param0=string:").append(vars.get("chibaIdFromRetrieveButton")).append(NL);
sb.append("c0-param1=string:").append(vars.get("chibaSessionKey")).append(NL);
sb.append("xml=true");
return sb.toString();