多部分-如何测试在jmeter

时间:2018-08-16 03:13:17

标签: jmeter multipart stress-testing

我很难在Jmeter中上传文件(例如Upload.txt)和JSON数据。

HTTP Header Manager

查看结果树中的请求

POST http://localhost:8080/xxxx/custom/uploaddocument

POST data:
--jmeter_is_great
Content-Type: application/json; charset=UTF-8
{
	"Document": {
		"documentName": "TEST.txt",
		"fullPath": "Test",
		"priority": "M",
		"referenceNo": "Ref12345",
		"descrption": "Testfile",
		"userDef1": "",
		"userDef2": "",
		"userDef3": "",
		"userDef4": "",
		"userDef5": "",
		"userDef6": "",
		"userDef7": "",
		"userDef8": "",
		"userDef9": "",
		"userDef10": "",
		"profile": {
			"id": -2,
			"index": [{
				"id": -7,
				"value": "Signature",
				"type": "D"
			}]
		},
		"ACL": {
			"isInherit": false,
			"permission": [{
				"permissionType": "U",
				"userID": 10001,
				"groupID": "",
				"roleID": "",
				"permissionString": "ROPKFIAENTCMDHZVWGLUSB",
				"mustFlag": false
			}]
		}
	}
}

--jmeter_is_great
Content-Type: text-plain

THIS IS TESTING FILE CONTENT

--jmeter_is_great--


[no cookies]

Request Headers:
Connection: keep-alive
Content-Length: 876
Content-Type: multipart/related; boundary=jmeter_is_great

响应数据

HTTP状态415-不支持的媒体类型

实际上,在文档中有一部分JSON,如下所示:

    "content": {
   "binary": [80, 97, 114, 97, 68, 77, 32, 84, 69, 83, 84, 32, 102, 105, 108, 101]
}

我尝试了如下请求标头,然后将带有“ Content”的整个JSON发送到api:

  

[HTTP标头]   授权:YXBpYWRtaW46cGFzc3dvcmQ =   内容类型:application / json

但是,还会引发HTTP 415响应错误。

我读过一些有类似问题的文章: Testing REST API File Uploads in JMeter

期待任何见识!

2 个答案:

答案 0 :(得分:0)

  1. 您的Authorization标头似乎格式不正确,例如:

    • 应以大写字母A
    • 我期望它看起来像Basic YXBpYWRtaW46cGFzc3dvcmQ=

    请注意,绕过basic HTTP authentication in JMeter的更好方法是使用HTTP Authorization Manager,其配置如下:

    • 基本URL:http://localhost:8080/xxxx/
    • 用户名:apiadmin
    • 密码:password
  2. 您的Content-Type标头也不正确,您使用的是错误的boundary,即在HTTP标头管理器中您有andytest,在请求正文中有{{ 1}},它们必须匹配。

  3. 假设以上两点,我想提醒您,当您手动建立请求时,任何违反协议标准的行为(甚至多余或缺少空行或小写字符)都会破坏您的请求< / p>

  4. 所引用的文章假定使用Google Drive API进行演示,您的应用程序可能会以不同的方式工作,因此您可能必须重新考虑整个方法。尝试使用HTTP(S) Test Script Recorder记录您的文件上传记录(确保将jmeter_is_great文件复制到JMeter的“ bin”文件夹中),以查看所生成的请求看起来像是错误的。

  5. 请勿在同一台物理(或虚拟)计算机上运行JMeter和被测系统,因为它们将在CPU和RAM等资源上苦苦挣扎,因此您将无法获得准确可靠的结果。

答案 1 :(得分:0)

我终于找到了解决方案,希望答案能帮助面临类似问题的任何人。

首先,如果抛出此错误,则为“ HTTP状态415-不支持的媒体类型”,这很可能是错误的Content-Type。

因此,我的方法是尝试 HTTP请求标头的所有可能的Content-Type,当Content-Type设置为multipart / form-data时,我发现错误代码从415变为500。

然后,我从一个有用的链接中了解到https://docs.microsoft.com/en-us/aspnet/web-api/overview/advanced/sending-html-form-data-part-2#file-upload

中的文件上传

我将请求正文更改如下:

--boundary
Content-Disposition: form-data; name="documentJsonStr"
Content-Type: text/plain; charset=UTF-8

${myvar2}

--boundary
Content-Disposition: form-data; name="data"; filename="100MB.txt"
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: base64

${__FileToString(100MB.txt,,)}

--boundary--

$ {myvar2}由BeanShell PreProcessor设置,它包含字符串格式的Json请求。但是,取决于api接受的参数类型,它的配置可能不完全相同。

希望这很有用。