51Testing软件测试论坛

 找回密码
 (注-册)加入51Testing

QQ登录

只需一步,快速开始

微信登录,快人一步

手机号码,快捷登录

查看: 1069|回复: 1

[原创] 深入探讨数据迁移测试:挑战与解决方案

[复制链接]
  • TA的每日心情
    无聊
    前天 09:04
  • 签到天数: 1030 天

    连续签到: 1 天

    [LV.10]测试总司令

    发表于 2024-8-30 13:32:13 | 显示全部楼层 |阅读模式
    相信很多同学在测试过程中会遇到新老系统数据迁移的情况,这时候就需要进行数据迁移的测试了,数据迁移测试是在数据从一个系统或环境迁移到另一个系统或环境时执行的测试过程。这种类型的测试旨在确保数据在迁移过程中的完整性、一致性、准确性和安全性。

    一.数据迁移面临的风险
    1. 迁移时间成本
    一般来说要进行数据迁移的系统都是大型甚至超大型的,这种情况下要迁移的数据都是数以亿计的,在生产环境的数据库上进行迁移,如果按照顺序迁移,则可能花费几个月甚至几年的时间,这是相当恐怖的。
    2. 迁移过程中服务是否停止
    很多系统都是要时刻为用户提供服务而产生效益,现在基本上所有的系统升级、版本迭代都是在线进行,你玩的王者和吃鸡游戏就是典型,如果停机去迁移维护那会导致很大的损失,所以迁移测试时也要尽量保证服务100%处于可用状态。
    3. 数据的正确性、可用性、一致性
    正确性:大家都知道老系统的很多代码都是直接使用数据库表中的数据,那么在迁移的过程中,要确保新系统也能取到对应的数据;
    可用性:无论是迁移前,迁移过程中还是钱以后,数据都是可用状态;
    一致性:在迁移过程中,要确保迁移过来的数据和旧系统的数据一致。

    二.迁移前的准备工作
    1. 确认此次迁移的范围
    这个工作很有可能是开发、运维和测试等众多角色参加,通过分析原有系统和现有系统的功能模块、大致的处理流程,分析两者的区别,以及历史数据对用户的影响程度等,在充分评估工作量及人力资源的情况下划定数据迁移的范围,因为对于大型项目来说,数据全部迁移花费的成本太大。
    2. 其次需要对比不同版本之间的区别
    如果你对整个项目模块不太清楚的(比如我就当过空降兵去临时支援一个项目数据迁移),这种情况可以让产品、项目经理,运营提供新老系统功能差异对照文档,包括迁移之后,每个版本相关的功能迁移成新版本之后对应的功能变化,以及数据要如何处理,这个也需要出一份文档,可以方便在迁移的时候,对照着文档进行测试,容易看出来新旧版本的差异。
    当时我们的数据迁移任务重,时间紧,加上人力相对较少,这里就必须要求我们用上一些工具和自动化脚本来加持,我这边也分享一些自己的心得:
    A.数据库对比工具:可以使用数据库对比工具来比较源数据库和目标数据库之间的数据差异。一些流行的数据库对比工具包括:Beyond Compare、WinMerge、SQL Data Compare等。
    B.数据校验框架:可以使用Python编写数据校验框架,用于对比源数据和目标数据之间的差异。例如,可以使用pandas库来加载源数据和目标数据,并进行数据比较和校验。
    C.数据校验脚本:可以使用Python脚本编写数据校验脚本,通过查询源数据库和目标数据库,对比数据差异并生成校验报告。


    1. 迁移前数据备份
    在迁移前将相关业务报表数据导出备份,后续迁移测试进行核对,开发也会将迁移前预埋数据库备份,预防迁移问题需回滚,这就好比你重装电脑系统前备份重要资料一个道理。

    三.迁移测试的执行流程
    1.需要熟悉迁移方案
    首先我们要知道此次迁移采用的是哪种迁移策略,是逐步迁移(Phased Migration),并行迁移(Parallel Run)还是实时迁移(Real-time Sync)?上线后,旧系统设备如何处理,是废弃还是继续使用。在数据并账方面,流程如何处理,账务如何迁移。在数据同步方面,了解同步时间策略和同步范围策略,是全量同步还是增量同步。
    举例:以购物商城系统为例,迁移总体技术方案采用编写迁移shell脚本,先在旧库建立与新库业务表相同字段的临时表,在旧库进行数据的筛选、加工至临时表,再将临时表中的数据导出成表数据文件,到oracle数据库使用sqlldr导入informix数据文件。存量数据一次性迁移,增量数据实时迁移方式进行迁移。迁移时点为日初后迁移,新系统上线后,旧系统依然在使用,故测试时不仅要验证迁移数据在新系统的业务验证,还需要对旧系统进行回归验证。

    2.制定测试计划
      确定数据迁移的测试目标、范围和资源需求。制定详细的测试计划,包括测试的阶段、测试用例设计、测试数据准备等。测试主要通过技术手段和业务手段的验证来确保迁移的正确性。测试前,根据SIT各轮次测试安排,规划数据迁移验证时间。通常在SIT三个轮次中安排两轮迁移测试,如果有UAT5回归测试,可在回归环境验证一轮。迁移涉及环境的重置,如果有外部联调单位,还需根据联调单位来调整迁移测试时间安排。

    3.理解业务需求和迁移规则
      仔细了解业务需求,包括数据迁移的目的、范围和规则。
      确定迁移的数据规则,包括字段映射、数据转换和数据清理等。

    4.创建测试用例
      根据业务需求和迁移规则,编写详细的测试用例。确保测试用例覆盖了各种情况,包括正常情况和异常情况。

    5.准备测试数据
       创建测试数据,以模拟实际生产环境中的数据。测试数据应涵盖各种数据类型、数据量和数据情境,这步喂数据是在测试执行中特别重要的一环,除了要尽量模拟实际生产环境,还要考虑到各种测试点,这边罗列下需要涵盖到的测试点:
    (1)构造界面字段最长值的数据,测试两边字段长度限制差异
    (2)各种格式的数据,测试两边字段格式限制差异
    (3)字段全填的数据,测试两边字段是否会丢失或者迁移错位
    (4)字段默认值的数据,测试两边字段默认值是否显示一致
    (5)重要下拉字段的所有情况,测试迁移是否显示正确
    (6)对旧系统有新系统没有的字段,验证是否迁移过去
    (7)旧系统没有,新系统有的字段,验证是否给与正确的默认值
    (8)针对新旧系统字段的唯一值判断构造数据测试验证
    (9)针对新旧系统字段的是否为空构造数据测试验证
    (10)字段各种区间数据,测试新旧系统字段的范围限制

    6.执行数据迁移
       执行实际的数据迁移过程,使用测试数据将数据从源系统迁移到目标系统。在迁移期间记录详细的日志,以便在发生问题时进行故障排除,这点非常重要。

    7.验证数据一致性
       验证目标系统中的数据是否与源系统中的数据一致。比较迁移前后的数据,确保每个数据项都正确迁移。

    8.检查数据完整性
       检查目标系统中的数据完整性。确保所有必需的字段和关联数据都正确迁移。

    9.测试性能和容量
       针对大规模的数据迁移,测试迁移的性能和容量,确保在合理的时间内完成数据迁移。

    10.测试回滚和恢复(这步特别重要)
       测试回滚计划,确保在发生问题时可以成功地回滚到迁移前的状态。
       恢复测试,验证回滚操作的有效性,切记回滚是迁移出现重大问题后最有效快速的应急方案。

    11.审计和日志分析
       审计迁移后的数据,确保可以追溯每个数据项的变更历史。
       分析迁移过程中生成的日志,查找异常情况并进行故障排除。

    12.生成测试报告
       汇总测试结果,包括成功的迁移和发现的问题。
       提供建议和改进意见,并记录测试过程中的经验教训。

    13.更新相关文档
       更新相关文档,包括数据字典、数据模型等,以反映新系统中的数据结构,也方便后面相关人员的查验。

    通过执行上述步骤,可以确保数据迁移过程是可控的、准确的,并且满足业务需求。在数据迁移测试中,及早发现和解决问题对确保成功的数据迁移至关重要。

    总结


    在软件生命周期中,由于业务发展,系统迭代更新常会遇到需要数据迁移的情况,虽然这种情况在一般公司或中小型项目中比较少见,但是作为测试人员也要掌握该工作流程,未雨绸缪也是一名测试人员的必备素质,这点非常重要!





    本帖子中包含更多资源

    您需要 登录 才可以下载或查看,没有帐号?(注-册)加入51Testing

    x
    回复

    使用道具 举报

    本版积分规则

    关闭

    站长推荐上一条 /2 下一条

    小黑屋|手机版|Archiver|51Testing软件测试网 ( 沪ICP备05003035号 关于我们

    GMT+8, 2024-10-13 09:15 , Processed in 0.095769 second(s), 24 queries .

    Powered by Discuz! X3.2

    © 2001-2024 Comsenz Inc.

    快速回复 返回顶部 返回列表