Jmeter跟postman都是接口测试的最常用工具,但Jmeter还可以进行压力测试,这点就挺好。下面就介绍一下使用方法和功能:

一、jmeter 的下载跟安装

 这是下载安装包的地址,下载后解压,D:\apache-jmeter-3.1\bin\jmeter.bat  不需要安装,直接双击jmeter.bat就可以进入界面了。

* 因为jmeter是java开发的,因此需要提前安装java jdk1.8+

二、线程组,一个项目用一个线程组,测试计划 -> 添加 -> Threads -> 线程组

三、我们添加了线程组之后,就开始添加请求了,右键线程组, 添加 -> sampler -> http请求

一个http请求就是一个接口,开始配置各个参数:

jmeter测试 please enable JavaScript to continue jmeter test action的作用_ide

端口号我们设置为80,这样一个get请求就设置好了。

下面在来一个post 方式的请求:

jmeter测试 please enable JavaScript to continue jmeter test action的作用_ide_02

post方式的提交跟 get不同的是,有 request body,在Body Data里设置json格式的数据,作为提交到服务器的参数。

三、那么我们提交了请求,现在就应该看看结果了,这时候在所在请求上,右键 -> 添加 -> 监听器 -> 观察结果树

在实际工作中,我们都是一个请求对应一个结果树。

jmeter测试 please enable JavaScript to continue jmeter test action的作用_ide_03

 

 

下面有三个选项卡,通过查看请求跟响应数据可以看到我们想要的数据。返回的请求结果。

四、经常遇到入参变动,这时候可以考虑,将其设置为变量,jmeter提供了三种方式设置变量

1、用户自定义变量 :

在所在的请求上右键,添加、配置元件、用户自定义变量。

jmeter测试 please enable JavaScript to continue jmeter test action的作用_线程组_04

定义好了,如何引用呢? ${domain} 通过这个就可以了。

3、用CVS文件读取:

在所在的请求上右键,添加、配置元件、CVS Data Set Config。

jmeter测试 please enable JavaScript to continue jmeter test action的作用_线程组_05

 

 第二种不常用就不说了。

五、有一种情况就是,服务器域名、端口、协议、编码都是相同的,那么我们没有必要每一个请求都添加一遍,这个时候可以使用,http请求默认值:

右键测试计划、添加、http默认请求。

jmeter测试 please enable JavaScript to continue jmeter test action的作用_右键_06

 

六、我们在接口请求的时候经常是处于登录状态下的,没有cookie或者token,无法请求一些私密性的接口:

所在请求上右键、添加、配置元件、cookie管理器,在里面设置三个参数,key value domain

七、jmeter断言提供了几种方法,我喜欢bean shell函数,比较灵活:

所在请求上右键、添加、断言、bean shell断言,

jmeter测试 please enable JavaScript to continue jmeter test action的作用_线程组_07

 

String response = "";
// Str  就是接口的一个字段,  response就是接口内容
String Str = "\"externalSignInProviders\":[{\"provider\":\"WeChat\",\"providerDisplayName\":\"微信\"},{\"provider\":\"QQ\",\"providerDisplayName\":\"QQ\"},{\"provider\":\"GitHub\",\"providerDisplayName\":\"GitHub\"}]";   
response = prev.getResponseDataAsString();
if(response == ""){
// 设置断言失败为真
Failure = true;
FailureMessage =   "系统无响应,获取不到响应数据!";
log.info(FailureMessage);}
else if(response.contains(Str) == false){
// 设置断言失败为真
Failure = true;String Msg = "\n系统返回响应结果与期望结果不一致!请排查是性能问题,还是程序代码问题"; 
FailureMessage = Msg + "\n" + "期望结果:\n" + Str + "\n" + "响应内容: \n" + response +"\n";
log.info(FailureMessage);
}else{
// 设置断言失败为假
Failure = false;
log.info("期望结果:\n" + Str + "\n" + "响应内容: \n" + response +"\n"+"一致通过");}

八、 有的时候,上一个请求返回的接口中提取指定的值,用来做下一次请求的参数,就叫做接口关联,我喜欢使用json提取。还可以使用正则表达式提取。

所在请求上右键、添加、后置处理器、json extractor,

先看看接口结果:

{"publicKey":"MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCp0wHYbg/NOPO3nzMD3dndwS0MccuMeXCHgVlGOoYyFwLdS24Im2e7YyhB0wrUsyYf0/nhzCzBK8ZC9eCWqd0aHbdgOQT6CuFQBMjbyGYvlVYU2ZP7kG9Ft6YV6oc9ambuO7nPZh+bvXH0zDKfi02prknrScAKC0XhadTHT3Al0QIDAQAB","externalSignInProviders":[{"provider":"WeChat","providerDisplayName":"微信"},{"provider":"QQ","providerDisplayName":"QQ"},{"provider":"GitHub","providerDisplayName":"GitHub"}],"externalSignedIn":null}

jmeter测试 please enable JavaScript to continue jmeter test action的作用_右键_08

根据接口的结构,这样添加就可以了。

* 注意请求的顺序,必须是提供参数的请求在先,接收参数的请求靠后。