目录
1. JMeter环境安装
1.1 安装JDK
JDK下载
安装JDK
可以默认也可以修改安装路径(这一步和环境变量有关)
配置环境变量
环境变量-系统变量,修改2处(这一步和JDK安装的路径有关,我这里安装在了D盘)
# 新增系统变量JAVA_HOME(JDK的安装地址)
D:\Java\jdk-17.0.2
# Path中新增环境变量(JDK的bin路径)
D:\Java\jdk-17.0.2\bin
D:\Java\jdk-17.0.2\jre\bin
# 如果后面升级JDK,Path中的变量也需要修改,所以更好的写法是
%JAVA_HOME%\bin
%JAVA_HOME%\jre\bin
校验是否安装成功
-
win+R,输入cmd,打开命令行
-
输入java -version,校验命令能否正常执行以及版本信息是否一致
1.2 安装JMeter
下载JMeter
这里我选择的是apache-jmeter-5.4.3.zip,这里需要的是jdk 1.8+的版本(JMeter和JDK版本需要对应)
安装JMeter
把下载的安装包,解压到某一目录下(安装目录中不能有中文/空格)
配置环境变量
和JDK环境变量配置相似
环境变量-系统变量,修改2处(这一步和JMeter安装的路径有关,我这里安装在了D盘)
# 新增系统变量JMETER_HOME(JMeter的安装地址)
D:\apache-jmeter-5.4.3
# Path中新增环境变量
%JMETER_HOME%\lib\ext\ApacheJMeter_core.jar
%JMETER_HOME%\lib\jorphan.jar
启动验证
法1. 直接双击bin目录下的jmeter.bat
法2. java -jar ApacheJMeter.jar
任意一种方式能启动说明安装成功
界面汉化
修改配置文件:bin/jmeter.propertites,修改语言为language=zh_CN,重启JMeter
修改主题
选项-外观
响应结果出现乱码
乱码:中文无法正常显示
修改配置文件:bin/jmeter.propertites,修改配置为sampleresult.default.encoding=UTF-8(原来是ISO-XXX)
修改完配置文件后重启JMeter才能使修改的配置生效
2. JMeter目录结构
2.1 bin目录
存放可执行文件和配置文件
2.2 docs目录
JMeter的api文档,用于开发扩展组件
2.3 printable_docs
用户帮助手册
2.4 lib目录
存放JMeter依赖的jar包和用户扩展所依赖的jar包
3. JMeter元件和组件
3.1 元件
概述
多个类似功能组件的容器(类似于类)
取样器
发送请求
逻辑控制器
控制语句的执行顺序
前置处理器
对请求参数进行预处理
后置处理器
对响应结果进行提取
断言
检查接口的返回结果是否和预期结果一致
定时器
设置等待
测试片段
封装一段代码,供其他脚本调用
配置元件
测试数据的初始化配置
监听器
查看JMeter脚本的运行结果
接口自动化脚本实现过程
配置元件
初始化测试数据
前置处理器
对请求参数进行赋值
取样器
调用GET/POST方法发送请求
后置处理器
提取响应中特定字段的值
断言
对提取出来的值与预期结果进行对比
监听器
控制台查看脚本运行结果
元件作用域
元件作用域是靠测试计划的树形结构中元件的父子关系来确定的
所有的组件都是以取样器为核心来运行的(如果在一个脚本里没有取样器,那么这个脚本就不会执行)
组件添加的位置不同,生效的取样器也不同
作用域的原则
- 取样器:核心,不和其他元件相互作用,没有作用域
- 逻辑控制器:只对其子节点的取样器和逻辑控制器起作用
- 其他元件:如果是某个取样器的子节点,则该元件只对其父节点起作用;如果父节点不是取样器,则其作用域是该元件父节点下的其他所有后代节点(包括子节点,子节点的子节点等)
元件的执行顺序
同一作用域下的不同类型元件:配置元件-前置处理器-定时器-取样器-后置处理器-断言-监听器
同一作用域下的多个相同类型元件:按照测试计划从上到下的顺序依次执行
案例
定时器1-请求1-定时器1-定时器2-请求2-定时器1-定时器3-请求3
使用示例
需求
使用JMeter访问百度首页接口,并查看请求和响应信息
步骤
- 测试计划里添加线程组-线程组
- 线程组-添加-取样器-HTTP请求
- 填写HTTP请求的相关请求数据
- 线程组-添加-监听器-察看结果树
- 点击启动按钮运行,并查看结果
3.2 组件
概述
实现独立的某个功能(类似于方法)
以取样器的组件为例,以下介绍3种重要的基本组件(JMeter基本组成部分)
线程组
线程组就是控制JMeter用于执行测试的一组用户
特点
- 可以模拟多人操作(修改线程数)
- 线程组可以添加多个,多个线程组可以并行或串行(勾选"独立运行每个线程组"可以实现串行)
- 取样器(请求)和逻辑控制器必须依赖线程组才能使用
- 线程组下可以添加其他元件下组件
分类
- 线程组:普通常用的线程组,可以看作一个虚拟用户组,线程组中每个线程都可以理解为一个虚拟用户;执行测试用例,可以有1个或多个(并行/串行)
- setup线程组:预测试操作,所有脚本之前执行
- teardown线程组:测试后操作,所有脚本之后执行
参数
- 线程数代表虚拟用户数,用户数越多,负载越大
- 循环次数代表运行时间,次数越多,运行时间越长
HTTP请求
作用
向服务器发送http和https请求(取样器)
如果协议部分不填,JMeter默认是http协议,端口默认是80
URL属性
协议、域名、端口、路径、请求方法、编码格式
参数
- 发送get请求:路径里填写参数(?键名=键值&键名=键值);参数列表中添加参数(名称、值)
- 发送post请求:参数列表中添加参数(和get的第二种方法相同,区别在于请求方法需要修改为post,form);消息体数据中添加请求体(form/json)
案例
get请求1
使用HTTP请求-路径来传递get请求参数
get请求2
使用HTTP请求-参数列表来传递get请求参数(需要注意这里协议是https而不是http)
post请求1
使用HTTP请求-参数列表来传递POST请求的form格式参数
post请求2
使用HTTP请求-消息体数据来传递POST请求的form格式参数
察看结果树
作用
查看HTTP请求的请求和响应结果
组成
取样器结果
查看响应头信息、响应状态码
请求
查看请求相关信息(URL,方法,参数)
响应数据
查看响应信息(状态码,响应体)
4. JMeter参数化
4.1 概述
如果要发送请求10次,每次请求发送不同的参数值,应该怎么做?引入参数化
参数化测试定义
用不同的测试数据调用相同的测试方法进行测试(用参数来替代固定的测试数据,参数是1个还是多个由自己来定义)
JMeter常见参数化的方式
-
用户定义的变量–全局变量
-
用户参数–为每个用户分配不同的参数值
-
CSV Data Set Config–文件方式参数化
-
函数–随机数据
-
(数据库/数据文件)
本质
实现测试数据和测试方法的分离
案例
要求
某支付系统,需要用1000个不同的用户登录,并使用添加不同的测试金额数据访问支付接口
步骤
- 准备csv数据文件,1000个登录的用户名密码
- 添加线程组
- 添加csv数据文件设置
- 添加HTTP请求–登录,使用读取的用户名密码
- 添加HTTP请求–支付,使用counter函数添加不同的测试金额
- 察看结果树
4.2 用户定义的变量
作用
定义全局变量
局限性
每次取值(无论是否相同用户)都是固定值
位置
线程组–添加–配置元件–用户定义的变量
案例
要求
使用用户定义的变量配置被测系统的协议、域名和端口(https://www.baidu.com:443)
步骤
- 添加3个变量(变量名、变量值)
- 添加HTTP请求,引用自定义的变量名(格式:${变量名})
- 运行,查看结果树
4.3 用户参数
概述
性能测试的时候有多个用户同时请求,每个用户在登录请求时需要使用不同的用户名密码进