Jmeter简介

jmeter是apache公司基于java开发的一款开源压力测试工具,体积小,功能全,使用方便,是一个比较轻量级的测试工具,使用起来非常简单。因为jmeter是java开发的,所以运行的时候必须先要安装jdk才可以。jmeter是免安装的,拿到安装包之后直接解压就可以使用,同时它在linux/windows/macos上都可以使用。jmeter可以做接口测试和压力测试。其中接口测试的简单操作

下载

jmeter官网:https://jmeter.apache.org/

一、并发测试流程

示例:post考试预约接口并发测试

二、JMeter配置

(一)新建线程组

测试计划右键——>添加——>线程(用户)——>线程组

在这里插入图片描述

(二)添加HTTP请求-登录接口

线程组右键——>添加——>取样器——>HTTP请求

在这里插入图片描述

(三)添加HTTP信息头管理器

线程组右键——>添加——>配置元件——>HTTP信息头管理器

在这里插入图片描述

(四)添加HTTP请求默认值

线程组右键——>添加——>配置元件——>HTTP请求默认值

在这里插入图片描述

(五)配置HTTP请求默认值

协议:http/https

服务器名称或者ip:就是测试服务器的地址

端口:就是服务器的端口

内容编码:就是编码格式

如果测试的接口都是这个服务器,那这里配置http请求默认值会简化一些操作,如果都不一样,就不需要这个http请求默认值

在这里插入图片描述

(六)配置HTTP请求信息头管理器

我这里只需要一个参数,如果需要参数化的变量就用${变量名}的形式代替

在这里插入图片描述

(七)配置HTTP请求-登录接口

黄色区域:咱们在http请求默认值已经写了,这里就可以不用写

红色部分:就是调用接口的请求方式和路径还有编码格式

这里是一个登录接口,需要取值账号密码,验证码我把校验取消了,用的消息体传参,也可以用参数传参

参数化的变量就用${变量名}的形式代替

在这里插入图片描述

1.添加响应断言

登录-HTTP请求右键——>添加——>断言——>响应断言

在这里插入图片描述

2.配置响应断言

响应断言:简单理解就是判断响应是否成功

2.1测试字段

这个模块,指的是我们使用哪一块的返回信息做断言。

【响应文本】指返回的文本信息。

【响应代码】指Http响应码,如200、500等。

【响应信息】指的是http的response message。

【响应头】指http响应头信息。

注意:响应文本不等于响应信息。

如下图所示,响应数据是有值的,但是响应信息显示为空,此时如果【测试字段】选择【响应信息】,断言会失败。

在这里插入图片描述

在这里插入图片描述

2.2模式匹配规则

分为【包括】【匹配】【相等】【字符串】

【包括】与【字符串】:断言的内容,比如响应信息为{"status":"0","message":"success"},选择【包括】或者【字符串】时,断言内容为【“status”:“0”】,则可以通过。二者的区别是,【包括】支持正则,【字符串】不支持正则。

