Jmeter: send a file


Jmeter: send a file

Jmeter是一款功能非常强大的压力测试软件。关于测试的相关概念、压力测试和功能测试的区别读者可以参考相关文章。

笔者只是近段时间用到Jmeter做测试工作,所以接触到了该软件,并且正在学习Jmeter的复杂功能。有关Jmeter的中文手册,在网上也有资源。

由于文件上传是Web应用中的一个常用功能,所以对其进行测试是在所难免的。但是对于文件上传的具体设置,Jmeter功能手册中只有简单的介绍,而网上的相关资料也比较少。

笔者目前已经完成了用Jmeter测试文件上传功能的操作,其中过程也是几经波折,这里给大家介绍下,让大家少走弯路,希望对大家有帮助。

本文主要介绍使用Jmeter对文件上传的测试操作。1将文件添加至Jmeter(add a file to Jmeter)

主要用Jmerter模拟页面表单上传文件的操作,页面表单中也可能包含其他参数。

注意,为了上传文件,必须设置Use multipart/form-data for POST,否则request中将不包含上传的文件。

另外,必须添加文件的 参数名称,否则在server端用servlet进行解析时,无法获得文件。

2查看POST内容(look up into POST data)

笔者最开始遇到的问题是一旦添加文件,那么server端对其他参数authwaychallengeRes也无法解析了。所以最后通过观察POST内容才明白原理。

注:这里的文件上传的原理可以参考李刚写的STRUTS2.1权威指南。查看Jmeter的 查看结果树 监听器,选择请求->Raw

截图如上,每一个“-----------------------------”为分隔符,代表一个表单域;最后一个“-----------------------------7d159c1302d0y0--”(以“--”结尾)分隔符为表单域结束边界。由此可以看到,POST data中共有三个表单域,前两个部分为request参数,最后一个即包含了name=file(这个name的值可以自己定),filename=sklois.cer的为实际上传的文件内容<actual file content, not shown here>,部分即文件内容,这里未显示。注意在“Content-Transfer-Encoding: binary”和<actual file content, not shown here>之间有一行空白,这里必须清楚POST data的详细格式,否则在server端解析时会出错。

3 server端解析(parse POST data of client at server)

这里采用servlet编程,文件上传框架采用Common-FileUpload组件。关于文件接收,网上有很多资料。这里以上面的例子来接收。

使用该上传组件需要commons-fileupload-1.2.1.jar(新版本也可),复制至WEB-INF/lib路径下;

commons-io-1.4.jar复制至WEB-INF/lib路径下。Server端主要代码如下:

由此,便在server端接收到了由Jmeter传送过来的文件,并且保存为filename。这里采用Common-FileUpload组件可以接收任意类型的文件,读者也可以直接采用底层的方法接

收文件,但是较为麻烦,所以还是推荐采用该组件,可以非常容易的提取各个不同的表单域。

笔者在测试上传文件时,遇到了很多问题,但是经过查看POST data便对Jmeter的传送机制有了很好的理解。读者有问题,可以查看详细的POST data,有助于理解数据的封装格式。第二个问题主要是在server端的解析,开始笔者也是自己用最底层的方式来读取,不过会出现较多问题,比较复杂。所以这里还是推荐采用Common-FileUpload组件,将得到事半

功倍的效果。
更多
Jmeter的测试技巧,还希望和大家交流。 


版权声明:本文为tanghongchang123原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。