内容简介:相信很多程序员在开发过程中或多或少的会基于开源库写过一些单元测试,类似 C++ 的 Google Test,Java 的 Juint 等。大分部情况下,程序员对系统的测试都只在系统的内部进行。但我们知道,一次完整的数据流不可能只在一个系统内流转。比如淘宝从买家下单到最终被收货,这一次完整交易的数据流要经过很多系统(ERP系统、仓库系统、配送系统、末端系统等)。这些系统之间通过调用串成一条条链路,交易数据在链路上进行流转。而对整个链路进行的测试称之为全链路测试,全链路测试可分为全链路功能测试和全链路性能测试。
相信很多 程序员 在开发过程中或多或少的会基于开源库写过一些单元测试,类似 C++ 的 Google Test,Java 的 Juint 等。大分部情况下,程序员对系统的测试都只在系统的内部进行。但我们知道,一次完整的数据流不可能只在一个系统内流转。比如淘宝从买家下单到最终被收货,这一次完整交易的数据流要经过很多系统(ERP系统、仓库系统、配送系统、末端系统等)。这些系统之间通过调用串成一条条链路,交易数据在链路上进行流转。而对整个链路进行的测试称之为全链路测试,全链路测试可分为全链路功能测试和全链路性能测试。
为什么需要全链路测试
只在系统内部做单元或者逻辑测试只能测试本系统内是否存在问题(当然测试是不能发现所有问题的),并不能知道整个链路是否有功能或者性能上的问题。所以我们需要跳出系统对整个链路进行测试,防止在大促的时候出现问题。下面以自己的亲身经历来说明为什么需要全链路测试。 起源,上一家公司所做的系统虽然不是电商。但是一次数据的流转也需要经过很多系统,很符合全链路的定义。数据流程主要如下:
Agent 采集数据->接入系统->分发系统->一次分析系统->二次分析系统->工单系统
系统的链路大致如上图所示,可以看到数据从 agent 采集到最终发工单给用户要经过很多系统。由于我们做的系统与安全有关,对数据的完整性要求很高,所以必须要保证整个链路上不能丢失数据。为了保证整个链路的可靠性,需要对链路的可用性进行测试。由于对于线上质量测试的不重视,部门对链路采用最简单的拨测方式进行测试。流程如下:
- 定时在测试机上用脚本构造有效的工单数据,一般在早中晚定时用脚本跑一次或者几次。
- 链路上涉及到的系统上报自己的日志到存储系统,方便后续定位。同时继续扭转数据到下一个系统。
- 查看最终是否能正确发出工单,如果没有测试工单转(4),否则结束此次拨测。
- 人工去日志存储系统进行日志查询,找到有问题的系统,再深入系统定位问题。
以上方法简单粗暴但存在很多弊端,比如
- 各种数据只能靠人工写不同的脚本在 agent 上构造数据,导致测试数据种类和数量非常有限。
- 出了问题需要人工一步步的查看链路中哪个系统没有上报日志,再去系统定位导致排查效率低。
- 每天只定时跑几次拨测存在一定的随机性,如果次数太多脚本又不好管理。
- 真实数据和测试数据混在一起,只能通过白名单进行最后的工单过滤。
但即便如此,拨测也提供了全链路测试的一种手段。如果没有拨测,全链路功能的可用性更无法预知。只能说拨测是全链路测试的一个雏形,离真正的全链路测试系统还有一定的距离。全链路测试需要一个系统化的平台,只要链路中的各个系统都接入平台,即可对系统内和系统间的链路进行测试。 一个理想的全链路压测平台应该为开发和测试提供从数据构造、用例管理、全链路场景组织、协助测试结果分析等一站式服务。
全链路测试平台需要提供的功能
可以看出以上链路还是比较短的,拨测还能勉强凑效。如果链路再长点、分支再多点呢?电商的业务一般具有链路长、分支多和周期久等特点。一般需要一个完整的全链路测试系统,它可以进行链路和节点的功能、性能测试。一个完整的全链路测试平台应该提供如下功能:
- 单元测试的管理功能:开发可能在一个系统中写了大量的单元测试,此功能可以提供开发对系统中单元测试的集中管理。
- 全链路压测功能:这是全链路测试中高阶部分,也是比较难的部分。主要是对全链路的性能进行测试。
- 链路场景组装功能:由于链路众多,可以为用户提供自定义的链路组装功能。不过平台要保证组成的链路场景的有效性。
- 提供测试来源数据:可以为测试用例提供大量的、模拟真实环境的测试数据。包括单元测试的数据来源、全链路测试的来源等。
- 定位分析功能:为开发定位和分析测试失败原因提供便利。
- 代码覆盖率统计:为每次的测试提供可视化的代码覆盖率报告,增加测试的可信度。
很多公司都已经有自己的压测系统或者平台:
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网
猜你喜欢:本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Java Concurrency in Practice
Brian Goetz、Tim Peierls、Joshua Bloch、Joseph Bowbeer、David Holmes、Doug Lea / Addison-Wesley Professional / 2006-5-19 / USD 59.99
This book covers: Basic concepts of concurrency and thread safety Techniques for building and composing thread-safe classes Using the concurrency building blocks in java.util.concurrent Pe......一起来看看 《Java Concurrency in Practice》 这本书的介绍吧!