本文主要是介绍JMeter入门使用,手把手教(接口测试和压测),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
目录
一.JMeter介绍
二.使用场景
三.开始使用
3.1业务接口
3.2Post请求
3.3统一前置接口
3.4统一前置接口+单个业务接口
3.5批量接口(无需登录)
一.JMeter介绍
以下一段话摘抄JMeter中文网,毕竟我说的可能会存在不恰当的地方:
ApacheJMeter是Apache组织开发的基于Java的压力测试工具。用于对软件做压力测试,它最初被设计用于Web应用测试,但后来扩展到其他测试领域。它可以用于测试静态和动态资源,例如静态文件、Java小服务程序、CGI脚本、Java对象、数据库、FTP服务器,等等。JMeter可以用于对服务器、网络或对象模拟巨大的负载,来自不同压力类别下测试它们的强度和分析整体性能。另外,JMeter能够对应用程序做功能/回归测试,通过创建带有断言的脚本来验证你的程序返回了你期望的结果。为了最大限度的灵活性,JMeter允许使用正则表达式创建断言。
Apachejmeter可以用于对静态的和动态的资源(文件,Servlet,Perl脚本,java对象,数据库和查询,FTP服务器等等)的性能进行测试。它可以用于对服务器、网络或对象模拟繁重的负载来测试它们的强度或分析不同压力类型下的整体性能。你可以使用它做性能的图形分析或在大并发负载测试你的服务器/脚本/对象。
二.使用场景
JMeter功能比较强大,使用场景很多,单独/批量接口测试、前后关联接口、接口压测等。公司的测试人员一般能比较熟练使用JMeter,开发人员也可以使用JMeter帮助我们开发。
三.开始使用
3.1业务接口
首先你要有jre环境,安装过程自行百度,安装后可以不配置环境变量。首先打开JMeter(我的是5.3版本):
然后是这个界面:
一个空界面,当你创建了测试计划后可以保存为.jmx的文件打开:
切换中文:
工具栏,其实也比较通俗易懂:
先来试一个接口,文件-新建,生成一个测试计划:
右键测试计划-添加-线程(用户):
这时候你会看到有3个选项,线程组是通用的,一般用这个,setUp线程组是前置线程组,也就是线程组之前执行,tearDown线程组是后置线程组,也就是线程组执行完了执行它。我们新建一个线程组,下面的界面也比较通俗易懂:
amp-up时间解释:
【1】决定多长时间启动所有线程。如果使用10个线程,ramp-upperiod是100秒,那么JMeter用100秒使所有10个线程启动并运行。每个线程会在上一个线程启动后10秒(100/10)启动。Ramp-up需要要充足长以避免在启动测试时有一个太大的工作负载,并且要充足小以至于最后一个线程在第一个完成前启动。一般设置ramp-up=线程数启动,并上下调整到所需的。
【2】用于告知JMeter要在多长时间内建立全部的线程。默认值是0。如果未指定ramp-upperiod,也就是说ramp-upperiod为零,JMeter将立即建立所有线程。假设ramp-upperiod设置成T秒,全部线程数设置成N个,JMeter将每隔T/N秒建立一个线程。
【3】Ramp-UpPeriod(in-seconds)代表隔多长时间执行,0代表同时并发。
接下来添加Http请求,一个线程组可以有多个取样器(以下简称任务):
这时候你就可以感受到JMeter的强大。选择HTTP请求后:
填一下服务器地址和参数信息,协议可以不用填,这时候我们用的JMeter功能和Postman、Swagger请求接口一样,不过JMeter可以设置更多东西,随便用一个Get接口试下,不需要额外的配置:
添加一下察看结果树,用于查看结果:
请求一下,弹出保存框就保存下,可以选中多个节点点击启动:
选中当前的HTTP请求节点启动,是启动当前的HTTP请求,如果是setUp线程组下的任务,会执行线程组下的任务。选中线程组节点启动,是启动这个线程组下的所有任务,包括HTTP请求,选中测试计划节点启动,是启动这个测试计划下的所有任务,也可以就选择察看结果树节点:
保存一下测试计划:
请求完成后,点击查看结果树:
绿色表示成功,再点下响应数据看下也能看到返回说明请求成功:
3.2Post请求
上面演示的是Get请求,现在演示一下Post请求,一般我们Post请求的content-type都是application/json;charset=UTF-8,这时候需要添加一下HTTP信息头管理器:
添加content-type:
设置好入参,json格式:
一样地添加查看结果树后请求一下:
请求成功,不过后台报错,这是自己要处理的。
3.3统一前置接口
一般我们的业务,在新增和编辑的时候基本都要校验用户是否登录,如果没有登录就拿不到用户的信息,所以我们可以设置setUp线程组作为用户登录或者是你需要的前置接口,我这里以登录为例,登录成功会返回一个token。
新建setUp线程组,看起来和一般线程组也没什么不一样:
设置前置接口参数信息:
测试一下:
如果你的测试计划比较复杂,不像某个线程组干扰另外的线程组的时候,可以把它禁用下,被禁用是灰色的:
3.4统一前置接口+单个业务接口
设置好统一前置登录后,可以再添加业务接口了,这时候就是怎么拿到登录的token,因为要设置到业务请求的Request Header中,此时要用到前置和后置处理器。选中登录请求,添加后置处理器-JSON提取器:
设置变量名token,设置请求结果中提取的方式,$.表示从返回数据的根节点取,.表示向下取值,通过属性名获取,因为我们登录接口返回形如:
{
"access_token": "String",
"token_type": "String",
"refresh_token": "String",
"expires_in": 43199,
"scope": "ddd"
}
所以用$..access_token。Match No忘记了,可以自己查下,这里填1。
再添加前置处理器-BeanShellProcessor:
参数那里写${token},类似FreeMarker的语法,脚本那里:
String token=bsh.args[0];获取token
${__setProperty(accessToken,${token},)};设置全局属性为accessToken
对登录请求设置完后,再设置下业务接口的HTTP信息头管理器,Authorization的值为${__P(accessToken,)},P表示全局属性P()表示从全局属性中获取一个属性,有点类似函数吧,${}表示获取全局属性中的token的值:
可以在登录请求那里添加一个调试后置处理程序用于测试是否取到了token:
默认设置:
添加了调试后置处理程序将会在的响应数据中看到打印的token,请求后可以看下察看结果树的子节点:
业务接口:
还可以对请求设置各种断言,断言在Java中也有,作用就是预判结果走向,如果不符合预期说明错误。比如响应结果断言,Assert JSON Path exists表示返回的JSON中有什么属性,Expected Value表返回值,可以勾选正则表达式选项,表示正则匹配:
请求错误,断言失败,显示红色:
并发运行,设置线程组的线程属性:
3.5批量接口(无需登录)
正如上面所说,一个线程组可以有多个任务,也就是可以同时跑多个线程:
这篇关于JMeter入门使用,手把手教(接口测试和压测)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!