全网最全最细的jmeter接口测试教程以及接口测试流程详解

一、安装部署

1、mac端:下载jmeter安装包,解压直接使用,不用进行环境变量的配置(因为mac本默认安装了jdk)

2、windows端:下载jmeter安装包,需要配置jdk的环境变量,配置如下:

配置jdk环境变量

右键计算机属性->高级系统设置->系统属性->高级->环境变量->添加如下的系统变量:

变量名:【JAVA_HOME】

变量值:【D:\Program Files\Java\jdk1.8.0_92】【jdk安装路径】

变量名:【path】

变量值:【;%JAVA_HOME%\bin;】

变量名:【CLASSPATH】

变量值:【.;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar;】【.不能漏】

我用的是jmeter-5.4.1版本,在windows上安装部署遇到的问题,启动时一闪而过,程序起不来

解决方法:在环境变量处配置了JMETER_HOME,删掉这个配置,程序成功启动

二、脚本录制

注:使用的是http代理服务的方式录制

第一步:设置jmeter,在一个测试计划下添加一个线程组和一个HTTP代理服务器,如下图所示:

image.png

 需要填写的有: 1、端口(默认的或是自定义的都可以)

2、HTTPS Domains(填要录制内容的域名,注意不加 http:// 或是 https:// )

3、选择目标控制器(选择目标线程组就可以)

第二步:设置浏览器(以mac版电脑的谷歌浏览器为例),点击设置--高级---打开您计算机的代理设置

image.png

 如上图,左边勾选安全网页代理(HTTPS),右边输入框填写:localhost ,端口填写保持和jmeter中填写的一致就可以,点击按钮“好”,出来如下页面,点击应用

image.png

 第三步:jmeter中http代理服务下点击绿色的启动按钮,出来如下弹框点击ok

image.png

然后去浏览器上操作,这时会发现不能录制,到第四步

第四步:导入证书,打开谷歌浏览器,设置--安全--管理证书,在钥匙串访问页面,选择系统,然后点击左上角的文件,选择导入项目,导入jmeter-bin路径下的证书(ApacheJMeterTemporaryRootCA.crt),证书导入成功后,右击证书,打开显示简介,使用此证书选择始终信任。(注意此证书有效期7天,到期后重新操作导入一遍即可)

image.png

image.png

image.png

image.png

image.png

以上配置完就可以正常录制了。

三、关联

不管是在接口测试或是性能测试,经常是下一个接口的传参会使用到上一个接口响应数据中的值,这个时候就需要把响应数据中的值给提取出来,这里介绍两种,正则表达式提取和Jason提取

1、正则表达式提取

在请求下面点击添加—后置处理器—正则表达式提取器

image.png

1)名称:可以随意设置

2)注释:可以随意设置

3)APPly to:作用范围(返回内容的断言范围)(不用动,用默认选择就可以)

Main sample and sub-samples:匹配范围包括当前父取样器并覆盖至子取样器

Main sample only:匹配范围是当前父取样器

Sub-samples only:仅匹配子取样器

JMeter Variable:支持对jmeter变量值进行匹配

4)Field to check:要检查的响应报文的范围(最常用的是第一个,基本不用动)

主体:响应报文的主体,最常用

Body(unescaped):主体,是替换了所有的html转义符的响应主体内容,注意html转义符处理时不考虑上下文,因此可能有不正确的转换,不太建议使用

Body as a Document:从不同类型的文件中提取文本,注意这个选项比较影响性能

Response Headers:响应信息头(如果你使用的是中文版的Jmeter,会看到这一项是信息头,这是中文翻译问题,应以英文为准)

Request Headers:请求信息头

URL:请求url

Response Code:响应状态码,比如200、404等

Response Message:响应信息

5)引用名称:其他地方引用时的变量名称,可自定义设置,引用方法:${引用名称}

6)正则表达式:数据提取器,()括号里为你要获取的的值。"token": 提取的边界内容。而括号里.+?为正则表达式,用来匹配所需要获取的数据

7)模板:可以设置多个模版进行匹配,11指第一个模版、22指第二个模版,依次类推,00指全文匹配

8)匹配数字:正则表达式匹配数据的所有结果可以看做一个数组,匹配数字即可看做是数组的第几个元素。-1表示全部,0随机,1第一个,2第二个,以此类推。通常就填0就可以

9)缺省值:匹配失败时的默认值。可以不写。若需用于后续逻辑判断,可简单写为 ERROR。

