Jmeter 附件名参数化_01

上一篇 / 下一篇  2018-04-23 11:19:11 / 个人分类:Jmeter

转自:
https://blog.csdn.net/defonds/article/details/41593253?utm_source=tuicool&utm_medium=referral


   问题描述

        文件上传时,用户定义 Content-Disposition 是失效的。
        笔者在写压力测试脚本的时候,有个上传页面,服务器是根据用户传过来的 Content-Disposition 里的 filename 值来定义保存文件的文件名的。但是测试人员不可能为每一次请求都准备一个不同的文件(这个工作量海了去了),所以 JMeter 传给服务器的 Content-Disposition 里的 filename 必须是随机而不重复的。
        有人问,用户真实上传时,浏览器传给服务器的 filename 也是上传文件名吗?不是的,js 这样修改的 filename:
[javascript] view plain copy
  1. uploader.onBeforeUploadItem = function (item) {  
  2.     //修改名字  
  3.     var timeStamp = new Date().getTime();  
  4.     var fileName = item.file.name;  
  5.     item.file.name = timeStamp + fileName.substr(fileName.lastIndexOf('.'));  
  6.     var day = $filter('date')(new Date(), 'yyyyMMdd');  
  7.     item.url = [item.url, "batchImport", item.importType, day, session.userId].join("/");  
  8. };  

        笔者尝试了多种办法,试图修改服务器接收到的 filename 值,结果都失败了。笔者尝试的办法有:

        1. 添加 HTTP 参数

添加 HTTP 参数
        如图所示,我们期待服务器接收到的 filename 值是 00004000.xls,而不是 00000000.xls。
        结果服务器接收到的是 00000000.xls。服务器返回给客户端的存储路径为证:/batchImport/merAdd/20141128/1/00000000.xls。查看本次 HTTP 请求,可以看到以下信息:
POST http://serverIP/upload/batchImport/merAdd/20141128/1

POST data:
--DoZtX5jrOIxJTocysPzYJ1WVqtoagXMQHHqho4i
Content-Disposition: form-data; name="Content-Disposition"
Content-Type: text/plain; charset=US-ASCII
Content-Transfer-Encoding: 8bit

form-data; name="14170058206940.xls"; filename="00004000.xls"
--DoZtX5jrOIxJTocysPzYJ1WVqtoagXMQHHqho4i
Content-Disposition: form-data; name="file"; filename="00000000.xls"
Content-Type: application/vnd.ms-excel
Content-Transfer-Encoding: binary

<actual file content, not shown here>
--DoZtX5jrOIxJTocysPzYJ1WVqtoagXMQHHqho4i--

Cookie Data:
$Version=0; JSESSIONID=AC79777AEFE5AFC690623FCCB09E5DD5; $Path=/

Request Headers:
Connection: keep-alive
Content-Length: 34786
Content-Type: multipart/form-data; boundary=DoZtX5jrOIxJTocysPzYJ1WVqtoagXMQHHqho4i
Host: serverIP
User-Agent: Apache-HttpClient/4.2.6 (java 1.5)

        看来 JMeter 把我们的 Content-Disposition 参数名字都丢了。

        2. 添加 HTTP 信息头管理器

添加 HTTP 信息头管理器
        如图所示,我们期待服务器接收到的 filename 值是 40004000.xls,而不是 00000000.xls。
        然后我们发次请求,然后查看本次 HTTP 请求,可以看到以下信息:
POST http://serverIP/upload/batchImport/merAdd/20141128/1

POST data:
--BNKvCNweqwpTJToYINcDn6JJfzjazBE550a-
Content-Disposition: form-data; name="file"; filename="00000000.xls"
Content-Type: application/vnd.ms-excel
Content-Transfer-Encoding: binary

<actual file content, not shown here>
--BNKvCNweqwpTJToYINcDn6JJfzjazBE550a---

Cookie Data:
$Version=0; JSESSIONID=49AB53310FB7241B5544B4E747A58F80; $Path=/

Request Headers:
Connection: keep-alive
Content-Disposition: form-data; name="file"; filename="40004000.xls"
Content-Length: 34535
Content-Type: multipart/form-data; boundary=BNKvCNweqwpTJToYINcDn6JJfzjazBE550a-
Host: serverIP
User-Agent: Apache-HttpClient/4.2.6 (java 1.5)

        这次 JMeter 没有把我们的 Content-Disposition 弄丢,它出现在了 Request Headers 里边。但是服务器貌似读取的是 POST data 中 Content-Disposition 里的那个 filename。有服务器返回给客户端的存储路径为证:/batchImport/merAdd/20141128/1/00000000.xls



TAG:

 

评分:0

我来说两句

Open Toolbar