一、背景

数据迁移测试,往往涉及到功能又涉及到底层数据,在新旧版本之间都需要做兼容,需要关注的内容比较多,涉及的面比较广,可能带来的问题也比较隐蔽,本文以一个相对复杂的数据迁移测试场景为例,简单总结了一些数据迁移测试过程当中的核心关注点及测试方法。

二、测试分析

在进行测试之前,需要对核心的测试点做重点的梳理,其中主要包括本次迁移涉及到的后端接口、对应的数据库表以及数据迁移的接口

2.1涉及到的后端接口

涉及到了15个接口,需要覆盖的场景较多,对应场景及接口按照大的类别来区分,具体的场景在设计用例时以等价类代表用例覆盖

2.2对应数据库关系及注意点

涉及到了4个库7张表,关系复杂,需要验证的数据内容较多,针对性的列出了对应场景和表表直接关系,以及一些细节关注点

2.2数据迁移接口及数据校验接口

三、测试流程

根据数据迁移测试的特点,主要从三个方面来保证质量,数据准确性、功能可用性、代码的健壮程度

3.1数据校验

保证数据准确性是本次数据迁移最为核心的关键一步,需要对增量数据及全量数据做全面的校验,由于手工测试费时费力,将可执行的数据对比操作都做了脚本自动化来进行校验。

