一、聊聊背景
传统的测试流程中,我们一般关注的点在于功能
,采用手动的方式来检验被测应用程序的功能逻辑是否符合预期,并构建异常场景来检验被测应用程序是否有对异常场景做相关处理。但往往通过功能测试,只能发现常规的程序缺陷,无法发现基于服务端层面异常的缺陷,在某些特殊场景下,许多问题就会暴露在用户面前,对用户造成不好的体验。所以在测试过程中,针对服务端进行测试已经逐渐成为必要的测试流程。
二、什么是服务端测试
服务端测试
是指对服务端应用程序进行的一系列测试活动,旨在验证和评估服务端应用程序的功能、性能和可靠性。通过对服务端代码进行系统性的测试,开发团队能够发现潜在的问题和缺陷,并确保软件在生产环境中的高质量运行。包括对后端逻辑、数据库、API、中间件等组件的测试。
服务端测试的主要目的
是验证服务器能否正常处理客户端请求,并返回正确的响应,从而发现和修复服务器端的错误,确保服务器能够在各种条件下有效地为客户端提供服务。
服务端测试的类型包括但不限于:
- 接口测试:这是服务端测试中常见的一种类型,主要针对API进行测试,确保接口的功能、性能和安全性符合预期。
- 异常测试:模拟各种异常情况,如硬件异常、网络异常或系统异常,验证服务器在这些极端情况下的表现。
- 稳定性测试:模拟系统在长时间运行下的表现,通过持续的压力测试来验证系统的稳定性。
- 性能测试:评估服务器在不同负载和压力条件下的性能表现,包括负载测试、压力测试、配置测试等。
三、当前团队没有落地服务端测试时的痛点
-
在大多数项目开发中,通常会用到许多
中间件
,如Kafka、Redis、MQ等,用于处理服务间的解耦和模块化,或是相关功能的扩展和增强,旨在实现某些功能或基于功能提高运行的性能和效率,若只进行功能测试,当中间件出现异常时,我们就无法保障应用的正常运行。 -
比如说,现在有一个电商项目的后台,订单模块接入了第三方物流查询服务,而第三方服务我们是无法对其进行详细测试的,这种情况下如果我们只做了功能测试,那只能保障第三方服务正常时我们项目的正常运行,无法判断当
第三方服务
出现异常时,我方应用程序是否正常使用。 -
以往的功能测试流程,是需要等到前后端联调完成后整体提测,我们才能介入,如果前后端对于需求的理解有误,这时候我们发现问题、反馈问题,看似是正常的流程,但如果这是一个相对复杂的功能点,对于开发和项目进度来说,
修复成本
是极高的,甚至可能需要推翻原本的技术设计,重新写一版。
四、服务端测试的价值
- 践行
测试左移
,能够更早介入测试,更早的发现问题; - 测试维度的
颗粒度
更细,能发现更多的问题,场景覆盖相对于功能测试更齐全; 测试效率
更高,能够通过编程能力挖掘业务造数据痛点并解决;- 实现自动化测试减少执行耗时,性价比高,真正做到
提质提效
; - 服务端测试远比功能测试更理解底层服务的实现,如果遇到问题,能够更快速
更精准
地发现问题。
五、举个栗子
简单的查询流程图(Redis)
这里我们接入了Redis
用于提高查询的性能,构造缓存之后查询的速度有了明显的提高,那我们如何保障缓存构造的正确性呢?如何检验诸如以下这些情况呢?
- 缓存采用了相同的过期时间,在同一时间,大批量的缓存失效,这时候大批量用户发起请求,是否会造成缓存雪崩;
- 缓存中的数据没有人查询过,第一次查询就大并发地访问,是否造成缓存击穿;
- 重启Redis服务后,请求查询返回的数据是否正确。
- …
很明显,通过点点点我们是无法覆盖到这些的。这时候服务端测试的价值
就可以体现出来,我们可以通过模拟各种异常场景来构建缓存,再通过模拟出对应场景的用户行为来检验服务的状态。若是在测试阶段,我们就已经考虑并校验这些场景,到了生产环境,我们才会有对应的保障或修复机制,而不至于在出现问题后才后知后觉。