Jmeter工作原理:
jmeter通过线程组来驱动多个线程运行测试脚本对被被测试服务器发起负载。
向服务器提交请求,从服务器获取请求返回的结果。也可以用来做压力测试或者接口测试。
jmeter安装、环境变量配置
下载jmeter
Apache JMeter - Download Apache JMeter
安装并配置jdk1.8以上环境,此处忽略jdk的安装与环境配置。
Jmeter 目录介绍
backups:脚本备份目录,格式为jmx
bin目录:存放jmeter的启动脚本,配置文件,模块文件
jmeter.bat :启动jmeter
jmeter properties:核心配置文件
docs:离线帮助文件
extras:存放与第三方的集成构建文件,集成Ant、Jenkins
lib目录:存放jar包
licenses:许可证文件
Jmeter执行接口测试流程
1、拿到API接口文档(或者使用Fiddler抓包)、熟悉接口业务、接口地址、鉴权方式、入参、出参、错误码
2、编写接口测试用例
测试思路:
正例:输入正常参数,查看接口成功返回
反例:
参数:空,参数类型错误,长度错误、错误码覆盖等等....
3、使用接口工具执行
4、Jmeter+Ant+Jenkins实现持续集成并输出接口自动化测试报告,通过电子邮件发送
Jmeter常用组件简介
1.线程组:模拟用户
2.配置元件:进行测试环境和测试数据的初始化,类似与自动化脚本中的参数化
3.前置处理器:对要发送的请求做预处理,类似自动化脚本参数化
4.取样器:往服务器发送请求
5.后置处理器:对收到的服务器请求进行数据提取
6.断言:将收到的响应结果和预期结果做比对
7.监听器:查看脚本运行的结果和日志
8.定时器:等待一段时间
9.测试片段:封装基本功能,不能单独执行
测试计划(Test Plan)
[图片上传中...(image.png-9bf3dc-1659925683804-0)]
线程组(Thread Group)
配置元件(Configuration)
进行测试环境或者测试数据的初始化
逻辑控制器(Logic Controller)
如果(if)控制器
判断参数结果==设定的值,则发起请求
添加:线程组--逻辑控制器--if控制器
配置:
使用js语法:"${name}"=="baidu"
使用jmeter函数方式:
操作步骤:
1.添加线程组
2.用户定义变量
3.添加if控制器,判断name是否等于baidu
4.添加http请求,用来访问百度
5.添加if控制器,判断name是否等于itcast
6.添加http请求,用来访问传智
7.添加查看结果树
循环控制器
控制循环次数,配置次数
操作流程:
需求:循环访问100次
步骤:
1.添加线程组
2.添加循环控制器
3.添加http请求
4.添加查看结果树
循环控制器中的循环次数配置m,线程组中的循环次数配置n:
关系:如果同时配置,循环控制器下http的实际执行次数是m*n
区别:两个循环次数的作用域不同
foreach控制器
与用户定义的变量或者正则表达式提取器配合使用,循环读取返回变量中的值,执行一次或者多次
(1)与用户定义变量配合:
添加:线程组--逻辑控制器--ForEach控制器
配置:
用户定义变量:变量名(固定前缀+连续数字)
ForEach控制器
变量前缀:用户定义的变量配置中的固定前缀
起始数字:连续数字的最小值-1
结束数字:连续数字的最大值
输出变量名称:依次读取变量值后存储到参数中,供http引用
http请求:引用输出的变量名称
(2)与正则表达式配合使用
a、先通过正则表达式提取器,提取出请求中所有满足条件的数据
b、添加ForEach控制器,并配置提取所有满足条件的数据,并保存为变量
c、在其子节点下,添加http请求并引用变量,即可循环读取正则
定时器
同步定时器
当前需要进行大量用户的并发测试时,为了让用户能真正的同时执行,添加同步定时器,用于阻塞线程,直到线程达到预先配置的值,才可以执行取样器操作。
配置:
并发数:同时达到多少用户才开始发送请求
超时时间:
必须配置:否则当虚拟用户数无法被并发数整除时,会一致挂起
配置不能太短:必须比并发加载时间要长。否则无法达到并发数的要求,数据就会被释放掉
常数吞吐量定时器
常数吞吐量定时器可以让jmeter以指定数字的吞吐量(以每分钟的样本数为单位,而不是每秒)执行。
添加方式:测试计划--线程组--http请求--右键添加定时器--Constant TroughtputTimer
操作流程:
1.添加线程组,循环次数设成永远
2.添加http请求
3.添加常数吞吐定时器
4.添加查看结果树
5.查看监听器-聚合报告
配置:吞吐量值:QPS*60
取样器(Sample)
断言(Assertion)
响应断言、json断言(只响应json格式的断言)、断言响应时间
监听器(monitor)--聚合报告
监听器(monitor)--图形结果
监听器—用表格查看结果
正则表达式提取器
正则表达式实例:
正则表达式:数据提取器,一般简单的通用语法就是:左边界(.?)右边界,左右边界就是为了能准确定位到想匹配的内容。(.?) 是替换了想要提取的内容,里面的'?'为非贪婪匹配,(非贪婪模式就是说在遇到第一个右边界后就停止匹配,这样就可以精确拿到想要的内容)。建议均使用非贪婪匹配,除非特殊情况
正则表达式提取案例
正则表达式引用
xpath提取器
添加:线程组--http请求--后置处理器--xpath提取器
配置:xpath path:xpath匹配规则
匹配数字:1代表第一个结果,-1代表所有结果,0表示随机
json提取器
添加:线程组--http请求--后置处理器--json提取器
配置:
引用名称:配置后的数据存储的变量名
json path:json路径。$.weatherinfo.city
引用:直接引用变量名即可
Jsonpath表达式实现接口关联
从根目录开始查找(绝对路径):$.expires_in
从任意目录开始查找(相对路径):$..expires_in
Jmeter执行顺序、作用域
顺序:
测试计划》线程组》配置原件》前置处理器》定时器》取样器》后置处理器》断言》监听器
作用域:
必须组件:测试计划、线程组、取样器
辅助组件:除了必须组件以外
辅助组件作用于父组件,同级组件,以及同级组件下的所有子组件
Jmeter参数化
1.用户定义变量(全局参数)
2.用户参数(针对每个用户取不同的值,不能针对同一个用户取不同的值)
3.csv数据文件(针对每个用户循环取不同的值)
4.counter函数
不需要提前准备测试数据,jmeter自动添加计数方式来完成参数化
true:每个用户分别统计
False:所有用户使用全局计数
jmeter直连数据库
连接准备:
1.打开数据库,确认数据库的表和对应的字段
2.加载mysql的jdbc驱动
3.配置jdbc connection configuration
create pool name:给连接池命名,用于后续引用
数据库url:jdbc:oracle:thin:@10.1.1.221:1521:ORCL
用户名:
密码: