服务端迭代需求的额外测试点-数据库升级测试

在软件开发过程中,服务端的迭代是很常见的。每一次迭代都会带来新的功能、优化或修复,然而,这些迭代也为测试工作带来了挑战。正常的服务端测试包括版本发布测试,冒烟测试,服务端的业务测试,服务故障演练,服务端的性能测试,安全测试,预发布测试等。针对迭代测试,除了以上的测试外,如果存在数据库升级情况,还得进行服务的数据升级测试,这就是服务端迭代需求需要进行的额外测试点,下面讲一下数据升级测试。
一.为什么要进行数据升级测试
现在主流的服务版本迭代升级的方法主要有两种:
- 停服升级:
停服升级就是在一段时间内功能不可用,在这段时间里,系统进行维护升级,常见的例子有游戏公司的停服更新,比如王者荣耀,一般会在半夜进行停服更新,在这段时间里我们是打不了游戏的,必须过了这段时间,等待服务升级迭代完成我们才可以进入游戏。
这种停服升级的优点是数据库不用满足版本兼容,停服升级时,由于服务已经停止运行,开发团队可以对数据库进行全面的改造和迁移,而不需要考虑在升级过程中要同时兼容旧版本的数据库结构。这使得数据库的升级可以采用最直接、最有效的方式。例如,在关系型数据库升级中,可以直接对表结构进行修改,如增加新的列、修改数据类型或者重新设计表之间的关系,而不用担心这些变化会立即影响到正在运行的服务。
但是这种停服升级的缺点也很明显,就是会导致线上客户端一定的不可用时长,而现实情况是,这种升级方式并不适合大多数的业务场景,比如微信业务,是用户不可接受的,所以平滑升级就是非常必要的方式。 - 平滑升级:
它不影响历史数据,允许系统在不中断服务或尽量减少服务中断时间的情况下,从旧版本升级到新版本。与停服升级不同,平滑升级旨在保持系统的可用性,让用户在升级过程中能够持续地访问和使用系统的大部分功能。比如对于依赖在线服务获取收入的企业,如电商平台、在线广告平台等,停服升级可能会导致交易中断,进而造成收入损失。平滑升级能够保持交易的正常进行,确保企业的收入流不会因为升级而出现断层。
平滑升级数据库的兼容性至关重要。由于系统不能停止服务,数据库需要在支持旧版本应用的同时,逐步过渡到新版本的结构和数据格式。这通常需要通过数据库迁移工具、数据转换脚本和版本兼容性策略来实现。相应的,这对于测试来说也是至关重要的,需要测试数据库的向上兼容和向下兼容,那么如何进行测试呢?
二.如何进行数据升级测试
-
介入时机:
遇到版本迭代时,如果存在数据升级情况,后端服务提测后先进行数据测试再进行冒烟测试。冒烟测试主要关注系统的核心功能是否能够正常运行。然而,这些核心功能的正常运行很大程度上依赖于数据的正确性。如果数据测试没有先进行,在冒烟测试过程中发现功能问题,很难判断是功能代码本身的问题还是数据问题导致的。例如,在一个内容管理系统中,如果文章数据在升级后格式错误,那么在冒烟测试文章发布功能时,就无法确定是发布功能代码异常还是数据格式问题导致发布失败。 -
前置工作:
准备好旧版本的被测服务和旧版本的数据库测试环境
准备一定的旧版本测试数据 -
测试内容:
-
服务升级执行:
在启动升级之前,务必对当前运行的服务及其相关数据进行全面备份。这包括数据库数据、配置文件、日志文件等。备份的目的在于,若升级过程中出现意外情况,能够迅速恢复到升级前的状态,最大限度减少业务中断和数据损失。例如,对于一个大型电商平台,其数据库存储了海量的商品信息、用户订单和交易数据。一般可以根据开发所提供的服务发版流程执行。 -
服务升级完成以后(数据库需要满足版本的向下兼容):
服务升级完成以后,数据库需要满足版本的向下兼容。要校验旧数据的影响,需要专门设计旧数据的测试用例,用例包括旧数据的更新、删除、查询,确保在新数据库使用旧数据时这些操作能够正常执行且结果正确。例如,对于一个数据查询功能,在升级前后分别执行相同的查询条件,验证返回的结果集是否一致,包括数据的完整性、准确性和排序方式等。 -
服务升级校验后可以直接进行冒烟测试:
冒烟测试作为一种快速的初步测试,主要目的是检查服务升级后核心功能是否能够基本正常运行。在服务升级校验通过后立即进行冒烟测试,可以及时发现升级过程中可能引入的严重问题,避免在后续更深入的测试中浪费大量时间和资源。例如,对于一个在线支付服务,冒烟测试可以快速检查用户登录、支付流程的基本环节是否正常,如能否正确输入支付金额、选择支付方式并成功提交支付请求等。 -
回滚机制校验(数据库需要满足版本的向上兼容):
详细验证回滚机制的整个流程,包括回滚触发条件、回滚操作的执行步骤、回滚过程中的数据完整性保护以及回滚完成后的服务状态检查等。我们测试的时候根据开发提供的回滚流程执行。
回滚机制校验时,数据库需要满足版本的向上兼容,即回滚后的旧版本数据库能够正确使用升级过程中可能已经被修改过的数据。验证新版本的数据在旧版本数据库中是否能正常运行或者旧版本升级成新版本的数据在旧版本数据库下是否能正常运行。例如,若在升级过程中对数据库表添加了新的字段,回滚后旧版本数据库应能忽略该新字段或在不影响其正常功能的情况下处理数据,
三、服务的数据升级测试可保证的质量
主要确保历史版本数据不受到版本升级的影响。
通过全面而细致的数据升级测试,可以有效地确保历史版本数据在服务版本升级过程中不受影响,从而为用户提供稳定、可靠的服务体验,保障业务的持续健康发展。在服务端迭代需求里,需要额外重点测试。