由于我们公司用户数量庞大,在服务上线之前,性能测试必不可少。本文主要介绍性能测试的流程,需要关注的指标,性能测试工具 Apache bench 的使用,以及常见的坑。
性能测试是通过自动化的测试工具模拟多种正常、峰值以及异常负载条件来对系统的各项性能指标进行测试。负载测试和压力测试都属于性能测试,两者可以结合进行。通过负载测试,确定在各种工作负载下系统的性能,目标是测试当负载逐渐增加时,系统各项性能指标的变化情况。压力测试是通过确定一个系统的瓶颈或者不能接受的性能点,来获得系统能提供的最大服务级别的测试。
性能测试最终的目的,是找到系统的瓶颈,一般来说,是找到服务单机最大 TPS(每秒完成的事务数)。
需要注意的是,服务的 TPS 需要结合请求平均耗时来综合考虑。例如:服务 TPS 压到 1000,平均请求耗时 500ms,但是假如我们定的服务请求耗时不能超过 200ms,那么这个 1000 的 TPS 是无效的。
很多场景下,服务都会设置超时时间,若平均耗时超过此超时时间,则可认为服务处于不可用状态。
1、功能测试完成之后,上线之前。
正常情况下,上线之前,都应该进行性能测试,尤其是请求量较大的接口,重点业务的核心接口,以及直接影响用户操作流程的接口。
2、各种大促,运营活动开始之前。
大促,运营活动,都会导致流量激增,因此上线之前做好压力测试,评估系统性能是否满足预估流量,提前做好准备。
举个反面例子:某品牌电商,年年大促年年挂。
再来个正面的例子:每年双十一之前,阿里都会有全链路压测,各个业务自己也会有独立的压测,阿里在这块做得还是非常不错的。
httpload
wrk
** apache bench**
最终我们选择 apache bench。
看上去 wrk 才是最完美的,但是我们却选择了 ab。我们验证过各种工具请求数据是否准确,压测的时候,通过后台日志记录,最终得出结论,ab 的请求数误差在千分之二左右,而其他两个工具在千分之五左右。
不过不得不说,wrk 的确是一款非常优秀的压测工具,采用异步 IO 模型,能压到非常高的 TPS。曾经用空逻辑接口压到过 7w 的 TPS,而相同接口,ab 只能压到 2w 多。
前面已经给了一个简单的例子了,下面详细介绍下 ab 的使用。
如何安装?
如果 docker 容器已经安装的 apache,那么恭喜,ab 是 apache 自带的一个组件,不用重新安装了。当然,也可以自己单独安装 apache bench。
ab 常用参数介绍:
测试报告应该包含以下内容。当然,根据场景不同,可以适当增减指标,例如有的业务要求关注 cpu,内存,IO 等指标,此时就应该加上相关指标。
(1)AB 发送的是 http1.0 请求。
(2)-t 可以指定时间,-n 指定发送请求总数,同时使用时压测会在-t 秒或者发送了-n 个请求之后停止。但是-t 一定要在-n 之前(ab 的 bug,-n 在-t 之前最多只会跑 5s)。
(3)为了使测试结果更可靠,单次压测时间应在 2 分钟以上。
理论上,压测时间越长,结果误差越小。同时,可以在瓶颈附近进行长时间压测,例如一个小时或者一天,可以用来测试系统稳定性。许多系统的 bug 都是在持续压力下才会暴露出来。
(4)小心压测客户端成为瓶颈。
例如上传,下载接口的压测,此时压测客户端的网络上行,下行速度都会有瓶颈,千万小心服务器还没到达瓶颈时,客户端先到了瓶颈。此时,可以利用多客户端同时压测。
(5)ab 可以将参数写入文件中,用此种方式可以测试上传文件的接口。
需要配合-p -t 使用:
文件内容如下:
那么,多客户端压测时,如何保证不同客户端压测节奏一致呢(同时开始,同时结束)?
欢迎大家留言讨论。
版权所属,禁止转载!
扫描下方二维码,关注微信公众号:腾讯移动品质中心 TMQ,获取更多测试干货!