一.Jmeter性能测试里面BeanShell作用
1.1什么是BeanShell
什么是BeanShell
- 用Java写成的 小型、免费的Java源代码解释器
- 可以执行标准Java语句和表达式,完全符合java语法的java脚本语言(需要会javase语言)
- 包括一些脚本命令,有自己的一些语法和方法,是一种松散类型的脚本语言(这点和JS类似)
- 用于一些复杂的个性化需求,使用更灵活,功能更强大
- 官网地址:http://www.beanshell.org
1.2使用场景
使用场景
- 需要在jmeter里面对数据的二次处理,定制自己的业务逻辑
- 对参数进行加密、base64编码、时间格式化、文件操作、自定义断言等
- 属于Jmeter二次开发
- Jmeter里面开启【日志查看】方便调试
1.3BeanShell常用分类
- 采样器BeanShell
- 前置处理器 BeanShell PreProcessor:提前对参数处理比如加密编码
- 后置处理器 BeanShell PostProcessor :对返回结果做处理
- 断言 BeanShell Assert :验证请求接口是否满足要求
1.4外观样式调整
1.5BeanShell内置对象
1.5.1添加BeanShell
1.5.2 内置对象
SampleResult, ResponseCode, ResponseMessage, IsSuccess, Label, FileName, ctx, vars, props, log
二 .BeanShell开发核心知识点应用实战
2.1Bean shell内置对象vars
- 使用Bean shell内置对象vars对【变量】进行存取操作,作用在当前线程组,类似java里面的map
- vars.put("name","jack");数据存到jmeter变量中
- vars.get("name");从jmeter中获得变量值
在Bean shell脚本中,我们定义了id,title
在http请求中添加参数
查看结果树,有BeanShell请求和http请求,并且Http响应返回了我们设定的参数值
2.2Bean shell内置对象props
使⽤Bean shell内置对象props对【属性】进⾏存取操作,作⽤在跨线程组使⽤
props.get("language"); //jmeter.properties⾥⾯定义的属性
props.put("language","zh_CN");
我们使用脚本来得到jmeter.properties⾥⾯定义的属性
三.BeanShell基于响应结果自定义断言实战
3.1需求背景
需求
根据业务结果,自定义响应断言
3.2步骤
1.准备工作,创建一个http请求,传参的话这里我们需要用到前置处理器
2.添加前置处理器,编写参数
3.添加结果树,添加断言BeanShell
4.了解核心变量,prev是内置函数,可以拿到相应信息和响应码
String data = prev.getResponseDataAsString() //获取响应信息
prev.getResponseCode() //获取响应code
Failure = false //表示断言成功,
Failure = true //表示断言失败
5.在断言BeanShell中添加脚本
6.为了解析出正确的内容,我们需要引入json解析包
使用JSON工具
jar包放入jmeter目录下的 \lib\ext 中( 本章本集资料包里面)
更多api参考 JSONObject
7.引入json工具包之后,编写脚本
8.查看结果树
3.3拓展
拓展
-
有些项目会有需要对参数进行加密,比如MD5,则可以这样操作
import org.apache.commons.codec.digest.DigestUtils;
String signs = DigestUtils.md5Hex("1111");
log.info("md5==="+signs);
vars.put("title",(signs.toString()).toUpperCase());
四.Jmeter-html可视化压测报告实战
4.1测试报告及步骤
测试报告
聚合报告(前面讲过)
有收集到性能数据,但显示比较单一
Jmeter 可以生成 HTML 性能测试报告
步骤
保存jmx到本地
进到jmeter的bin目录下
./jmeter -n -t /Users/xdclass/Desktop/report.jmx -l /Users/xdclass/Desktop/temp/jtl/result.jtl -e -o /Users/xdclass/Desktop/temp/result
参数说明
-n 非gui方式运行jmeter
-t :jmx 脚本路径
-l :result.jtl 运行结果保存路径,注意:.jtl 文件名不能重复,文件夹需要存在
-e :在脚本运行结束后生成 HTML 报告
-o :用于存放 HTML 报告的目录,文件夹需要存在
4.2操作实战
1.前置条件,创建线程组
2.创建http请求
3.保存jmx在本地,这里我们将其命名为report.jxm
4.进入jmeter的bin目录
5.输入上文提到的脚本
6.在对应的文件中生成了对应的结果文件
4.3Jmeter压测生成多维度图形化HTML测试报告讲解
dashboard讲解
Test and Report informations
Source file:jtl文件名
Start Time :压测开始时间
End Time :压测结束时间
Filter for display:过滤器
Lable:sampler采样器名称
APDEX(Application performance Index)
apdex:应用程序性能指标,范围在0~1之间,1表示达到所有用户均满意
T(Toleration threshold):可接受阀值
F(Frustration threshold):失败阀值
Requests Summary
OK:成功率
KO:失败率
Statistics 统计数据
lable:sampler采样器名称
samples:请求总数,并发数*循环次数
KO:失败次数
Error%:失败率
Average:平均响应时间
Min:最小响应时间
Max:最大响应时间
90th pct: 90%的用户响应时间不会超过这个值
95th pct: 95%的用户响应时间不会超过这个值
99th pct: 99%的用户响应时间不会超过这个值 (存在极端值)
throughtput:Request per Second吞吐量 qps
received:每秒从服务器接收的数据量
send:每秒发送的数据量
charts讲解
Over Time(随着时间的变化)
Response Times Over Time:响应时间变化趋势
Response Time Percentiles Over Time (successful responses):最大,最小,平均,用户响应时间分
Active Threads Over Time:并发用户数趋势
Bytes Throughput Over Time:每秒接收和请求字节数变化,蓝色表示发送,黄色表示接受
Latencies Over Time:平均响应延时趋势
Connect Time Over Time :连接耗时趋势
Throughput
Hits Per Second (excluding embedded resources):每秒点击次数
Codes Per Second (excluding embedded resources):每秒状态码数量
Transactions Per Second:即TPS,每秒事务数
Response Time Vs Request:响应时间和请求数对比
Latency Vs Request:延迟时间和请求数对比
Response Times
Response Time Percentiles:响应时间百分比
Response Time Overview:响应时间概述
Time Vs Threads:活跃线程数和响应时间
Response Time Distribution:响应时间分布图
具体如下: