测试开发系列(功能+接口+性能+自动化)
性能测试资源下载链接
下载
官网下载地址: http://jmeter.apache.org/download_jmeter.cgi
安装
把下载的安装包,解压到某一目录即可
提示:安装目录中不要出现空格,这将导致远程测试出现问题
环境配置
Jmeter环境
1. 新建JMETER_HOME变量,并添加jmeter所在目录 如:-> F:\Jmeter\apache-jmeter-5.1.1
2.PATH-> .;%JMETER_HOME%\lib\ext\ApacheJMeter_core.jar;%JMETER_HOME%\lib\jorphan.jar;%JMETER_HOME%\lib\logkit-2.0.jar;
启动验证
JMeter启动有多种方式,进入JMeter安装目录下的bin目录
双击 jmeter.bat
双击 ApacheJMeter.jar 选择使用java程序打开
命令行输入: java -jar ApacheJMeter.jar
存放可执行文件和配置文件
jmeter.bat:windows的启动文件
jmeter.log:日志文件
jmeter.sh:linux的启动文件
jmeter.properties:系统配置文件
jmeter-server.bat:windows分布式测试要用到的服务器配置
jmeter-serve:linux分布式测试要用到的服务器配置
docs:是JMeter的api文档,可打开api/index.html页面来查看
该目录用来存放JMeter依赖的jar包和用户扩展所依赖的jar包
汉化、修改主题
元件:多个类似功能组件的容器(类似于类)。
常见的元件类型有:
1. 取样器
2. 逻辑控制器
3. 前置处理器
4. 后置处理器
5. 断言
6. 定时器
7. 测试片段
8. 配置元件
9. 监听器
组件:实现独立的某个功能(类似于方法)
在JMeter中,元件的作用域是靠测试计划的树形结构中元件的父子关系来确定的。
提示: 核心是取样器,其他组件都是以取样器为核心运行的,组件添加的位置不同,生效的取样器也不同。
作用域的原则
1. 取样器:元件不和其他元件相互作用,因此不存在作用域的问题;
2. 逻辑控制器:元件只对其子节点中的取样器和逻辑控制器作用;
3. 其他六大元件:除取样器和逻辑控制器元件外,如果是某个取样器的子节点,则该元件对其父子节点起作用;
4. 如果其父节点不是取样器,则其作用域是该元件父节点下的其他所有后代节点(包括子节点,子节点的子节点等);
提示:以上元件中还没开始学习,暂时理解jmeter这种树形结构结构影响作用域即可。
1. 配置元件(config elements)
2. 前置处理程序(Per-processors)
3. 定时器(timers)
4. 取样器(Sampler)
5. 后置处理程序(Post-processors)
6. 断言(Assertions)
7. 监听器(Listeners)
提示:
1. 前置处理器、后置处理器、断言等元件功能对取样器起作用(如果在它们的作用域内没有任何取样器,则不会被执行)
2. 如果在同一作用域范围内有多个同一类型的元件,则这些元件按照它们在测试计划中的上下顺序依次执行
需求:使用JMeter访问百度首页接口,并查看请求和响应信息
操作步骤
1. 启动JMeter
2. 在‘测试计划’下添加‘线程组’
3. 在‘线程组’下添加‘HTTP请求’取样器
4. 填写‘HTTP请求’的相关请求数据
5. 在‘线程组’下添加‘察看结果树’监听器
6. 点击‘启动’按钮运行,并查看结果
说明:线程组是控制JMeter将用于执行测试的线程数,也可以把一个线程理解为一个测试用户。
添加线程组
位置:右键点击‘测试计划’ --> 添加 --> 线程(用户) --> 线程组
线程组的特点
模拟多人操作
线程组可以添加多个,多个线程组可以并行或串行
取样器(请求)和逻辑控制器必须依赖线程组才能使用
线程组下可以添加其他元件下组件
线程组分类
线程组
普通的、常用的线程组,可以看做一个虚拟用户组,线程组中的每一个线程都可以理解为一个虚拟用户
setUp线程组
一种特殊类型的线程组,可用于执行预测试操作
tearDown线程组
一种特殊类型的线程组,可用于执行测试后工作
线程组参数详解
取样器错误后要执行的动作
继续:如果取样器里的执行出现错误失败的时候,请求不会停止,继续执行。
启动下一进程循环: 忽略错误,线程当前循环错误,执行下一个循环。
停止线程: 只限当前线程停止,不影响其他线程执行
停止测试: 当前执行的线程全部执行完毕后结束
立即停止测试: 立刻停止
线程属性
线程数:虚拟用户数
Ramp-Up时间(秒):启动全部虚拟用户数所需要的时间
循环次数:指定次数或勾选永远
延迟创建线程直到需要:测试开始的时候,所有线程就被创建完。勾选了此选项,那么线程只会在合适的需要用到的时候创建.
调度器:勾选后,调度器配置才能使用;
调度器配置
持续时间(秒):设置脚本压测持续时间
启动延迟(秒):启动延迟时间
位置: 选中线程组->右键->添加->取样器->HTTP请求 作用: 向服务器发送http及https请求
```xml
协议:向目标服务器发送HTTP请求时的协议,可以是http或者是https ,默认值为http 。
服务器名称或IP :HTTP请求发送的目标服务器名称或IP地址。
端口号:目标服务器的端口号,默认值为80 。
方法:发送HTTP请求的方法,可用方法包括GET、POST、HEAD、PUT、OPTIONS、TRACE、DELETE等。
路径:目标URL路径(不包括服务器地址和端口)
Content encoding :内容的编码方式,默认值为iso8859
同请求一起发送参数:GET请求时url中附带参数可以通过此方式添加
消息体数据:POST/PUT请求JSON数据存放地
```
位置: 选中测试计划/线程组->右键->添加->监听器->察看结果树 作用: 查看请求请求和响应结果
取样结果:查看响应信息头信息、响应状态码
请求:查看请求相关信息(url、方法、参数)
响应:查看响应信息
在没有接口文档的旧项目当中,快速录制web页面产生的http接口请求,帮助编写接口测试脚本
JMeter分布式执行原理
JMeter分布式测试时,选择其中一台作为控制机(Controller),其它机器做为代理机(Agent)。
执行时,控制机会把脚本发送到每台代理机上,代理机拿到脚本后就开始执行,代理机执行时不需要启动JMeter界面,可以理解它是通过命令行模式执行的。
执行完成后,代理机会把结果回传给控制机,控制机会收集所有代理机的信息并汇总。
PV:(Page View)即页面访问量,每打开一次页面PV计数+1,刷新页面也是。PV只统计页面访问次数。
UV(Unique Visitor),唯一访问用户数,用来衡量真实访问网站的用户数量。
一般用UV统计用户活跃数,用PV统计用户访问页面的频率
计算公式:TPS= 总请求数 / 总时间
按照需求所示,在2019年第32周,有4.13万的浏览量,那么总请求数,我们可以认为估算为4.13万(1次浏览都至少对应1个请求)
总请求数 = 4.13 万请求数 = 41300 请求数
总时间:由于不知道每个请求的具体时间,我们按照普通方法,我们可以按照一周的时间进行计算
总时间 = 1天 = 1 * 24 小时 = 24 * 3600 秒
套入公式可得:
TPS = 41300请求数/24*3600秒 = 0.48请求数/秒
结论:按照普通计算方法,我们在测试环境对相同的系统进行性能测试时,每秒能够发送0.48请求就可以满足线上的需要。
二八原则就是指80%的请求在20%的时间内完成
计算公式 : TPS = 总请求数 80% / (总时间20%)
按照公式进行计算
TPS = 41300 * 0.8请求数 / 24*3600*0.2秒 = 1.91 请求数/秒
结论:按照二八原则计算,在测试环境我们的TPS只要能达到1.91请求数每秒就能满足线上需要。二八原则的估算结果会比平均值的计算方法更能满足用户需求。
业务数据:有的公司会统计一定时间内的所有业务数据,我们可以根据这个业务数据曲线图,统计出最多请求的数量和时间比例。
计算模拟用户正常业务操作(稳定性测试)的并发量:
根据这些数据统计图,可以得出结论:
大部分订单在8点-24点之间,因此系统的有效工作时长为16个小时
从订单数量统计,8-24点之间的订单占一天总订单的98%左右(40474个)
结合二八原则计算公式 : TPS = 总请求数 80% / (总时间20%)
需要在测试环境模拟用户正常业务操作(稳定性测试)的并发量为:
TPS = 40474 * 0.8请求数 / 16*3600*0.2秒 = 2.81 请求数/秒
计算模拟用户峰值业务操作(压力测试)的并发量:
根据这些数据统计图,可以得出结论:
订单最高峰在在21点-22点之间,一小时的订单总数大约为8853个
计算压力测试的并发数:TPS = 峰值请求数/峰值时间 * 系数
需要在测试环境模拟用户峰值业务操作(压力测试)的并发量为:
TPS = 8853 请求数 / 3600秒 * 3(系数) = 7.38 请求数/秒
说明:下载jmeter插件管理工具包(可以用此包下载jmeter插件)
说明:阶梯线程组
添加方式:测试计划 --> 线程(用户)–> Concurrency Thread Group
参数:
重点:
Target Concurrency:目标并发(线程数)
Ramp Up Time:加速时间
Ramp-Up Steps Count:加速步骤计数
Hold Target Rate Time:运行时间
Time Unit:时间单位(分钟或者秒)
了解:
Thread Iterations Limit:线程迭代次数限制(循环次数)
Log Threads Status into File:
将线程状态记录到文件中(将线程启动和线程停止事件保存为日志文件)
说明:每秒完成事务数 场景:统计业务成功率
添加方式:测试计划 --> 线程组–> 监听器–>Transactions per Second
提示:需要配合事务控制器完成,如果不使用事务控制器,默认1个请求为1个事务
说明:查看服务器吞吐流量 单位/字节
添加方式:测试计划 --> 线程组–> 监听器–>Bytes Throughput Over Time