HTTP压力测试
Jmeter在实际测试工作中,主要用于HTTP接口的测试,这篇笔记我们针对HTTP采样器进行详细介绍。
HTTP采样器简介
HTTP采样器中可以配置的内容如下所示。

Basic标签中是HTTP请求的基本信息,包括协议(HTTP或HTTPS)、主机、端口、URL路径等,下面我们可以指定请求参数,包括URL参数、Body请求体和上传文件等形式。

Advanced标签中包含一些高级的配置信息,包括客户端库(Apache HTTP Client或是Java的HttpUrlConnection)、超时时间、来源地址、代理模式等,一般来说较少更改这些配置。
发起GET请求
其实上面图中配置的就是一个GET请求,我们请求了http://127.0.0.1:8081/getStudentList接口,还传了一个URL参数grade。

这里的一个小技巧是Add from Clipboard,我们可以复制如下内容param1=v1¶m2=v2,然后点击Add from Clipboard按钮,我们剪贴板中的内容就会自动以URL参数的形式填入Jmeter中。

另外要注意的是Jmeter中我们无法给GET请求添加Body请求体,这是十分合理的,毕竟HTTP协议中GET本身就不允许带请求体。然而有一些Web框架或是HTTP客户端库确实给了读取或写入GET请求体的能力,有些程序员也会写出这样的代码,这种其实属于错误的用法了,我们不予讨论。
发起POST请求
POST请求的接口常见有两种传参方式:表单请求和JSON请求。
对于表单请求,Jmeter中类似GET请求,我们需要把表单参数写在Parameters里,其中内容就是表单数据的键值对。

上面有一个Use multipart/form-data按钮,勾选后表单以multipart/form-data格式提交,取消勾选默认以application/x-www-form-urlencoded提交。对于大多数Web后端框架,multipart/form-data额外支持文件上传,其余功能和application/x-www-form-urlencoded相同,因此一般这里勾选与否都不影响。
对于JSON请求,额外需要配置一个HTTP请求头Content-Type,值为application/json。然后我们直接把JSON黏贴到HTTP采样器的Body Data里就可以了。



上面配置都比较简单,这里就不多赘述了。此外这里也要注意,Jmeter的POST请求不支持URL参数。
发起文件上传请求
文件上传请求一般都是使用multipart/form-data表单实现的。对于这种文件上传,我们需要在Files Upload标签中添加一个文件,我们可以点击Browse...按钮进行添加,其中Parameter Name是表单的键,MIME Type是文件类型。

配置好文件后,我们还可以在Parameters中填写其它表单参数。由于文件上传默认就是multipart/form-data,因此这里我们勾不勾选Use multipart/form-data按钮都是无所谓的,请求一定会以该方式上传文件。
对于其它的文件上传格式,比如自定义的Body格式,Jmeter没有对这些请求方式进行支持,不过我们可以自己编写Java Request采样器等方式,扩展这部分功能。