HTTP性能测试

导语

由于我们公司用户数量庞大,在服务上线之前,性能测试必不可少。本文主要介绍性能测试的流程,需要关注的指标,性能测试工具Apache bench的使用,以及常见的坑。

什么是性能测试

性能测试是通过自动化的测试工具模拟多种正常、峰值以及异常负载条件来对系统的各项性能指标进行测试。负载测试和压力测试都属于性能测试,两者可以结合进行。通过负载测试,确定在各种工作负载下系统的性能,目标是测试当负载逐渐增加时,系统各项性能指标的变化情况。压力测试是通过确定一个系统的瓶颈或者不能接受的性能点,来获得系统能提供的最大服务级别的测试。

性能测试的目标是什么

性能测试最终的目的,是找到系统的瓶颈,一般来说,是找到服务单机最大TPS(每秒完成的事务数)。

需要注意的是,服务的TPS需要结合请求平均耗时来综合考虑。例如:服务TPS压到1000,平均请求耗时500ms,但是假如我们定的服务请求耗时不能超过200ms,那么这个1000的TPS是无效的。

很多场景下,服务都会设置超时时间,若平均耗时超过此超时时间,则可认为服务处于不可用状态。

什么时候需要性能测试

1、功能测试完成之后,上线之前

正常情况下,上线之前,都应该进行性能测试,尤其是请求量较大的接口,重点业务的核心接口,以及直接影响用户操作流程的接口。

2、各种大促,运营活动开始之前

大促,运营活动,都会导致流量激增,因此上线之前做好压力测试,评估系统性能是否满足预估流量,提前做好准备。

举个反面例子:某品牌电商,年年大促年年挂。

再来个正面的例子:每年双十一之前,阿里都会有全链路压测,各个业务自己也会有独立的压测,阿里在这块做得还是非常不错的。

怎么做性能测试

常见的http性能测试工具

httpload

wrk

apache bench

最终我们选择apache bench。

看上去wrk才是最完美的,但是我们却选择了ab。我们验证过各种工具请求数据是否准确,压测的时候,通过后台日志记录,最终得出结论,ab的请求数误差在千分之二左右,而其他两个工具在千分之五左右。

不过不得不说,wrk的确是一款非常优秀的压测工具,采用异步IO模型,能压到非常高的TPS。曾经用空逻辑接口压到过7w的TPS,而相同接口,ab只能压到2w多。

apache bench的使用

前面已经给了一个简单的例子了,下面详细介绍下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,获取更多测试干货!

原文发布于微信公众号 - 腾讯移动品质中心TMQ(gh_2052d3e8c27d)

原文发表时间:2018-03-15

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

编辑于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏云计算D1net

云计算时代的数据库运行

云计算时代的高可用数据库是可扩展、容错且与任何私有云或公共云兼容的数据库实例。它们旨在提供业务连续性,而不会因任何类型的硬件或网络故障而导致用户体验的影响。其核...

1425
来自专栏北京马哥教育

如何构建高扩展性网站?

本篇通过阅读《高扩展性网站的50条原则》,总结出以下内容。   一方面博主没有实际的架构经验,另一方面知识面也不够宽阔,所以只能系统的总结书中的要点,并根据自...

3084
来自专栏娱乐心理测试

IOS 上传到后台json数据

1593
来自专栏嵌入式程序猿

这只电子狗跑哪里去了,快找

最新新换了批电脑,所有的开发软件都要重装,其中在IAR安装完,license激活后,打开软件时总是提示找不到dongle,导致项目无法编译,我用的是8.20版本...

1082
来自专栏技术翻译

如何可视化和理解MongoDB数据

为应用程序选择数据库可能是一个真正的挑战。不同的数据库设计服务于不同的目的,在这种情况下,由于他们的僵化模式和对数据类型的约束,关系数据库不能完全满足开发人员的...

2130
来自专栏阿凯的Excel

Excel插件大放送~

当你面对姓名电话拆分电话的时候,你会怎么做? 是Right函数? ? 还是智能填充? ? 抑或这样? ? 或者这样? ? 当你想要把人员信息按照部门进行拆...

4766
来自专栏云计算D1net

混合云和多云管理不再难:基础架构即代码来帮忙

随着运维流程变得越来越灵活,IT团队面临着越来越大的复杂度。当应用动态改变时,可以使用敏捷或者持续应用开发。但是当IT资源本身动态变化的时候怎么办呢多云和混合云...

3807
来自专栏IT大咖说

Web持续集成工作实践

摘要 如果团队开发成员经常集成他们的工作,每个成员每天至少集成一次,也就意味着每天可能会发生多次集成。每次集成都通过自动化的构建来验证,从而尽快地发现集成错误。...

4116
来自专栏编程

大型分布式服务器架构原理解析

作为技术人员,我们都知道:几乎所有的项目,都是由简单到复杂,从单一服务器到集群服务器进行开发。但又有多少人知道这其中的技术原理呢?其实,这并不是那么深奥难懂。那...

3669
来自专栏xingoo, 一个梦想做发明家的程序员

如何构建高扩展性网站?

本篇通过阅读《高扩展性网站的50条原则》,总结出以下内容。 一方面博主没有实际的架构经验,另一方面知识面也不够宽阔,所以只能系统的总结书中的要点,并根据自己...

2315

扫码关注云+社区