2009-12-22 53 views
1

我想使用JMeter加载测试Rails应用程序。应用程序的关键部分涉及一个包含文本输入和文件上传的表单。它可以在浏览器中正常工作,但是当我尝试在JMeter中发布该页面时,Rails将多部分表单的所有部分都保存为临时文件,这会在查找字符串并导致临时文件时导致事件中断。负载测试多部分形式

看来,所不同的是,从一个浏览器,该件包含文本输入多部分请求的看起来像这样:

-----------------------------7d93b4186074c 
Content-Disposition: form-data; name="field_name" 

test 
-----------------------------7d93b4186074c 

而从JMeter的它看起来像这样:

-----------------------------7d159c1302d0y0 
Content-Disposition: form-data; name="field_name" 
Content-Type: text/plain; charset=utf-8 
Content-Transfer-Encoding: 8bit 

test 
-----------------------------7d159c1302d0y0 

显然,Rails看到前者并将其解释为纯文本值,并将其视为字符串,但将后者视为后者并将其保存为临时文件。

我一直无法找到一个设置来说服JMeter不要在多部分窗体中为非文件字段发送额外的标头。

有没有一种方法说服Rails忽略这些标题并将文本/纯文本视为字符串而不是文本文件?或者在我的控制器前放置一个过滤器的快捷方式,可以去除额外的头部?

另外,是否有更好的工具来加载测试包含文件上传的Rails应用程序?

回答

0

有可能是一个更好的办法,但我最终加入一个快速过滤器打开text/plain的临时文件转换成字符串参数哈希中:

def change_text_files_to_strings 
    params.each_pair do |key, value| 
     params[key] = value.read if (value.class.to_s=='Tempfile' && value.content_type.start_with?('text/plain')) 
    end 
    end 

顺便说,事实证明,JMeter是在这里更正,导轨不正确:根据RFC 2388,多部分请求中的每个项目都应该具有内容类型(不仅仅是文件),所以Rails确实不应该使用内容类型头部的存在来确定它是否是文件。呃,好吧。

0

我还使用了上面的解决方案,因为ColdFusion发送类似的头文件(减去Content-Transfer-Encoding)与每条表单数据。我想知道是否有更好的方法。

编辑:任何人都知道这是否已在Rails 3中修复?

1

因此,我已经在源代码中定制了JMeter的多部分请求发布部分,以提出轨道理解的请求。改变很简单,如下所示,但创建编译Java/JMeter环境需要花费时间。 :(

不管怎么说,现在我可以上传成功通过多交一个文件可以通过JMeter。


在SRC /协议

/HTTP /组织/阿帕奇/ JMeter的/协议/ HTTP /采样/ PostWriter.java

writeStartFileMultipart() 
//writeln(out, "Content-Transfer-Encoding: binary"); // $NON-NLS-1$ 

writeFormMultipart() 
/***** 
writeln(out, "Content-Type: text/plain; charset=" + charSet); // $NON-NLS-1$ 
writeln(out, "Content-Transfer-Encoding: 8bit"); // $NON-NLS-1$ 
*****/ 

PS

尖端尖端2创建构建环境。4是

  1. 注释掉第三方库检查build.xml文件。

+0

不是开源的太棒了! – 2010-10-18 19:30:11

0

你什么样的错误

  • 复制的lib/XStream的-1.3.1.jar从二进制归档到lib /目录?类似于

    NoMethodError (undefined method `rewind' for "1":String): 
    

    Rack有问题可以解释您的问题。请参阅https://github.com/rack/rack/issuesearch?state=open&q=rewind#issue/116

  • +0

    谢谢,但这实际上看起来像是相反的问题:在Rack问题中它应该有一个Tempfile时有一个字符串,但我的问题是我认为应该是字符串(简单表单字段值)的东西显示作为临时文件。 – 2011-02-14 21:03:38

    2

    现在您可以在JMeter中勾选“使用浏览器兼容标题”。可能已经保存自己很多的时候有地狱:-)

    0

    我们也都具有类似的问题,除了上面的答案,我们也该请求相关的HTTP头Manager的X-CSRF-Token并且是 成功能够根据需要多次上传所需的媒体。