<audio id="audio" title="加餐 | 推荐几款常用的性能测试工具" controls="" preload="none"><source id="mp3" src="https://static001.geekbang.org/resource/audio/af/c0/afcc5d1c597fd4c852565dff3478d6c0.mp3"></audio>

你好，我是刘超。很多同学给我留言想让我讲讲工具，所以我的第一篇加餐就光速来了～

熟练掌握一款性能测试工具，是我们必备的一项技能。他不仅可以帮助我们模拟测试场景（包括并发、复杂的组合场景），还能将测试结果转化成数据或图形，帮助我们更直观地了解系统性能。

## 常用的性能测试工具

常用的性能测试工具有很多，在这里我将列举几个比较实用的。

对于开发人员来说，首选是一些开源免费的性能（压力）测试软件，例如ab（ApacheBench）、JMeter等；对于专业的测试团队来说，付费版的LoadRunner是首选。当然，也有很多公司是自行开发了一套量身定做的性能测试软件，优点是定制化强，缺点则是通用性差。

接下来，我会为你重点介绍ab和JMeter两款测试工具的特点以及常规的使用方法。

### 1.ab

ab测试工具是Apache提供的一款测试工具，具有简单易上手的特点，在测试Web服务时非常实用。

ab可以在Windows系统中使用，也可以在Linux系统中使用。这里我说下在Linux系统中的安装方法，非常简单，只需要在Linux系统中输入yum-y install httpd-tools命令，就可以了。

安装成功后，输入ab命令，可以看到以下提示：

<img src="https://static001.geekbang.org/resource/image/ac/0a/ac58706f86ebd1d7349561ae501fca0a.png" alt="">

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&amp;password=test&amp;sex=1

```

**附上几个常用参数的含义：**

- -n：总请求次数（最小默认为1）；
- -c：并发次数（最小默认为1且不能大于总请求次数，例如：10个请求，10个并发，实际就是1人请求1次）；
- -p：post参数文档路径（-p和-T参数要配合使用）；
- -T：header头内容类型（此处切记是大写英文字母T）。

当我们测试一个get请求接口时，可以直接在链接的后面带上请求的参数：

```
ab -c 10 -n 100 http://www.test.api.com/test/login?userName=test&amp;password=test

```

输出结果如下：

<img src="https://static001.geekbang.org/resource/image/66/9b/66e7cf2dafa91a3ae80405f97a91899b.png" alt="">

**以上输出中，有几项性能指标可以提供给你参考使用：**

- 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文件，双击运行该文件就可以了。

<img src="https://static001.geekbang.org/resource/image/2d/53/2d96660e8e88a2697e066fd301663153.png" alt="">

JMeter的功能非常全面，我在这里简单介绍下如何录制测试脚本，并使用JMeter测试业务的性能。

录制JMeter脚本的方法有很多，一种是使用Jmeter自身的代理录制，另一种是使用Badboy这款软件录制，还有一种是我下面要讲的，通过安装浏览器插件的方式实现脚本的录制，这种方式非常简单，不用做任何设置。

首先我们安装一个录制测试脚本的插件，叫做BlazeMeter插件。你可以在Chrome应用商店中找到它，然后点击安装， 如图所示：

<img src="https://static001.geekbang.org/resource/image/a8/3e/a8f7403c1b6b720318d97accf191843e.png" alt="">

然后使用谷歌账号登录这款插件，如果不登录，我们将无法生成JMeter文件，安装以及登录成功后的界面如下图所示：

<img src="https://static001.geekbang.org/resource/image/29/4a/2932afaf9eecb2cce789ad5151180a4a.png" alt="">

最后点击开始，就可以录制脚本了。录制成功后，点击保存为JMX文件，我们就可以通过JMeter打开这个文件，看到录制的脚本了，如下图所示：

<img src="https://static001.geekbang.org/resource/image/bf/fd/bf03e37ace494cf84171b55f9b63bdfd.png" alt="">

这个时候，我们还需要创建一个查看结果树，用来可视化查看运行的性能结果集合：

<img src="https://static001.geekbang.org/resource/image/84/69/844a2a65add49c2f4d15b10667943069.png" alt="">

设置好结果树之后，我们可以对线程组的并发用户数以及循环调用次数进行设置：

<img src="https://static001.geekbang.org/resource/image/43/9b/431ae410ec4369cc81af7622a23b409b.png" alt="">

设置成功之后，点击运行，我们可以看到运行的结果：

<img src="https://static001.geekbang.org/resource/image/6f/67/6ffe85677e50bb75152d45526a7ba667.png" alt="">

JMeter的测试结果与ab的测试结果的指标参数差不多，这里我就不再重复讲解了。

### 3.LoadRunner

LoadRunner是一款商业版的测试工具，并且License的售价不低。

作为一款专业的性能测试工具，LoadRunner在性能压测时，表现得非常稳定和高效。相比JMeter，LoadRunner可以模拟出不同的内网IP地址，通过分配不同的IP地址给测试的用户，模拟真实环境下的用户。这里我就不展开详述了。

## 总结

三种常用的性能测试工具就介绍完了，最后我把今天的主要内容为你总结了一张图。

<img src="https://static001.geekbang.org/resource/image/a7/1a/a70d0081607081471df4db435641b51a.jpg" alt="">

现在测试工具非常多，包括阿里云的PTS测试工具也很好用，但每款测试工具其实都有自己的优缺点。个人建议，还是在熟练掌握其中一款测试工具的前提下，再去探索其他测试工具的使用方法会更好。

今天的加餐到这里就结束了，如果你有其他疑问或者更多想要了解的内容，欢迎留言告诉我。也欢迎你点击“请朋友读”，把今天的内容分享给身边的朋友，邀请他一起学习。


