gitbook/Java性能调优实战/docs/98194.md
2022-09-03 22:05:03 +08:00

121 lines
7.1 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 加餐 | 推荐几款常用的性能测试工具
你好,我是刘超。很多同学给我留言想让我讲讲工具,所以我的第一篇加餐就光速来了~
熟练掌握一款性能测试工具,是我们必备的一项技能。他不仅可以帮助我们模拟测试场景(包括并发、复杂的组合场景),还能将测试结果转化成数据或图形,帮助我们更直观地了解系统性能。
## 常用的性能测试工具
常用的性能测试工具有很多,在这里我将列举几个比较实用的。
对于开发人员来说首选是一些开源免费的性能压力测试软件例如abApacheBench、JMeter等对于专业的测试团队来说付费版的LoadRunner是首选。当然也有很多公司是自行开发了一套量身定做的性能测试软件优点是定制化强缺点则是通用性差。
接下来我会为你重点介绍ab和JMeter两款测试工具的特点以及常规的使用方法。
### 1.ab
ab测试工具是Apache提供的一款测试工具具有简单易上手的特点在测试Web服务时非常实用。
ab可以在Windows系统中使用也可以在Linux系统中使用。这里我说下在Linux系统中的安装方法非常简单只需要在Linux系统中输入yum-y install httpd-tools命令就可以了。
安装成功后输入ab命令可以看到以下提示
![](https://static001.geekbang.org/resource/image/ac/0a/ac58706f86ebd1d7349561ae501fca0a.png)
ab工具用来测试post get接口请求非常便捷可以通过参数指定请求数、并发数、请求参数等。例如一个测试并发用户数为10、请求数量为100的的post请求输入如下
```
ab -n 100 -c 10 -p 'post.txt' -T 'application/x-www-form-urlencoded' 'http://test.api.com/test/register'
```
post.txt为存放post参数的文档存储格式如下
```
usernanme=test&password=test&sex=1
```
**附上几个常用参数的含义:**
* \-n总请求次数最小默认为1
* \-c并发次数最小默认为1且不能大于总请求次数例如10个请求10个并发实际就是1人请求1次
* \-ppost参数文档路径-p和-T参数要配合使用
* \-Theader头内容类型此处切记是大写英文字母T
当我们测试一个get请求接口时可以直接在链接的后面带上请求的参数
```
ab -c 10 -n 100 http://www.test.api.com/test/login?userName=test&password=test
```
输出结果如下:
![](https://static001.geekbang.org/resource/image/66/9b/66e7cf2dafa91a3ae80405f97a91899b.png)
**以上输出中,有几项性能指标可以提供给你参考使用:**
* Requests per second吞吐率指某个并发用户数下单位时间内处理的请求数
* Time per request上面的是用户平均请求等待时间指处理完成所有请求数所花费的时间/(总请求数/并发用户数);
* Time per request下面的是服务器平均请求处理时间指处理完成所有请求数所花费的时间/总请求数;
* Percentage of the requests served within a certain time每秒请求时间分布情况指在整个请求中每个请求的时间长度的分布情况例如有50%的请求响应在8ms内66%的请求响应在10ms内说明有16%的请求在8ms~10ms之间。
### 2.JMeter
JMeter是Apache提供的一款功能性比较全的性能测试工具同样可以在Windows和Linux环境下安装使用。
JMeter在Windows环境下使用了图形界面可以通过图形界面来编写测试用例具有易学和易操作的特点。
JMeter不仅可以实现简单的并发性能测试还可以实现复杂的宏基准测试。我们可以通过录制脚本的方式在JMeter实现整个业务流程的测试。JMeter也支持通过csv文件导入参数变量实现用多样化的参数测试系统性能。
Windows下的JMeter安装非常简单在官网下载安装包解压后即可使用。如果你需要打开图形化界面那就进入到bin目录下找到jmeter.bat文件双击运行该文件就可以了。
![](https://static001.geekbang.org/resource/image/2d/53/2d96660e8e88a2697e066fd301663153.png)
JMeter的功能非常全面我在这里简单介绍下如何录制测试脚本并使用JMeter测试业务的性能。
录制JMeter脚本的方法有很多一种是使用Jmeter自身的代理录制另一种是使用Badboy这款软件录制还有一种是我下面要讲的通过安装浏览器插件的方式实现脚本的录制这种方式非常简单不用做任何设置。
首先我们安装一个录制测试脚本的插件叫做BlazeMeter插件。你可以在Chrome应用商店中找到它然后点击安装 如图所示:
![](https://static001.geekbang.org/resource/image/a8/3e/a8f7403c1b6b720318d97accf191843e.png)
然后使用谷歌账号登录这款插件如果不登录我们将无法生成JMeter文件安装以及登录成功后的界面如下图所示
![](https://static001.geekbang.org/resource/image/29/4a/2932afaf9eecb2cce789ad5151180a4a.png)
最后点击开始就可以录制脚本了。录制成功后点击保存为JMX文件我们就可以通过JMeter打开这个文件看到录制的脚本了如下图所示
![](https://static001.geekbang.org/resource/image/bf/fd/bf03e37ace494cf84171b55f9b63bdfd.png)
这个时候,我们还需要创建一个查看结果树,用来可视化查看运行的性能结果集合:
![](https://static001.geekbang.org/resource/image/84/69/844a2a65add49c2f4d15b10667943069.png)
设置好结果树之后,我们可以对线程组的并发用户数以及循环调用次数进行设置:
![](https://static001.geekbang.org/resource/image/43/9b/431ae410ec4369cc81af7622a23b409b.png)
设置成功之后,点击运行,我们可以看到运行的结果:
![](https://static001.geekbang.org/resource/image/6f/67/6ffe85677e50bb75152d45526a7ba667.png)
JMeter的测试结果与ab的测试结果的指标参数差不多这里我就不再重复讲解了。
### 3.LoadRunner
LoadRunner是一款商业版的测试工具并且License的售价不低。
作为一款专业的性能测试工具LoadRunner在性能压测时表现得非常稳定和高效。相比JMeterLoadRunner可以模拟出不同的内网IP地址通过分配不同的IP地址给测试的用户模拟真实环境下的用户。这里我就不展开详述了。
## 总结
三种常用的性能测试工具就介绍完了,最后我把今天的主要内容为你总结了一张图。
![](https://static001.geekbang.org/resource/image/a7/1a/a70d0081607081471df4db435641b51a.jpg)
现在测试工具非常多包括阿里云的PTS测试工具也很好用但每款测试工具其实都有自己的优缺点。个人建议还是在熟练掌握其中一款测试工具的前提下再去探索其他测试工具的使用方法会更好。
今天的加餐到这里就结束了,如果你有其他疑问或者更多想要了解的内容,欢迎留言告诉我。也欢迎你点击“请朋友读”,把今天的内容分享给身边的朋友,邀请他一起学习。