目录
1.概述
2.测试计划、线程组、取样器
3.调试运行
4.请求默认值
5.流量录制
6.模拟时间间隔
7.压力测试
8.报表
一款工具,功能往往是很多的,细枝末节的地方也很多,实际的测试工作中,绝大多数场景会用到的也就是一些核心功能,根本不需要我们事无巨细的去掌握工具的所有功能。所以本文将用带价最小的方式讲解如何快速上手使用jmeter来进行压测。
JMeter,一款接口测试工具,是Java程序,需要JDK环境,建议使用JDK8或者JDK11。
下载地址:
https://jmeter.apache.org/download_jmeter.cgi
启动:
安装路径/bin/jmeter.bat(.sh)
test plan:
测试计划,jmeter中的一个测试计划对应一个测试场景。
thread group:
线程组,jmeter中的一个线程组对应一个行为。一个行为可以理解为一个场景,可以是由多个接口组成的,比如下单,里面就可以包含扣减库存、生成订单等多个接口。
取样器:
可以理解为一次请求,jmeter支持多种类型的取样器,当然我们常用的是http的取样器。
三者的关系:
整个jmeter的使用其实就是建立一个测试计划,然后给这个测试计划下面配上各种需要的东西,比如线程组、监听器等等,
一个线程组包含多个取样器,一个取样器就是一个请求。线程组里面的每一条线程都会完整的从上到下顺序执行一遍该组下的取样器。
建立测试计划,添加线程组:
线程组添加取样器,对http接口的请求就添加http取样器:
一整套测试计划建好后,支持导出为文件,导出为文件后可以脱离开界面通过指令来运行整个测试计划:
测试计划直接执行是不会有任何结果展示的,需要添加监听器(listener)来进行调试,查看中间结果。
一般使用view results tree,查看结果树的监听器,可以查看到运行结果。
一些核心参数的意思:
Connect Time:建立TCP连接的时间。
lantency:发出请求前到接收到第一个响应的时间。
loadtime:从发出请求前到接收完所有响应的时间。
Size in bytes:整个response报文的大小=header+body。
Headers size in bytes:response的header大小。
Body size in bytes:response的body大小。
请求默认值,即请求的缺省配置默认值。配置后一个测试计划中的所有请求都的配置缺省时都采用请求默认值中的配置。
测试网页页面的时候http请求里面除了API,还杂糅着很多静态资源(html/js/css)的请求,到底请求这个页面发出了多少url?可以使用jmeter的流量录制功能,可以录制出某次访问里的所有http请求。这个功能在实际压测里用的比较少,这里只是提一句有这个功能,不做展开,具体要用的时候可以搜一下,怎么使用。
使用定时器可以模拟时间间隔,定时器的作用范围是所在结点下的所有同级结点及其子结点。
定时器有多种,有些定时器不是固定时间间隔的,比如时间间隔满足高斯变化的高斯定时器等,具体的种类可以搜一下。
运行指令:
真正的压力测试不使用图形界面来测试,因为图形界面作为中间层也会有性能损耗,而是直接使用命令行模式。
{base dir}\bin\jmeter -n -t XXX.jmx -l log.jtl
XXX.jmx是使用图形界面配置好后导出的jmx文件。
压力测试一般会给出测试用例,对性能需求进行描述,如下就是个性能测试用例:
用户无需登录,先访问首页,再访问单课页,最后访问新闻页面。
访问页面间隔10秒。
用户数1200个,在10分钟依次上线。
照着测试用例配置jmeter就行,上面的需求描述转成jmeter的配置就是:
创建一个1200条线程的线程组,10分钟内执行完;
线程组下有三个http取样器,按照顺序为请求首页、请求单课页、请求新闻页;
创建一个定时器,每10秒取样一次。
jmeter可以生成HTML报表
jmeter -n -t [Jmx脚本位置] -l [中间文件result.jtl位置] -e -o [报表指定文件夹]
报表文件夹内会产生HTML文件,其中会详细包含对所有url的请求的详细统计,成功、失败、耗时等信息。
以下是一个示例: