什么是性能测试?简单的说就是以一定的手段或方式,寻找或验证目标在不同条件下完成服务的能力。负载测试和压力测试都是性能测试的一部分。
进行性能测试,一定要有预期的目的,再根据目的和服务的特性,确定具体的方案并执行,得到可判断的性能指标。
总体上来说,性能测试一般有3大类目的:寻找性能瓶颈,验证性能是否满足需求,性能调优。从形式与关注方向上来说,又大致可以分为线下测试,线上测试,全链路测试3种。

01线下测试
一般因为条件的限制,多采用线下单机的形式进行性能测试。这种情况下,一般可测试单机的性能极限和瓶颈,单机性能最优场景指标,或者评估最优配置(即调优的一部分)。
测试环境通常按照与线上机器配置一样的单台服务器部署服务,引擎,数据库等。
测试方法常用性能压测工具jmeter来进行测试。这个工具对于各种协议支持较好,线程组,参数,上下文操作也比较全面。如果有特殊需求,jmeter也提供了java sampler的方式来自定义扩展脚本测试。
测试数据则来源于模拟,Mock或者线上数据的拷贝。
因为是线下测试,就不会污染线上环境,也不会影响用户的正常使用。
因此可以总结其优点是实现简单,风险低,能发现一定的问题,但缺点也与其相对—调用场景与线上不一致,复杂环境无法验证,数据的真实性不够,上下链路问题的遗漏。
02线上测试
当条件允许,或者有必要需求的时候,可能进行线上测试。常见的线上测试目的大概分为3种:容量评估,单机极限,集群极限。
环境是线上环境的一部分,常见方式是将某个机房作为测试的环境。为了不影响正常用户的使用,可能需要做数据隔离,环境隔离,加上压测表识区分测试流量等。
测试方案-只读请求,可以如线下一样进行压测。需要读写的则可以通过引流的方式进行。通过nginx proxy,负载权重,tcpcopy等方式,将线上流量引入指定环境。从量的级别上可以全量,指定接口,指定url,或者按一定比例组合。
可以看到,场景,环境,数据等真实性是其优点,可以真确的评估线上的性能能力。但缺点也是显而易见的,线上环境的读写压力及风险,实现复杂,服务集群的成本也是相对高昂的。
03全链路测试
通过端到端的测试,发现整体环节中的网络,应用,中间件,存储各个环境的问题,找到性能瓶颈,极大提升系统能力,并保障全链路的稳定性。通过全部链路各个环节的性能评估,也可以为高峰期系统容量规划提供决策依据。
全链路压测投入非常巨大。首先环境是整体全套的线上环境,为了适配,分析,追踪数据,需要改造数据,服务功能,从前端到应用服务,中间件,到引擎,数据库等底端一切环节。
比如抽取基础数据,分析业务链路与模型,改造业务,测试数据隔离(建立影子表等方式),中间件改造(识别测试流量),建立安全机制-对于各环节的监控和保护,日志统一化,行为追踪,统计分析等等。
优点显而易见,缺点也不言而喻。涉及产品广,人员多,成本高,风险很大,如何有效的组织推进是很大的挑战,也需要很高层面的支持。但收益也是非常明显的。
以上介绍了一些测试的目的和方法。到底怎么做,还是需要因地制宜,根据需求而来。
本文作者简介:我秀中国物联网地图服务平台
我秀中国是一个最开放的物联网地图服务平台,以“高精度+定制+开放平台”为特征,满足汽车、智能终端、可穿戴设备、智能家居、工业设备、智能飞行器等的位置服务要求,帮助客户管理好智能设备采集的数据并与空间数据和时间相融合,以实现数据的最大价值,提升企业运营能力。
本文为原创文章,转载请注明作者,并附带作者简介。