9月7日-8日,相约 2023 腾讯全球数字生态大会!聚焦产业未来发展新趋势! 了解详情
写点什么

测试数据构造秘技(1) ——专属数据引用数据分离

  • 2014-04-01
  • 本文字数:1844 字

    阅读完需:约 6 分钟

最近在企业里面看了一些测试案例的数据准备,发现了一个共性问题:测试数据中存在大量冗余,这些冗余会给后续的测试案例及数据维护带来大量的成本。

为了便于大家理解,先举一个例子:

测试信用卡交易金额汇总,测试数据完全从 csv 中加载,每个测试案例根据 csv 中的数据,assert 特定返回值(由于篇幅限制,这里只举了一个简单的例子。实际看到的情况是,csv 完全没有字段名称信息,一行里面成百上千个数据,而且还有许许多多类似结构的 csv 文件作为测试数据)。

Csv1

Csv2

在这两个文件里面,我注意到有大量冗余。以 csv 格式的测试案例为例,想象一下如果未来这个表结构发生变化(增加或减少字段),那么需要修改所有这些 csv 文件,会是什么样的工作量!

在乔梁翻译的《持续交付:发布可靠软件的系统方法》一书,其实已经给出了解决思路,只不过由于没有具体实例,不是很容易理解。

经何勉提醒,发现在《实例化需求》一书中,也提到了类似思路,但同样都没有实例,:):

下面我们就以上面例子为基础,说明一下两本书中的思路如何具体应用:

  • 应用程序引用数据 (Application reference data) 是测试无关数据,但它们是应用程序启动所必需的,这些数据往往是指一些基表和基础数据;
  • 测试引用数据(Test reference data)是那些和测试相关,但是对测试行为没有多大影响的数据,在下面两个例子中,黄色就是测试引用数据
  • 测试专属数据(Test specific data):真正影响测试行为的特征数据

了解了测试引用数据和测试专属数据的区别后,我就可以介绍测试数据构造第一秘技了:

将测试引用数据和测试专属数据的准备过程分离,分离复用测试引用数据准备,而将测试专属数据保存在测试脚本中

具体的做法是,第一个例子中,我们建议在每个测试案例里面,先使用一段公共程序为每个案例准备一样的测试引用数据,然后再用 UPDATE 语句来将测试专属数据导入,测试案例的伪码如下:

测试案例 1

从 CSV 导入测试引用数据

测试专属数据导入

复制代码
UPDATE transactions SET amount = 15.99 WHERE id = 1;
UPDATE transactions SET amount = 30.98 WHERE id = 2;
UPDATE transactions SET amount = 75.95 WHERE id = 5;
UPDATE transactions SET amount = 150.9 WHERE id = 10;UPDATE transactions SET amount = 750.5 WHERE id = 50;

测试执行

测试验证 (总和是 1024.32)

测试案例 2

从 CSV 导入测试引用数据

测试专属数据导入

复制代码
UPDATE transactions SET amount = 34.56 WHERE id = 1;
UPDATE transactions SET amount = 56.78 WHERE id = 2;
UPDATE transactions SET amount = 57.97 WHERE id = 5;
UPDATE transactions SET amount = 44.32 WHERE id = 10;
UPDATE transactions SET amount = 234.65 WHERE id = 50;

测试执行

测试验证 (总和是 428.28)

这样做主要有两点好处:

  • 测试案例可维护性:上面这些案例中,测试引用数据由于使用了 INSERT 语句,它其实会受到数据库表结构变化的影响,而测试专属数据准备由于使用 UPDATE 语句,不会受到数据库表结构变化的影响。我们通过统一测试引用数据准备程序,将这种变化的冲击大大降低,未来数据表结构变更,我们只需修改统一的测试引用数据准备程序而无需修改每一个案例,这其实暗合了 DRY 原则(Don’t repeat yourself)。
  • 测试案例可读性:由于我们将测试引用数据准备从独立出来了,只要看测试案例本身,就可以明确地看到测试专属数据,被测行为和结果验证,让案例可读性大大提升。

为了便于大家理解,我们再举另一个例子,假设有一个测试汇率转换接口,测试输入是 xml 文件:

XML1

XML2

应用测试引用数据和测试专属数据分离原则,可以看到哪些是引用数据,哪些是专属数据

因此,在测试案例中,我们会先准备并加载一个基底 XML 文件,再设置测试专属数据,下面是利用 Robot Framework 编写的两个测试案例,可以看出,未来如果 XML 文件的结构有任何变更,我们都只需要修改基底 XML 文件即可,而不需要修改任何测试案例了

Base.xml

至此,我们想大家已经明白,对于测试数据准备这个步骤而言,将测试引用数据和测试专属数据分离,会非常有效地提升测试案例可维护性和可读性。

如果大家感兴趣,可以加入我本人建立了一个“分层自动化测试”QQ 群 20442181 进一步讨论,或关注微信号 Agile-Testing-China。

作者简介

吴穹,资深敏捷专家,Agilean 联合创始人

wuqiong@agilean.cn


感谢侯伯薇对本文的审校。

