0. 写在前面

  1. 每个公司、组织都有一套管控生产数据、测试数据的方法,这里总结一下我们当前用的一套模型,没有好坏,只有适合与否。请大家批评指正。

1. 环境概述

  1. 按照测试流程中的测试种类,整个测试环境分为IX、SX、TX和Stage四种类别(X>0),其中IX、SX是用作接口测试、系统设计测试(功能测试)的环境,TX是性能测试环境,Stage测试环境是集成测试环境;回归测试贯穿于所有测试环节,当前测试环节在哪个环境,对应的回归验证就在哪个环境。

  2. 环境类别举例

    试环境标签 对应的测试环节
    X环境,SX环境 接口测试,系统设计测试
    X环境 性能测试
    tage环境 集成测试
  3. 具体的流程图如下:
    测试环境,数据初始化流程介绍

2. 数据源的准备

  1. 这里的数据源,是指初始化测试环境的基础数据;接口测试、性能测试需要批量造的数据不在这个范围之内。
  2. 为了尽量模拟生产环境的测试场景,我们选择从生产环境dump一份数据下来,作为测试数据源的一部分;鉴于对数据安全性的考虑,这部分数据需要经过脱敏处理,去除掉有关用户或者公司机密的关键性数据。
  3. 在这份数据的基础上,由测试人员再根据实际需要,额外增加一部分测试基础数据,这样整合成最初的初始化数据源。
  4. 不选择每次都从生产环境restore数据到测试环境的原因,一是避免过多地操作生产环境数据库;二是生产环境数据restore到测试环境,再脱敏,太繁琐;最后是restore完了,每一个环境都要重新造一些自己需要的基础数据。

3. 数据源的持续更新

  1. 初始化数据源具有时间局限性,但是功能是不断新增和迭代的,所以我们的初始化数据源需要持续更新,以满足测试需要。
  2. 为了节约持续更新数据源的成本,我们选择在集成测试阶段,把集成测试的数据沉淀到初始化数据源,一方面是的考虑是,在集成测试阶段,测试数据量不会太大(在前期测试中,为了覆盖各种分支,会造大量的验证数据);另一方面是集成测试时,数据流向比较完整(前期测试时,测试数据都是针对各个story的,story之间的数据不具备一致性)。

4. 数据restore的流程

  1. 先上一个完整的流程图:
    测试环境,数据初始化流程介绍
  2. 解释下整体流向:
    1. 通过触发"xxx-sample-db-restore",将生产环境的数据dump到Stage环境,形成初始化数据源的一部分;
    2. 集成测试产生的Test Data沉淀到Stage环境,形成初始化数据源;
    3. 通过定时任务触发“xxx-sample-db-backup”,将Stage的数据备份为初始化数据源的数据备份;
    4. 通过触发“xxx-db-restore”,将步骤3中的数据源备份,初始化到每一个测试环境。
  3. Restore流程步骤1执行的时间根据当前项目的需要,决策是否执行,成本是restore后,当前库的数据会被初始化成跟生产库一样,持续更新的数据丢失;
  4. 流程步骤3在每天凌晨定时跑,将新产生的数据备份到初始化数据源。

5 后记

  1. 这里这是指基础测试数据,不包括测试执行过程中需要造的数据;
  2. 测试环境和生产环境的所有测试数据,都应遵循一定的规范,这里不加赘述,有时间另开一篇小结讨论一下。
  3. 测试环境的数据重置会影响到所有人员,不论何种类型的数据变更,都应尽量通知相关干系人,避免或减少对他人的影响。

相关文章: