性能测试
开源平台:metersphere
1. 术语介绍
-
响应时间(Response time):对请求作出响应所需要的时间。
在互联网上对于用户响应时间,有一个普遍的标准。2/5/10秒原则。
-
并发用户数(concurrent users):在同一时间段内访问系统的用户数量。
-
吞吐量(Throughput):单位时间内系统处理的客户请求的数量。
对web系统, 吞吐量主要以请求数/秒、页面数/秒或是字节数/秒来体现。
-
性能计数器(Counter):描述服务器或操作系统性能的指标
如: windws系统的使用内存数(Memory In Usage)、**进程时间(Total Process Time)**等。
-
思考时间(Think time):也称”休眠时间” 或”等待时间”。
从业务角度讲, 是指用户进行操作时,每个请求之间的间隔时间。
2. 方法
-
负载测试(Loading Testing): 通过不断在被测系统上增加压力,直到性能指标超过预定指标或者系统资源使用已达到饱和状态。
这种测试方法的主要目的是找到系统处理能力的极限, 使用这种测试方法的时候应该考虑到业务的应用场景是否符合业务的实际特点,这样才能使得测试结果具有实际意义。
-
压力测试(Stress Testing): 是测试系统在一定饱和状态下,(例如: CPU、内存)等在饱和使a用情况下,能够处理的会话能力以及系统是否会出现错误
这种测试方法主要检查系统处于压力情况下的应用表现, 一般通过模拟负载等方法使系统资源使用达到较高的水平(如:CPU使用率达到75%以上,内存使用率达到70%以上的情况下, 测试系统的响应时间,系统有没有出现错误, 使用这种方法一般用于测试系统的稳定性)
3. 应用场景
-
能力验证:
指验证系统在某种条件下是否达到了某种性能,如验收测试。
-
能力规划:
指验证系统是否满足在未来一段时间的用户增长需求。
-
性能调优:
指发现系统性能瓶颈后,需要对针对系统某些方面作出调整以解决瓶颈问题。
-
缺陷发现:
指以发现缺陷为主要目的,而将性能测试作为一种手段。
4. 工具(Jmeter)
4.1 介绍
Apache JMeter是Apache组织开发的基于Java的性能测试工具。用于对软件做性能测试,它最初被设计用于Web应用测试,但后来扩展到其他测试领域。JMeter可以用于测试FTP、HTTP、RPC、JUNIT、JMS、LDAP、WebService(Soap) Request以及Mail和JDBC(数据库性能测试)。也会被用来做回归和功能测试。
-
启动:
路径 :D:\\jmeter-5.6.2\bin\jmter.bat
可以设置到 Windows 系统变量中
4.2 元件和组件
4.2.2 元件
- 多个类似功能组件的容器(类似于类)
4.2.1 组件
- 实现独立的某个功能(类似方法)
4.3 作用域
- 作用域原则
- 取样器:核心,不和其他元件相互作用,没有作用域。
- 逻辑控制器:只对其子节点中的取样器和逻辑控制器起作用。
- 其他元件:
- 如果父节点是取样器,该元件只对父节点起作用。
- 如果父节点不是取样器,其作用域是父节点下的所有子节点及其后代节点。
4.4 参数化
-
用户定义的变量(配置元件的组件)
-
csv数据文件设置
-
用户参数(前置处理器的组件)
-
函数:
__counter:计数器函数(True:每个用户独立的计数器;False:全局计数器)
__Random:随机数函数(参数一:范围最小值;参数二:范围最大值)
__time:获取当前时间函数(无参:获取时间戳;参数一:格式化时间 yyyy-MM-dd hh:mm:ss)
4.5 测试报告
jmeter –n –t zentao.jmx –l result.txt -e -o ./report –JthreadCount=3600 –Jtime=120
# -n 无图形化运行
# -t 运行脚本文件
# -l 将运行信息写入日志文件
# -e 生成测试报告
# -o 指定报告输出路径
4.6 BeanShell 脚本
4.6.1 BeanShell 场景
- 接口签名
- 数据库断言
- 跨线程共享变量
- RSA加密,混合加密
- csv 数据驱动之后的断言
- 调用开发的 jar 包,class 包,java 包
4.6.2 BeanShell 分类
- 前置处理器:BeanShell
- 后置处理器:BeanShell
- 定时器:BeanShell
- 采样器:BeanShell
- 断言:BeanShell
- 监听器:BeanShell
4.6.3 BeanShell 语法
特点:BeanShell有自己的语法,同时全面兼容 Java 语法
注意:BeanShell读写变量的时候传的是 String 类型
- 打印调式:
log.info("Hello World!")
log.error("错误日志!")
System.out.println("Hello World!")
- Vars(局部变量)
- 作用:读写 Jmeter 的局部变量(只能在一个线程中使用变量)
- Vars 设置和提取的变量可以和当前线程组的其他任何组件的局部变量互相设置值和取值。
- 意义:在于单线程读写变量的值。
// 获取局部变量
String name = vars.get("name");
// 设置局部变量
vars.put("name","LiSi");
- Props(全局变量)
-
作用:读写 Jmeter 的全局变量(在多线程中使用变量)
-
Props 设置和提取的变量可以在别的线程组使用。
-
意义:在于跨线程读写变量的值。
// 在 A 线程
// 设置全局变量
props.put("name","LiSi");
// 在 B 线程
// 获取全局变量
String name = props.get("name"); // 只作用于获取全局变量的对象中
// 实现在 B 线程中都可以使用的变量
// 设置 B 线程局部变量
vars.put("name",name);
- prev(响应体)
- 作用:获取前一个取样器的响应体数据(在单线程中)
- 意义:前后组件之间的数据联通。
// 获取响应体数据
String response= prev.getResponseDataAsString();
log.info("响应体:" + response)
// 对响应体进行 JSON 解析
// 步骤一:包地址 - https://mvnrepository.com/artifact/org.json/json/20210307
import org.json.*;
JSONObject responseJson = new JSONObject(response);
String token = responseJson.get("body").get("token");
// 步骤二:包地址 - https://mvnrepository.com/artifact/com.jayway.jsonpath/json-path
String token = JsonPath.read(response,"$.body.token");
- 引入 Java 文件
// 导入文件
// 第一种导入方式:
source("D:\\Test.java");
// 第二种导入方式:在整个测试计划中加入Java包
import lisi.Test;
// 加密代码
Int num = new Test().jiami(10,20);
// 打印数据
log.info(num.toString());
4.6.4 加密
主流加密方式:1:MD5;2:SHA256;3:Base64(调函数);4:RSA(调用jar包);5:签名;6:混合加密;
- 原理:各种字段的拼接组合 + 各种加密规则的调包使用
4.7 持续集成
4.7.1 Ant
-
介绍:Ant 是 Jmeter 的插件,相当于 Shell 用来自动化运行 Java 文件
-
官网:Apache Ant - 二进制分布
-
下载:https://dlcdn.apache.org//ant/source/apache-ant-1.10.14-src.zip
-
配置:文章来源:https://www.toymoban.com/news/detail-644767.html
- 配置 Ant 中的 build.xml 路径:D:\apache-ant-1.10.14
未完待续···············文章来源地址https://www.toymoban.com/news/detail-644767.html
到了这里,关于性能测试—Jmeter工具的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!