【匹配】与【相等】:响应信息必须完全等于断言内容才可以通过,否则均为失败。其中【相等】是通过正则表达式匹配。(内容必须完全匹配


【否】:挂钩之后,断言结果true为false,false为true,很奇妙的旅程。

【或者】:当有多个断言时,只要有一个断言成功,那么最终结果就是成功的。

2.3测试模式

断言的内容。如果有多个,按照顺序执行,没有选择【或者】的情况下,所有的断言通过之后,取样器结果才是成功的。

2.4自定义失败信息

顾名思义,当失败是,可以定义个性化信息。

响应文本要自己看接口返回的信息,才能决定

在这里插入图片描述

在这里插入图片描述

3.添加并配置CSV 数据文件设置(登录需要的账号密码)

登录-HTTP请求右键——>添加——>配置元件——>CVS Date Set Config

在这里插入图片描述

文件名:csv文件存储全路径
● 文件编码:默认的编码是UTF-8。
● 变量名称:和csv文件第一行的字段相对应,名称自定义,多个字段用逗号分隔
● 忽略首行:通常情况下csv的文件首行标注数据的含义,不是具体的数据,所以要设置忽略(设为true),前提是设置了变量名称才生效。
● 分割符:默认英文逗号分隔。
● 是否允许带引号:如果csv文件中有json数据,或者带有引号的数据,建议设为True
● 遇到文件结束符再次循环:如果文件执行结束了想重复执行数据,可以设置为True,多次循环。
● 遇到文件结束符停止线程:配置文件读取完毕之后,就结束当前线程。
● 线程共享模式:标示这个CSV数据文件作用范围是:所以线程/当前线程组/当前线程/编辑(自定义),默认方式:所有线程。

3.1配置CSV 数据文件设置

在这里插入图片描述

4.添加JSON提取器(用来提取登录后的token)

登录-HTTP请求右键——>添加——>后置处理器——>JSON提取器

在这里插入图片描述

4.1添加查看结果树

线程组右键——>添加——>监听器——>查看结果树

在这里插入图片描述

测试登录成功需要取得值的层级关系

在这里插入图片描述

测试取值

在这里插入图片描述

5.配置JSON提取器

5.1JSON提取器详解
  • Apply to,该选项是用来控制正则表达式提取器的作用对象,可选对象有三种:

  • main sample,主请求

  • sub sample,子请求

  • JMeter Variable,JMeter的变量

  • name of variables,变量名称,由用户自定义,用于存储数据

  • 变量名称可以写多个,使用逗号进行分隔

  • Json Path expressions,JsonPath表达式,即用来提取数据的

  • 该处可以填写多个JsonPath表达式,要求数量和变量名称的数量保持一致,每个表达式提取到的值将会按照位置传给变量

  • 匹配数字,该处可以填写的数字有3种:

  • 0,是默认值,表示随机,即将多次找到的结果随机抽取一个赋值给变量

  • 正整数N,表示将第N次找到的结果赋值给变量

  • 负数,一般填写-1,表示将所有找到的值以类似数组的方式存入变量数组,效果为varName_1=value1, varName_2=value2,并且同时会自动生成一个变量varName_matchNr=N用来存储值得个数

  • default values,默认值,如果变量名称只有一个,则该处可以省略,如果变量名称有多个,则该处必须有值。值的数量必须要和变量名称的数量保持一致,使用逗号分隔,一般建议填写1,1,1,…

在这里插入图片描述

在这里插入图片描述

5.2JsonPath语法详解
  • 基本操作符

    • $ 根节点

    • @ 当前节点,一般来说用于子表达式或者过滤表达式

    • . or [] 用于连接父子节点

    • . Dot-notated方式,获取子节点

    • [‘’(, ‘’)] Bracket-notated,获取一个或者多个子节点

    • … 深层扫描,用于获取当前节点下的所有指定对象,表示从当前节点开始搜索所有的子节点

    • * 通配符

    • [(, )] 数组索引,如果有多个用逗号分隔

    • [start:end] 数组切片操作

    • [?()] 过滤表达式

. k e y . k e y . k e y 要求 k e y 的值都是 j s o n 对象,才可以继续使用点号连接 [ ] 是用来筛选子节点,构成一个新的 j s o n 对象。 .key.key.key要求key的值都是json对象,才可以继续使用点号连接 []是用来筛选子节点,构成一个新的json对象。 .key.key.key要求key的值都是json对象,才可以继续使用点号连接[]是用来筛选子节点,构成一个新的json对象。[“data”]等价于 . d a t a ,它最主要的作用在于 .data,它最主要的作用在于 .data,它最主要的作用在于[“data”,“name”],这个表达式返回2个同级节点构成的新json对象。

JSON提取器相关文章:https://blog.csdn.net/u010378984/article/details/128547767

JSON提取器操作文章:https://www.cnblogs.com/panpanda/p/15855149.html

6.添加BeanShell PostProcessor(局部变量变为全局变量)

作用:将局部变量变成全局变量–BeanShell 后置处理程序

登录-HTTP请求右键——>添加——>后置处理器——>BeanShell PostProcessor

在这里插入图片描述

6.1配置BeanShell 后置处理程序
${__setProperty(token,${token})};// 2个_ 将局部变量token转换为全局变量token

在这里插入图片描述

(八)添加并配置HTTP请求-获取考试信息接口

线程组右键——>添加——>取样器——>HTTP请求

红色区域:接口信息

绿色区域:获取token

在这里插入图片描述

添加JSON提取器(用来提取登录后的token)

登录-HTTP请求右键——>添加——>后置处理器——>JSON提取器

获取id,通过id查看考试信息

在这里插入图片描述

(九)添加并配置HTTP请求-获取场次信息接口

线程组右键——>添加——>取样器——>HTTP请求

红色区域:接口信息

绿色区域:获取考试id和token,通过考试id来查询场次信息

在这里插入图片描述

添加JSON提取器(用来提取登录后的token)

登录-HTTP请求右键——>添加——>后置处理器——>JSON提取器

在这里插入图片描述

(十)添加并配置HTTP请求-获取考试预约接口

线程组右键——>添加——>取样器——>HTTP请求

红色区域:接口信息

绿色区域:传递的参数信息

在这里插入图片描述

1.添加并配置HTTP信息头管理器

考试预约-HTTP请求右键——>添加——>配置元件——>HTTP信息头管理器

在这里插入图片描述

2.添加同步定时器Synchronizing Timer

考试预约-HTTP请求右键——>添加——>定时器——>Synchronizing Timer

在这里插入图片描述

3.配置同步定时器

模拟用户组的数量:每次释放的线程数量。如果设置为0,等同于设置为线程租中的线程数量。如果设置为10,即集合10个线程等待,同时发送请求。设置此数量不能超过线程组中的线程数量

超时时间以毫秒为单位:如果设置为0,Timer将会等待线程数达到了"模拟用户组的数量"中设置的值才释放。如果一直没有达到,则会一直等待,除非手动关闭执行。如果大于0,那么如果超过“超时时间以毫秒为单位”中设置的最大等待时间(毫秒为单位)后还没达到"模拟用户组的数量"中设置的值,Timer将不再等待,释放已到达的线程。默认为0

模拟用户组的数量不能超过线程组的数量

在这里插入图片描述

(十一)添加聚合报告

线程组右键——>添加——>监听器——>聚合报告

线程组右键——>添加——>监听器——>用表格查看结果(可以也添加上)

在这里插入图片描述

JMeter聚合报告参数解释

Label:每个JMeter的element的Name值,例如HTTP Request的Name;
样本:发出请求数量;模拟20个用户,循环100次,所以显示了2000;
平均值:平均响应时间(单位:ms);默认是单个Request的平均响应时间,当使用了Transaction Controller时,也可以以Transaction为单位显示平均响应时间;
中位数:50%的用户响应时间小于这个值;
95%百分位:95%的用户响应时间小于这个值;
99%百分位:99%的用户响应时间小于这个值;
最小值:用户响应时间最小值;
最大值:用户响应时间最大值;
异常%:测试出现的错误请求数量百分比;请求的错误率 = 错误请求的数量/请求的总数;若出现错误就要看服务端的日志查找定位原因;
吞吐量:Throughput简称TPS,吞吐量,默认情况下表示每秒处理的请求数,也就是指服务器处理能力,TPS越高说明服务器处理能力越好;
KB/sec:每秒从服务器端接收到的数据量;

在这里插入图片描述

(十二)配置线程组

线程数(即并发数):一个用户占一个线程,200个线程就是模拟200个用户;
Ramp-Up 时间(秒):设置线程需要多长时间全部启动;如果线程数为200,准备时长为10,那么需要1秒钟启动20个线程;也就是每秒钟启动20个线程;
循环次数:一次场景下来,请求的数量=线程数 * 循环次数;如果线程数为200,循环次数为10 ,那么每个线程发送10次请求;总请求数为200*10=2000 ;如果勾选了“永远”,那么所有线程会一直发送请求,直到选择停止运行脚本;

在这里插入图片描述

测试完成导出报告

第一步:执行程序之前:新建一个文件夹,再建一个后缀为.jtl的文件。在聚合报告页面,选择刚建的文件夹进行保存

在这里插入图片描述

第二步:选择工具-Generate HTML report

在这里插入图片描述

第三步:按下图填写

Results file(csv or jtl):刚才新建的jtl文件

user.properties file:jmeter安装目录下的bin文件里面的jmeter.properties

Output directory:选择一个新建的空的文件夹

在这里插入图片描述

成功截图

在这里插入图片描述

Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