给InfoQ 中文站投稿或者参与内容翻译工作,请邮件至 editors@cn.infoq.com 。也欢迎大家通过新浪微博( @InfoQ )或者腾讯微博( @InfoQ )关注我们,并与我们的编辑和其他读者朋友交流。

活动推荐:

2023年9月3-5日,「QCon全球软件开发大会·北京站」 将在北京•富力万丽酒店举办。此次大会以「启航·AIGC软件工程变革」为主题,策划了大前端融合提效、大模型应用落地、面向 AI 的存储、AIGC 浪潮下的研发效能提升、LLMOps、异构算力、微服务架构治理、业务安全技术、构建未来软件的编程语言、FinOps 等近30个精彩专题。咨询购票可联系票务经理 18514549229(微信同手机号)。

2014-04-01 00:353438

评论

发布
暂无评论
发现更多内容

蓝易云:SEO优化对香港服务器的配置有什么要求?

百度搜索:蓝易云

云计算 Linux SEO 云服务器 ECS

Excel变天!微软把Python「塞」进去了,直接可搞机器学习

Openlab_cosmoplat

人工智能

智慧仓储 | 你所忽略的系统安全性问题,可能很 “致命”……

网安云

系统安全 智慧仓储 中小企业

DR531|QCA9531 Wi-Fi routerboard 2X2 802.11n 2.4G MIMO

wallyslilly

为什么那么多人喜欢用云桌面

青椒云云电脑

桌面云 云桌面

对线面试官 - MQ经典面试题之高可用性及幂等性

派大星

MQ Java 面试题

IntelliJ IDEA 2023.2.1汉化版最新激活可用 支持M1

Geek_f9e1f3

java开发工具 IntelliJ IDEA 2023最新 IntelliJ IDEA 2023

快手Java一面11问(附参考答案)

JavaGuide

Java spring 面试 springboot Java web

苹果Mac版防火墙推荐Radio Silence 激活下载+安装教程

胖墩儿不胖y

Mac软件 防火墙工具

苹果电脑强大的思维导图工具:Xmind for Mac v23.07中文版 支持M1

Geek_f9e1f3

XMind思维导图

Jvm专讲之内存结构

java易二三

Java 编程 程序员 JVM 计算机

How to choose WiFi moudle? QCA9880+QCA9882-802.11ac WiFi seamless connection-2.4G&5G

wifi6-yiyi

5G wifi 802.11ac 2.4g

Parallels Desktop 19虚拟机上线!pd 虚拟机 19一键安装 支持M1

Geek_2bc454

Parallels Desktop 19 pd虚拟机 19

SpringBoot中如何对数据访问层进行单元测试?

java易二三

Java 数据库 编程 程序员 计算机

开发一款同城线下陪玩约玩APP大家怎么看?线下陪玩APP的应用场景

山东布谷科技胡月

语音聊天源码 线下约玩APP开发 线下陪玩平台 社交约玩平台开发 约玩交友APP源码

pd 虚拟机 19正式发布!Parallels Desktop 19新功能详解

Geek_c58703

Parallels Desktop 19 pd虚拟机 19

微短剧赛道风口下的一站式点播解决方案

阿里云视频云

云计算 视频云 微短剧

GPU荒漠,算力短缺背后的时间竞赛与解决方案|TE解读

TE智库

人工智能 AI gpu 算力

人工智能与软件开发的未来

这我可不懂

人工智能 软件开发

uniapp中解析markdown支持网页和小程序

南城FE

JavaScript 小程序 前端 markdown

AI教学赋能计划(大模型特辑)2023秋季学期启动申请!

飞桨PaddlePaddle

人工智能 百度飞桨 高校 复合型人才 产教融合

多次复制和粘贴工具:Paste for Mac免激活下载

mac大玩家j

mac剪切板工具 剪切板工具 剪切工具

IntelliJ IDEA 2023.2.1汉化版激活 免登陆账号 支持M1

Geek_2bc454

java开发工具 IntelliJ IDEA 2023下载 IntelliJ IDEA 2023最新

制造执行系统(MES)在家具行业中的应用

万界星空科技

开源 MES系统 智能家居

蓝易云:如何在 Alpine Linux 上启用或禁用防火墙?

百度搜索:蓝易云

云计算 Linux 运维 iptables Alpine

Parallels Desktop 19 for Mac虚拟机 一键激活版 支持M1

Geek_f9e1f3

Parallels Desktop 19 pd虚拟机 19 pd 19

Kurator,你的分布式云原生解决方案

华为云开发者联盟

云原生 后端 华为云 华为云开发者联盟 企业号 8 月 PK 榜

OpenHarmony 分布式硬件关键技术

OpenHarmony开发者

OpenHarmony

再升级!PP-OCRv4多场景平均精度提升5%!

飞桨PaddlePaddle

人工智能 paddle OCR 百度飞桨

【干货】华为云图数据库GES技术演进

华为云开发者联盟

人工智能 华为云 图数据库 华为云开发者联盟 企业号 8 月 PK 榜

Photoshop 2024 (ps ai beta) for Mac v25.0beta

Geek_2bc454

ps ai beta ps 2024

  • 扫码添加小助手
    领取最新资料包
测试数据构造秘技(1) ——专属数据引用数据分离_软件工程_吴穹_InfoQ精选文章