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 的测试技巧,还希望和大家交流。 

猜你喜欢

转载自blog.csdn.net/tanghongchang123/article/details/51967537