# -*- coding:utf-8 -*-
# 实例转商品,对应商品表数据变更
增量数据校验
实例库对应数据校验
```javascript
# -*- coding:utf-8 -*-
# 实例转商品,对应实例表数据变更import pymysql
def SimpleAddData():# 连接databasecon_custom = pymysql.connect(host="localhost", user="root", password="123456", database="database1", charset="utf8")con_product = pymysql.connect(host="localhost", user="root", password="123456", database="database2", charset="utf8")# 得到一个可以执行SQL语句的光标对象cur_custom = con_custom.cursor()cur_product = con_product.cursor()sql1 = "select * from  parammodelcollectiontag where tagid = 12345;"sql2 = "select * from tag_folder_migration where  tagid = 12345;"sql3 = "select * from tagforparammodelassemblycollection where tagid = 12345;"# 执行SQL语句try:cur_custom.execute(sql2)custom_res1 = cur_custom.execute(sql1).fetchall()  # 获取对应实例数据custom_res2 = cur_custom.execute(sql2).fetchall()  # 获取实例转商品关联数据custom_res3 = cur_custom.execute(sql3).fetchall()  # 获取收藏夹和实例关联表对应数据# 确定数据不为空while custom_res1 and custom_res2 and custom_res3:for row in custom_res3:collectionid = row[2]sql4 = "select * from parammodelassemblycollection  where collectionid = %s;" %collectionidproduct_res = cur_product.execute(sql4).fetchall()  # 通过collectionid获取对应实例while product_res:print "关联表插入成功且实例生成成功"except Exception as e:raise efinally:con_custom.close()  # 关闭连接con_product.close()if __name__ == '__main__':SimpleAddData()

商品表数据变更


import pymysqldef BrandgoodAddData():# 连接databasecon_custom = pymysql.connect(host="localhost", user="root", password="123456", database="database1", charset="utf8")con_fenshua = pymysql.connect(host="localhost", user="root", password="123456", database="database2",charset="utf8")# 得到一个可以执行SQL语句的光标对象cur_custom = con_custom.cursor()cur_fenshua = con_fenshua.cursor()sql1 = "select * from parammodelcollectiontag where tagid=12345;"# 执行SQL语句try:custom_res = cur_custom.execute().fetchall()for row in custom_res:collectionid = row[2]  # 获取对应实例的 collectionidsql2 = "select * from brandgood where itemid=%s and itemtype=15;" %collectionidfenshua_res = cur_fenshua.execute(sql2)  # 查询对应实例是否转商品while fenshua_res:print "对应实例转商品成功"except Exception as e:raise efinally:con_custom.close()  # 关闭连接con_fenshua.close()if __name__ == '__main__':BrandgoodAddData()

全量数据校验

# -*- coding:utf-8 -*-
import pymysql
from pymongo import MongoClientdef AllDataCompare():# 连接databasecon_product = pymysql.connect(host="localhost", user="root", password="123456", database="database2", charset="utf8")con_model = pymysql.connect(host="localhost", user="root", password="123456", database="database3",charset="utf8")# 得到一个可以执行SQL语句的光标对象cur_product = con_product.cursor()cur_model = con_model.cursor()# 执行SQL语句try:sql1 = "select count(1) from parammodelassemblycollection  where brandgoodid is null and deleted=0 ;"product_count = cur_product.execute(sql1) #统计实例表中数据总量model_count10 = 0model_count54 = 0for i in range(9):sql2 = "select count(1) from prod_fav_000%s as pf,prod_fav_folder_000%s as pff  " \"where pf.folderid=pff.folderid and pff.folder_type in (3,4,5,6);"%i # 商品收藏数据统计0~9model_count10=cur_model.execute(sql2)+model_count10for i in range(9,65):sql3 = "select count(1) from prod_fav_00%s as pf,prod_fav_folder_00%s as pff  " \"where pf.folderid=pff.folderid and pff.folder_type in (3,4,5,6);" % imodel_count54 = cur_model.execute(sql3) + model_count54  # 商品收藏数据统计10~64model_count = model_count10 + model_count54while product_count == model_count :print "实例与商品总数对应"except Exception as e:raise efinally:con_product.close()  # 关闭连接con_model.close()if __name__ == '__main__':AllDataCompare()

3.2功能check

以下是核心场景及接口的测试用例,从功能层面全面覆盖所有的用户场景

3.3日志跟踪

功能层面正常的表现,在底层可能已经出错,所以需要重点关注一下日志,在实际测试过程中,日志报错的确暴露出部分问题,日志跟踪在任何重后端的测试过程中都需要格外关注。




四、总结

数据迁移测试是重构当中经常遇到的一种测试类型,针对不同的场景需要设计不同的测试方法和流程,本文粗略的总结了测试过程中需要关注的一些重点内容;核心的数据校验部分均由自动化完成,能够极大的提高测试效率,在保证数据准确的前提下,全面覆盖核心功能点,同时关注后端日志经常,由表及里、由内向外全面的保证迁移的质量,在最早的测试阶段还需要对开发代码做一定程度的review,避免一些明显的代码问题。

数据迁移测试经验总结相关推荐

  1. 数据迁移测试_自动化数据迁移测试

    数据迁移测试 Data migrations are notoriously difficult to test. They take a long time to run on large data ...

  2. sql语句在navicat中可以查询到所有数据但是在idea程序中不行_数据迁移测试实施方案...

    点击关注,我们共同每天进步一点点! 最近经历了一场大型的数据迁移测试,因为以前对数据迁移测试研究甚少,所以对测试实施方案的制定非常的棘手,在网上也查询了很多,发现相关资料很少,并且大部分都是一些理论指 ...

  3. 达梦DM8数据库异机数据迁移测试

    达梦 DM8 数据库异机数据迁移测试 一.源库备份 源库DMOA,主机名:dm3   目标库 DMOA 主机名:db 在DMTEST模式里创建了T_EMP01.T_EMP02.T_EMP03.T_TE ...

  4. 数据迁移测试实施方案

    前期准备工作数据迁移范围确定 在做数据迁移测试前需要和开发部门确认好数据迁移范围,主要包含以下几点: 基本数据迁移 基本数据迁移就是从老库中把一些老表直接复制到新库的新表中,或是: 1.拆表:老库的老 ...

  5. 关于数据迁移,测试应该做什么?

    数据迁移的需求背景 公司内部出现业务先合并.新旧系统替换.业务扩大需要进行数据库分表等情况下,就需要涉及到数据迁移.对应的常见的迁移场景有: 1.需要将两个系统的部分数据统一从A数据库读取,a数据库和 ...

  6. oracle怎么将一列挪到另一列,详细讲解Oracle数据库的数据迁移方法

    <详细讲解Oracle数据库的数据迁移方法>由会员分享,可在线阅读,更多相关<详细讲解Oracle数据库的数据迁移方法(4页珍藏版)>请在人人文库网上搜索. 1.详细讲解 Or ...

  7. Oracle数据库迁移测试数据,Oracle数据库的数据迁移方法

    Oracle数据库的数据迁移方法 发表于:2008-04-14来源:作者:点击数: 随着数据库管理系统和操作系统平台的更新换代的速度的加快,数据库管理员经常需要在两个不同的数据库之间或在两种不同的系统 ...

  8. 数据迁移怎么测,都有哪些步骤?

    小编热衷于收集整理资源,记录踩坑到爬坑的过程.希望能把自己所学,实际工作中使用的技术.学习方法.心得及踩过的一些坑,记录下来.也希望想做软件测试的你一样,通过我的分享可以少走一些弯路,可以形成一套自己 ...

  9. 一部分 数据 迁移_软件测试员12小时惊魂记:数据库迁移出大事故,如何测试?...

    信息时代,随着用户数量不断增加,业务量不断增长,企业原有数据库不足以有效支撑业务的发展,在此情况下,企业更多的是寻求一款更加稳定的数据库进行替代. 本文以Sybase数据库和Oracle数据库为例.O ...

最新文章

  1. CocoaPods安装与使用
  2. 狂风暴雨——电闪雷鸣篇:数据流层核心思想揭秘
  3. 多层陶瓷电容器用处_陶瓷电容的作用及特点
  4. 海龟画图 python太阳花_python 简单的绘图工具turtle使用详解
  5. Tree树 递归查询,显示成JSON格式
  6. java开发C语言编译器
  7. oracle配置控制文件快照的位置以及名称为,Oracle 快照控制文件(snapshot control file)...
  8. NYOJ 371 机器人II
  9. C# Newtonsoft JArray排序
  10. java 开发中常用的字符串工具类,StringUtil
  11. ps,ae,ui,ai,pr,cad,3DMAX,c4d,cdr,摄影后期
  12. Android ndk开发入门集锦一
  13. 无线专题 PCI接口与PCIe接口
  14. 绕过tp路由器管理密码_路由器管理员密码忘了怎么办 路由器管理员密码忘了解决方法【介绍】...
  15. DM8 MPP集群部署
  16. 马云为何学计算机,IT大佬高考:李彦宏是状元 马云数学仅1分
  17. XSS篇——javascript:伪协议
  18. cf大区服务器显示人数合区后,穿越火线:各大区终合并,跨区作战成现实,以后就只有4个大区了!...
  19. 【职场】大公司想招程序员,一般都在什么网站上进行招聘呢?
  20. 【C语言内功心法】__weak -- 示弱也是一种强大

热门文章

  1. 仅1个月GMV超1.4亿,快手小众圈层走出“大众爆款”
  2. 10个实用的数据可视化的图表总结
  3. 江苏工程职业技术学院计算机专业,江苏工程职业技术学院
  4. make_EHelper(rol)
  5. Dynamics CRM 2016 的新特性
  6. TNS-12547: TNS:丢失连接
  7. 搜罗21个设计好的Css和Ajax表格!
  8. 英语外刊精读(Part 1):day1,泛读;day2,精读(上); day3,精读(下);
  9. SAP-PP 如何查看工艺路线的修改记录
  10. 最近两篇Nature子刊的经验与教训