# 性能测试基础（四）吞吐量



<br>
我们每天的生活中都在用水用电，如果我们把水龙头拧到最大，还是一滴水不出。那我们就会找物业/房东去询问情况，但一般不会想过去找自来水公司解决。我们每天都会上网，看电影很卡，需要等很久才缓冲一个几帧；打开网页很慢，IE状态条一直50%，那我们就会找电信服务器商，而不是某视频网站的客服。

以上的情况是正常的，这是生活常识。我想说明的是，你可能从来不关心一个自来水厂供应多少水，但供应多少水对一个自来厂来说却非常重要。你也可能从来不关心一个系统的吞吐量，但吞吐量对一个系统来说却非常重要。

![](http://img.testclass.net/throughput.png)

__吞吐量__

指在一次性能测试过程中网络上传输的数据量的总和。

对于交互式应用来说，吞吐量指标反映的是服务器承受的压力，在容量规划的测试中，吞吐量是一个重点关注的指标，因为它能够说明系统级别的负载能力，另外，在性能调优过程中，吞吐量指标也有重要的价值。如一个大型工厂，他们的生产效率与生产速度很快，一天生产10W吨的货物，结果工厂的运输能力不行，就两辆小型三轮车一天拉2吨的货物，比喻有些夸张，但我想说明的是这个运输能力是整个系统的瓶颈。

但是，用吞吐量来衡量一个系统的输出能力是极其不准确的，用个最简单的例子说明，一个水龙头开24小时，流出10吨水；10个水龙头开1秒钟，流出0.1吨水。当然是一个水龙头的吞吐量大。你能说1个水龙头的出水能力远超10个水龙头？所以，我们要加单位时间的限制，每秒/出水量，这就引出了一个新的概念--吞吐率。


__吞吐率__

单位时间内网络上传输的数据量，也可以指单位时间内处理客户请求数量。它是衡量网络性能的重要指标，通常情况下，吞吐率用“字节数/秒”来衡量，当然，你可以用“请求数/秒”和“页面数/秒”来衡量。其实，不管是一个请求还是一个页面，它的本质都是在网络上传输的数据，那么来表示数据的单位就是字节数。

但是从业务的角度看，吞吐率也可以用“业务数/小时”、“访问人数/小时”、“页面访问量/小时”来衡量。例如，在银行卡审批系统中，可以用“千件/小时”来衡量系统的业务处理能力。那么，从用户的角度，一个表单提交可以得到一次审批。这又引出来一个概念---事务。


__事务__

就是用户某一步或几步操作的集合。不过，我们要保证它有一个完整意义。比如用户对某一个页面的一次请求，对某系统的一次登录，对商品的一次确认支付过程。这些我们都可以看作一个事务。那么如何衡量服务器对事务的处理能力。又引出一个概念----TPS

* TPS (Transaction Per second) 

每秒钟系统能够处理事务或交易的数量，它是衡量系统处理能力的重要指标。

* 点击率（Hit Per Second）

点击率可以看做是TPS的一种特定情况。点击率更能体现用户端对服务器的压力。TPS更能体现服务器对客户请求的处理能力。

每秒钟用户向Web服务器提交的HTTP请求数。这个指标是Web 应用特有的一个指标；Web应用是“请求---响应”模式，用户发一个申请，服务器就要处理一次，所以点击是Web应用能够处理的交易的最小单位。如果把每次点击定义为一个交易，点击率和TPS就是一个概念。容易看出，点击率越大。对服务器的压力也越大，点击率只是一个性能参考指标，重要的是分析点击时产生的影响。

需要注意的是，这里的点击不能简单的看作鼠标的一次“单击”操作，也许一次“单击”操作中，客户端可能向服务器发现多个HTTP请求。

<br>
__吞吐量指标的作用：__

再次将话题回归到吞吐量上，在我们的性能测试中查看吞吐量对我们的测试有什么意义呢。

1. 用于协助设计性能测试场景，以及衡量性能测试场景是否达到了预期的设计目标：在设计性能测试场景时，吞吐量可被用于协助设计性能测试场景，根据估算的吞吐量数据，可以对应到测试场景的事务发生频率，事务发生次数等；另外，在测试完成后，根据实际的吞吐量可以衡量测试是否达到了预期的目标。

2. 用于协助分析性能瓶颈：吞吐量的限制是性能瓶颈的一种重要表现形式，因此，有针对性地对吞吐量设计测试，可以协助尽快定位到性能瓶颈的所在位置。

<br>
__扩展：__

RBI（rapid bottleneck identify）

是Empirix公司提出的快速识别系统性能瓶颈的方法。该方法基于以下事实。

    1. 发现的80%系统的性能瓶颈都由吞吐量制约；

    2. 并发用户数和吞吐量瓶颈之间存在一定的关联；

    3. 采用吞吐量测试可以更快速定位问题。 

通过不断增加并发用户数和吞吐量观察系统的性能瓶颈。然后，从网络、数据库、应用服务器和代码本身4个环节确定系统的的性能瓶颈。




原始封面

![课程图片](https://images.unsplash.com/photo-1435265603574-177a37a94c2f?w=300)


