背景

项目中当开完成新版本,比如说v_x.0.1的开发,如果需要进行环境部署,需要考虑线上环境的部署方式,而不是直接找一台新的服务器部署v_x.0.1服务即可,通常会有这两种升级方案

  • 停服升级

通过nginx或网关将客户端对外的入口流量权重配置为0,这时遇到新的用户访问会被拒绝处理,比方说web页面返回5XX状态码。

具体停服升级的过程:

  1. 客户端流量权重调配为0

  2. 检查服务是否存在未处理完成的请求(查看日志、数据库)

  3. 通过kill -9等实例下线方式进行进行服务资源回收

  4. 升级数据库(字段更新、表更新、历史数据处理、增量数据处理)

  5. 直连物理机部署v_x.0.1服务/应用 或者 通过云原生平台进行容器化应用的部署

  6. 客户端流量权重调配为100%

优势:可以满足各种兼容性问题的升级方案

劣势:影响用户在指定时间段的应用使用

  • 平滑升级(滚动升级)

会在新的容器或物理机部署新版本服务,再进行旧版本的实例回收。

具体升级过程:

  1. 先进行数据库升级

  2. 准备新的物理机或容器部署新版本服务

  3. 通过客户端的流量权重控制将流量全量转发到新版本

  4. 检查旧版本服务是否存在未处理的业务数据

  5. 旧版本服务实例/容器回收

优势:不影响线上用户的正常使用

劣势:数据库、服务需要满足向上兼容、向下兼容

测试面

测试的形式:测试用例文档、word编写专项测试方案

服务部署文档/升级文档内容:

  • 项目背景

  • 源码信息(代码分支信息、代码仓库路径)

  • 改动点、影响面

  • 部署流程

    • 项目包拉取

    • 数据库sql脚本

    • 依赖项启动

    • 启动配置项修改

    • 执行方法(java -jar、go、sh、流水线执行)

  • 回滚方案

测试关注点:历史数据能否在新版本下正常运行,新版本数据在服务回滚后是否能够在旧版本下正常运行,是否能根据开发所提供的升级文档实现版本迭代。

测试手段:

  1. 编写数据升级测试策略和具体的测试用例,并进行评审。

  2. 评估存在版本迭代需求,后端服务提测,测试可以开始介入进行数据升级测试。

  3. 前置准备好服务器搭建上一个版本的被测项目。

  4. 围绕测试用例构建历史数据。(用例前置)

  5. 根据开发提供的部署文档完成服务升级。(文档正确性)

  6. 验证历史数据是否能够向下兼容。(用例执行)

  7. 构建新版本的业务数据。(用例前置)

  8. 回滚策略校验。(文档正确性)

  9. 验证新版本业务数据是否能够向上兼容。(用例执行)

策略优先级:高

用例设计:

需要先提炼业务的核心数据类型,每种类型都需要针对性设计版本迭代的测试用例

  1. 历史数据能够在新版本正常使用:

注意:历史数据需要覆盖所有业务逻辑的数据

【前置】准备好历史版本的数据

【操作步骤】

用例1:在新版本,找到历史数据的业务查询入口,进行数据查询

用例2:在新版本,找到历史数据的业务更新入口,进行数据更新

用例3:在新版本,找到历史数据的业务删除入口,进行数据删除

【期望】

历史业务数据可以在新版本正常处理

  1. 新版本数据能够在历史版本正常使用:

注意:新版本数据需要覆盖所有业务逻辑的数据

【前置】准备好新版本版本的数据

【操作步骤】

用例1:在回滚到历史版本,找到数据的业务查询入口,进行新版本数据查询

用例2:在回滚到历史版本,找到数据的业务更新入口,进行新版本数据更新

用例3:在回滚到历史版本,找到数据的业务删除入口,进行新版本数据删除

【期望】

新版本业务数据可以在历史版本正常处理