jmeter开源项目
jmeter最早是用于http/http(web端)的接口测试的工具,拓展到了其他领域的(不同的协议)测试。
postman/requests:还是只支持http/https协议的测试
postman相对接口测试,更加专业
requests在接口自动化中更加灵活
jmeter除了接口功能测试之外,还可以实现接口压力测试。
1个人来发接口请求,就是接口的功能测试
n个人来发接口请求,就是接口的压力测试
jmeter也提供了GUI界面,来设计接口请求、运行接口测试、压力测试,还可以输出可视化报告。
java开发的客户端软件,界面其实比postman要更“纯朴”一些。
jmeter工具,句有更好的跨平台的特性(可以支持windows、macos、linux系统的运行)
Jmeter支持的接口测试协议
http、https协议 ftp协议 jdbc:java数据库链接协议
jmeter安装与配置
下载:Index of /apache/jmeter/binaries(也可使用提供的安装包)
检查自己的电脑jdk环境:Apache JMeter 5.4.3 requires Java 8+
解压下载的zip压缩文件到D盘根目录下。
环境配置:此电脑-->属性->高级设置-->环境变量配置-->path(system环境)
环境变量配置,到底是配置什么-path变量:
java
python
mysql
为什么要配置这个变量:
cmd-->java/python/jmeter等,报错误,xxx不是内部命令
就是告诉windows系统你的这个命令装在什么位置,让它给你启动起来。
验证jemter是否可用:cmd-->jmeter
jmeter配置
jmeter的bin目录(核心配置目录)的文件:
jmeter.bat: 用于windows下启动jmeter的文件。bat(Windows batch command)
jmeter:用于linux/macos(基于unix)系统下启动jmeter的文件。
jmeter-server.bat:windows下启动肉鸡slave(master是主机,主机要控制肉鸡)的文件。
jmeter-server:liunx/macos下启动肉鸡的文件。
肉鸡是执行主机命令的载体,帮助我们完成性能测试的特点
jmeter-properties:核心配置文件,对jmeter工具的参数设置位置
jmeter支持的语言设置:显示添加language=zh_CN
配置主机和肉鸡的参数:
二、jmeter的常见组件
postman做接口测试就类似于使用集装箱来拼装房屋。
jmeter做接口测试就类似用砖瓦来建房(包括打地基)。
1、常见的组件(完成脚本必须的一些组件)
测试计划:所有的其他的组件都是建立在测试计划上的,是jmeter脚本的开始的组件,也是其他组件存放的容器。
线程组:指的就是人。多少个人?这些人能干多长时间的工作等?代表一定量的并发用户,用来模拟多人的并发请求。
采样器:实际请求的内容(打包的协议报文),包括在线程组内。http采样器、ftp采样器、tcp采样器等。
监听器:查看每个人工作的情况,查看每个采样器运行的状态和结果,比如查看结果树、聚合报告、图形结果显示。
断言:监听器检查的过程合不合格?就是判断请求的结果是否正确的?响应正文断言、json断言。
逻辑控制器:实现条件跳转(if)和循环的(for)
配置元件:提供了配置相关的组件,比如参数化,jdbc配置等
定时器:等待时间的,随机时间定时器,固定定时器,同步点定时器(集合点)。
总结:灵活地拼装上面的组件,形成jmeter的测试脚本。
测试计划,完成整个接口的载体
计划名称:当前计划的名称
注释:解释说明
用户定义变量:全局可用的
其他参数:
独立运行线程组设置的效果:
4、线程组(是一组线程(人))
添加线程组:(完成对线程组数,执行间隔,循环遍数的设定)
线程数:该线程组内有几个人就填几,如果填2,就表示2个线程(人)生成来运行脚本(采样器)。
ramp-up time:启动时间,线程数启动所需要的时间
循环次数:线程运行采样器循环几次(迭代几次)
永远:如果勾选了,就不停止地发送采样器请求。
假设:线程数为10,启动时间为2s,问启动线程的频率为?即5个线程/秒。
假设:线程数为10,循环次数为2(有一个采样器),问总共运行多少次?20
5、采样器(接口实现的地方)
添加采样器,采样器是放在线程组内:
设置参数:
案例中users接口:
案例中的info接口:
6、监听器(记录测试执行的过程和结果)(相当于查看器)
查看结果树的添加:
保存当前计划,并执行当前的脚本:
查看执行结果:
断言(响应断言、json断言)
1、响应断言的添加:
响应断言设置:
匹配模式:
包括:正文中包括子串即为通过,支持正则匹配
.表示任意一个字符
.*表示任意0个或多个字符
.+表示任意1个或多个字符
?表示贪婪匹配
\d表示任意数字
\w表示任意字符
[0-9]表示任意数字
[a-zA-Z]表示任意字母
匹配:响应正文完全相等(匹配),支持正则表达式
equals:响应正文完全相等,不支持正则表达式的
\["tom","marry","jack"\] fail
["tom","marry","jack"] pass
["tom","marry" fail
substring:小串,大串套小串的用法,文本框不支持正则
["tom","marry","jack"] pass
["tom","marry" pass
.* fail
否:原先匹配结果为fass,则勾选否之后就是fail;否则反过来
与:只要多个断言条件中有一个失败,则整个断言失败
或:只要多个断言条件中有一个通过,则整个断言通过
json断言
json path tester:调试获取json数据结构中path路径。
["jack","123","4"]:$[0]、$[1]、$[2]
{"status":-1}: $.status
[{"status":-1},{"status":0}] : $[1].status
添加json断言组件:
设置json断言的参数
参数化脚本数据
就是用外部的数据替换接口中常量的过程,使用的格式:${变量名}
、测试计划中用户定义变量
该变量的使用范围(作用域)是全局的,在该计划的所有的组件中都可以使用该变量。
创建变量和值:
在登录接口中使用用户定义的变量,${ip},${port}
运行、查看结果:
csv文件数据参数化
数据存储在外部文件中,通过csv参数化组件读取数据保存在某个变量中,然后使用变量进行参数化
在外部csv文件中设计数据:(有6组数据)
给线程组添加一个csv数据文件设置组件:
设置csv数据文件设置组件:
配置csv参数化:
执行查看结果树:
执行1:设置线程组的线程数为6个,循环1次,结果总共运行6次,每次取csv中一行数据(6个人每人执行一次)
执行2:设置线程组的线程数为1个,循环6次,结果运行6次,每次取csv中一行数据(1个人循环执行了6次)
执行3:设置线程组的线程数为1个,循环8次,数据不足,根据csv中的设置要循环取值。
执行4:设置线程组的线程数为8个,循环1次,数据不足,根据csv中的设置要终止多余线程。
函数助手的功能
jmeter中提供了一些通用的方法,是可以生成参数化的数据的,比如随机数据、随机日期、生成变量读取csv文件中数据等。
启动函数助手:
函数助手提供了大量的方法,我们需要从下拉框中选择要用的方法,填上必要参数,点击生成,即可生成一个变量,这个变量就可以按照其功能进行取值了。
__csvReader函数设置:
在登录接口中做如下参数化设置:
断言设置如下:
执行1:设置线程组的线程数为6个,循环1次,结果总共运行6次,每次取csv中一行数据(6个人每人执行一次)
执行2:设置线程组的线程数为1个,循环6次,结果运行6次,每次取csv中的第一行数据(1个人循环执行第一行数据6次)
执行3:设置线程组的线程数为8个,循环1次,数据不足,循环使用csv文件中的数据。
其他的函数助手的用法:
1、线程编号:${__threadNum}
2、随机数变量:${__Random(10,20,)}
3、随机字符串变量:${__RandomString(5,abcdefghijklmnopq,)}
4、md5加密算法变量:${__MD5(123456,)}
使用jmeter实现HTTP接口测试
主要还是实现get请求和post请求。
1、百度翻译接口(get)
响应正文中的字符以unicode编码显示,如果想转为中文,可以添加beanshell后置处理器
不添加后置处理器也可以直接进行json断言。
2、评论接口(get、referer防盗链)
先创建评论接口的参数:
在添加头管理器:
头管理器中添加referer字段:
添加json断言,运行查看结果树:
3、电商注册接口(post请求)x-www-form-urlencoded
设计电商注册接口采样器的参数:
添加csv配置文件,csv文件中有3组数据,并设置:
添加断言,响应断言:
添加头部字段(不加也不影响):
设置线程数为4,按照要求,最后一个线程要循环使用第一行数据。
4、信互登录接口(post请求)
这个就是一个普通的post接口,和上面的没太多区别。
5、信互图片上传接口(添加cookies管理器)
1、单独实现图片上传接口(不用管登录接口),只不过要在http头管理器中添加一个登录成功的cookie值。
在该接口下添加头管理器,并设置一个cookie
2、先登录再传图片,这时候可以http的cookie管理器,这两个接口就通过管理器建立个关系。
2、先登录再传图片,这时候可以http的cookie管理器,这两个接口就通过管理器建立个关系。
这种方式,就不需要专门添加cookie了,登录请求会自动保存cookie,后面的图片上传接口就从cookie管理器中自动获取最新的cookie值了。
电商后台的相关接口(正则表达式采样)
统一添加一个http请求默认值和cookie管理器。
1、电商后台的首页接口(提供给我们两个登录的必备参数)-get
需要给该请求添加一个后置处理器中的正则表达式提取器:
如果想查看上面info变量的变化请求,可以在线程组中添加一个debug采样器。
2、登录请求
3、商品删除接口-get
7.jmeter中实现验证码接口(token提取,json提取器)
现在要提取json结构响应正文中的imgAuthCodeToken和code字段。
添加json提取器:是放在采样器下的。
配置json提取器,并添加debug采样器言验证数据的正确性。
运行后查看debug采样器的结果,如下即可。
2、云学习登录接口
创建登录接口的请求:
然后添加一个信息头管理器,然后添加上Content-Type:application/json
运行查看结果:
3、云学习首页接口(登录后的首页)
必须是登录成功之后才能正常显示,拿到登录后的token值,后续的接口在信息头管理器中要带上这个token。
首页接口实现:
在登录接口中通过json提取器提取登录的token值
在首页接口中添加头管理器,然后设置Authorization字段和${token}
运行查看结果: