软件研究之JMeter

标签: 无 分类: 未分类 创建时间:2024-04-01 08:22:05 更新时间:2024-11-23 10:24:26

1.前言

最近在做浙政钉上架,里面有一项内容就是要上传 PTS 压测报告,但是 阿里云的 PTS 需要费用,只能寻找免费的了,毕竟项目本身就没有多少钱。找来找去,找到了 JMeter 这个工具。

Apache JMeter是Apache组织开发的基于Java的压力测试工具。用于对软件做压力测试,它最初被设计用于Web应用测试,但后来扩展到其他测试领域。 它可以用于测试静态和动态资源,例如静态文件、Java 小服务程序、CGI 脚本、Java 对象、数据库、FTP 服务器, 等等。JMeter 可以用于对服务器、网络或对象模拟巨大的负载,来自不同压力类别下测试它们的强度和分析整体性能。另外,JMeter能够对应用程序做功能/回归测试,通过创建带有断言的脚本来验证你的程序返回了你期望的结果。为了最大限度的灵活性,JMeter允许使用正则表达式创建断言。

2.安装

安装JDK之后,然后找到 JMeter 下载后,解药在windows上直接双击 jmeter.bat 运行即可。如果是在 macos 上,那就是直接用命令行 运行 jmeter.sh。

参考文章:
【1】.Apache JMeter 入门教程**

3.使用

使用起来也非常的简单。

3.1.添加线程组

右键点击 “测试计划” → “添加” → “线程(用户)” → “线程组”。详细参数:

  • 线程数:虚拟用户数。一个虚拟用户占用一个进程或线程。模拟多少用户访问也就填写多少个线程数量。

  • Ramp-Up时间(秒):设置的虚拟用户数需要多长时间全部启动。如果线程数为100,准备时长为5,那么需要5秒钟启动100个线程,也就是每秒钟启动20个线程。 相当于每秒模拟20个用户进行访问,设置为零我理解为并发访问。

  • 循环次数:如果线程数为100,循环次数为100。那么总请求数为100*100=10000 。如果勾选了“永远”,那么所有线程会一直发送请求,直到选择停止运行脚本。

3.2.添加测试接口

右键点击 “你的线程组” → “添加” → “取样器” → “HTTP请求”。 详细参数:

  • 协议:向目标服务器发送HTTP请求协议,可以是HTTP或HTTPS,默认为HTTP。

  • 服务器名称或IP :HTTP请求发送的目标服务器名称或IP。

  • 端口号:目标服务器的端口号,默认值为80

  • 方法:发送HTTP请求的方法,可用方法包括GET、POST、HEAD、PUT、OPTIONS、TRACE、DELETE等。

  • 路径:目标URL路径(URL中去掉服务器地址、端口及参数后剩余部分)。

  • 内容编码:编码方式,默认为ISO-8859-1编码,这里配置为utf-8。

  • 参数:同请求一起发送参数 ,在请求中发送的URL参数,用户可以将URL中所有参数设置在本表中,表中每行为一个参数(对应URL中的 key=value),注意参数传入中文时需要勾选“编码”。

3.3.添加观察结果树

右键点击 “你的线程组” → “添加” → “监听器” → “察看结果树”

3.4.添加聚合报告。

右键点击 “你的线程组” → “添加” → “监听器” → “聚合报告”,用以存放性能测试报告。详细参数:

  • Label:每个 JMeter 的 element(例如我这里只有一个 Spring WebFlux)都有一个 Name 属性,这里显示的就是 Name 属性的值。

  • 样本(Samples):请求数——表示这次测试中一共发出了多少个请求,我这里模拟了100个用户循环6次也就为100*6=600。

  • 平均值(Average):平均响应时间(单位:ms)。默认是单个Request的平均响应时间,当使用了Transaction Controller时,也可以是Transaction为单位显示平均响应时间。

  • 中位数(Median):也就是 50% 用户的响应时间。

  • 90% 百分位(Line):90% 用户的响应时间。相邻几个*%同意。

  • 最小值(Min):最小响应时间。

  • 最大值(Max):最大响应时间。

  • 异常(Error) %:错误率——错误请求数/请求总数。

  • 吞吐量(Throughput):吞吐量——默认情况下表示每秒完成的请求数(Request per Second),当使用了 Transaction Controller 时,也可以表示类似 LoadRunner 的 Transaction per Second 数 。

  • 接收 KB/Sec:每秒从服务器端接收到的数据量,相当于LoadRunner中的Throughput/Sec。

  • 发送 KB/Sec:每秒向服务器发送的数据量,相当于LoadRunner中的Throughput/Sec。

4.导出测试报告

下面是一个示例,在windows下执行。导出的是一个html 页面,可以打开之后,另存为 pdf 报告。

1
2
3
4
## 进入到 jmeter 目录

## 执行生成
./jmeter -n -t D:\zlc\renfang\压力测试\测试报告.jmx -l testLogFile -e -o ./output
参考文章:
【1】.使用JMeter导出测试报告的两种方法 1.命令行导出测试报告;2.JMeter生成;
【2】.jmeter压测并导出报告 保存报告为html
【3】.Jmeter测试报告显示错误信息、URL等信息
【4】.jmter生成的报告没有显示请求和响应明细数据 修改bin目录下的user.properties文件,追加配置,修改bin 目录下的jmeter.properties.

5.日志查看与分析

5.问题

(1) Error in NonGUIDriver com.thoughtworks.xstream.io.StreamException: An error occurred: Error in NonGUIDriver
我是在 mac 上执行的,执行了测试之后,然后导出测试结果,结果就报错了。

【解决方案】
重新保存测试脚本,然后进行测试报告输出。

参考文章:
【1】.Error in NonGUIDriver com.thoughtworks.xstream.io.StreamException: An error occurred: Error in NonGUIDrive 将测试脚本重新保存,然后将脚本放到服务器执行即可
小额赞助
本人提供免费与付费咨询服务,感谢您的支持!赞助请发邮件通知,方便公布您的善意!
**光 3.01 元
Sun 3.00 元
bibichuan 3.00 元
微信公众号
广告位
诚心邀请广大金主爸爸洽谈合作
每日一省
isNaN 和 Number.isNaN 函数的区别?

1.函数 isNaN 接收参数后,会尝试将这个参数转换为数值,任何不能被转换为数值的的值都会返回 true,因此非数字值传入也会返回 true ,会影响 NaN 的判断。

2.函数 Number.isNaN 会首先判断传入参数是否为数字,如果是数字再继续判断是否为 NaN ,不会进行数据类型的转换,这种方法对于 NaN 的判断更为准确。

每日二省
为什么0.1+0.2 ! == 0.3,如何让其相等?

一个直接的解决方法就是设置一个误差范围,通常称为“机器精度”。对JavaScript来说,这个值通常为2-52,在ES6中,提供了Number.EPSILON属性,而它的值就是2-52,只要判断0.1+0.2-0.3是否小于Number.EPSILON,如果小于,就可以判断为0.1+0.2 ===0.3。

每日三省
== 操作符的强制类型转换规则?

1.首先会判断两者类型是否**相同,**相同的话就比较两者的大小。

2.类型不相同的话,就会进行类型转换。

3.会先判断是否在对比 null 和 undefined,是的话就会返回 true。

4.判断两者类型是否为 string 和 number,是的话就会将字符串转换为 number。

5.判断其中一方是否为 boolean,是的话就会把 boolean 转为 number 再进行判断。

6.判断其中一方是否为 object 且另一方为 string、number 或者 symbol,是的话就会把 object 转为原始类型再进行判断。

每日英语
Happiness is time precipitation, smile is the lonely sad.
幸福是年华的沉淀,微笑是寂寞的悲伤。