下面是常用的正则表达式操作符

image.png

2、JSON提取器

在请求下面点击添加—后置处理器—JSON提取器

image.png

1)名称:可以随意设置

2)注释:可以随意设置

3)APPly to:作用范围(返回内容的断言范围)(不用动,用默认选择就可以)

Main sample and sub-samples:匹配范围包括当前父取样器并覆盖至子取样器

Main sample only:匹配范围是当前父取样器

Sub-samples only:仅匹配子取样器

JMeter Variable:支持对jmeter变量值进行匹配

4)Names of created variables :接收值的变量名,自定义,多个变量用分号分隔

5)JSON Path expression: json path表达式,也是用分号分隔 ($表示根元素,然后一级级属性往下去找,直到找到所需要的元素)

6)Match No.(0 for Random):0表示随机;n取第几个匹配值;-1匹配所有。若只要获取到匹配的第一个值,则填写1

Compute concatenation var(suffix_ALL):如果找到许多结果,则插件将使用' , '分隔符将它们连接起来,并将其存储在名为 _ALL的var中

Default Values: 缺省值,匹配不到值的时候取该值,可写error。

3、Debug PostProcessor

上面两个是提取的方法,但是怎么看有没有提取到呢,需要用到调试后置处理程序

在线程处点击添加—后置处理器—Debug PostProcessor

设置基本不动,用默认填写的就可以

image.png

image.png

 请求外(out Debug PostProcessor): 所有请求对Debug PostProcessor都是上一个请求,可获取当前请求之前所有测试计划、用户定义的变量、参数化变量、 请求产生的变量数据。但无法获取请求内的前、后置处理器定义生成的变量;

请求内(inner Debug PostProcessor): 当前所属请求为其上一个请求,可获取当前线程之前所有测试计划、用户定义的变量、参数化变量、 请求产生的变量数据,以及当前 请求产生的变量数据。

用这个可以看提取的数据有没有提取到,方便查找问题

四、参数化

在线程处点击添加—配置元件—CSV Data Set Config

image.png

image.png

1)文件名:新建csv文件的路径,在4.0版本中可以点击右侧的浏览按钮选择文件,会自动带上文件的绝对路径;另外,当csv文件在jmeter的bin目录或脚本目录时,只需给出文件名即可(注意csv文件格式要求严格,不要有空格或是空行之类的)

2)文件编码:utf-8

3)变量名称:csv文件中各列的名字(有多列时,用英文逗号隔开列名);名字顺序要与内容对应,这个变量名称是在其他处被引用的,所以为必填项

4)忽略首行:如果csv文件第一行是名称,不是内容,这里选择‘True’,如果第一行是内容,不是名称,这里选择‘False’

5)分隔符:默认是英文逗号,其他的也可以,但是csv文件中得和此对应

6)是否允许带引号:默认选择‘False’

7)遇到文件结束符再次循环:默认选择‘True’

8)遇到文件结束符停止线程:默认选择‘False’

9)线程共享模式:根据情况选择,我使用的当前线程组

设置线程数,执行完csv文件中的数据,一般有多少行,可以设置有多少个线程

image.png

五、逻辑控制器

1、while控制器

image.png

While Controller会一直运行,直到条件(Condition)为false

Condition的可能值如下:

(1)为空(不输入任何值) -- 直到某次sample执行失败才会退出循环

(2)LAST -- 直到最后一个sample请求失败,才会退出循环

(3)其它 -- 条件值等同于字符串"false"(等同于输入框中输入false)时,退出循环

条件值的书写一般结合函数助手来使用,如下图

image.png

按图中的1-3操作,得到4,把4中显示的表达式复制出来放到condition处就行

2、if控制器

image.png

条件值的书写也是结合函数助手来使用,和上面一样

六、Beanshell

在压测过程中主要使用了beanshell后置处理程序

1、BeanShell是什么?

BeanShell是一种完全符合Java语法规范的脚本语言,并且又拥有自己的一些语法和方法;

BeanShell是一种松散类型的脚本语言;

BeanShell是用Java写成的,一个小型的、免费的、可以下载、嵌入式的Java源代码解释器,具有对象脚本的特性;

BeanShell可以执行标准Java语句和表达式,以及另外自身的一些脚本命令和语法。

2、BeanShell常用内置变量

(1) vars.get(“a”),从jmeter中获得变量a的值

(2) vars.put("b", "c"),数据从变量c存到jmeter变量b中

(3) log.info("message");打印日志

(4) System.out.println("Hello, World");打印到Jmeter的控制台

(5) prev.getResponseDataAsString():获取前面的sample响应信息

(6) prev.getResponseCode() :获取前面的sample响应code

(7) prev.setStopThread(true)

3、使用

image.png

image.png

七、断言

断言有很多中,经常使用的是响应断言,主要是判断请求有没有成功,一般和察看结果树结合使用,响应数 据符合设置的匹配规则,察看结果树中请求是绿色字样,反之,请求是红色的,方便查看哪个请求没有通过

image.png

八、线程数的设置

image.png

主要是设置线程数、Ramp-Up时间(秒)、循环次数

线程数:并发数

Ramp-Up时间(秒):决定多长时间启动所有线程。如果线程数设置10个,ramp-up period设置100秒,那么JMeter用100秒使所有10个线程启动并运行。每个线程会在上一个线程启动后10秒(100/10)启动。如果线程数设置10个,ramp-up period是0秒,那么就是同时发出10个请求。

循环次数:自定义设置或是勾选永远

比如设置了线程数为100,Ramp-Up时间为10秒,如果此时我们需要让每50个用户同时执行登入操作,我们此时就需要用到同步定时器:

模拟用户组的数量:为到集合点释放的线程数,这里就可以设置为50

超时时间如果设置为0,线程将会等待线程数达到了设置的值才释放。如果线程数不足集合点中设置的数,就会一直处于等待当中。

如果设置时间大于0,那么如果超过设置的最大等待时间后还没达到模拟用户组中设置的值,线程组将不再等待,释放已到达的线程。

image.png

九、报告

一般性能测试会用聚合报告收集数据

image.png

1、名称和注释:自定义

2、文件名:执行结果日志存放到这个文件里。配置按钮中可以设置日志内容显示什么

3、列表

Label:请求的名称,就是我们在进行测试的httprequest sampler的名称

样本(Samples):总共发给服务器的请求数量,如果模拟10个用户,每个用户循环10次,那么总的请求数为:10*10 =100次;

平均值(Average):默认情况下是单个Request的平均响应时间

中位数(Median): 50%用户的请求的响应时间,中位数

90%百分位(90%Line):90%的请求的响应时间

95%百分位(95%Line):95%的请求的响应时间

99%百分位(99%Line):99%的请求的响应时间

最小值(Min):最小的响应时间

最大值(Max):最大的响应时间

异常(Error%):错误率=错误的请求的数量/请求的总数

吞吐量(Throughput): 默认情况下表示每秒处理的请求数

接收(Received KB/sec):每秒从服务器端接收到的数据量;

发送(Sent KB/sec):每秒从客户端发送的请求的数量。

十、压测中遇到的问题

1、分配团队后,列表状态没有改变,还是未分配,是因为没有等列表的状态变为未分配再去分配

解决方案:在访问分配团队接口前加了一个等待时间,保证访问前,任务的状态变为了未分配或者是在分配团队接口处加一个循环控制器,设置循环2次

image.png

image.png

2、领取音频时,做的是每次领取前两个音频,但是在并发时,两个人同时领取时,有人会领不上

解决方案:每个人随机领取两个

image.png

3、用beanshell写脚本领取音频时,一直报错(2021-06-17 15:28:33,619 ERROR o.a.j.u.BeanShellInterpreter: Error invoking bsh method: eval In file: inline evaluation of: ``//每次取前两个 //String str =""; //for(i=1;i<3;i++){ // String audioid = vars.get("aud . . . '' Encountered "=" at line 21, column 22)

错误行:

image.png

 改为:List result = new ArrayList();

参考书籍:《全栈性能测试修炼宝典JMeter实战》

最后:

1、点赞,收藏。防止以后找不到,想看的时候,在自己主页就能找到了,很方便;

2、关注我。让我们成为长期关系,下一个内容会分享更多的硬核干货;

3、文章学习资源,均可以免费分享。需要的加我q3177181324。

不要只做收藏从未停止,行动从未开始的人,很多事情,做着做着就无师自通了。如果在做的过程中还能稍微加点思考,稍微看一些别人的经验和做法,成长会更快,效果也会更好!加油吧,测试人!路就在脚下,成功就在明天!

我是阿星君,用心输出有价值的内容,你若盛开,清风自来!

创作不易,不想被白嫖,各位的「点赞」就是阿星君创作的最大动力,我们下篇文章见!
 

  • 13
    点赞
  • 104
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值