数据持久化的定义
百度百科给出的定义如下:
数据持久化就是将内存中的数据模型转换为存储模型,以及将存储模型转换为内存中的数据模型的统称。数据模型可以是任何数据结构或对象模型,存储模型可以是关系模型、XML、二进制流等。cmp和Hibernate只是对象模型到关系模型之间转换的不同实现。
从软件测试角度,通俗地说,数据持久化就是将测试数据有组织的永久存储的过程;狭义地说,一般是指把数据存储在数据库;广义地说,数据也可以是文件数据、报表等其他形式。
前期推文提到过,测试数据包括测试请求数据和测试结果数据,这两部分数据都应该进行持久化。
数据持久化的优点
为什么要进行数据持久化呢?即:数据持久化有哪些优点呢?以下将从四个方面来解释说明。
1、可以使回归测试的范围更准确
通过对相邻版本测试结果数据的对比(通常是指跑所有测试用例的测试),我们可以清晰地掌握在本次测试及上次测试之间,有哪些测试用例受到影响,从而验证两个版本之间的更改所影响的范围是否与预期一致。
例如:当前版本的改动我们认为只会影响 A 模块,结果却发现 B 模块的一个测试用例运行失败了。则我们在以后更改 A 模块时,应该主动把 B 模块的这个失败用例纳入回归测试中,以及 B 模块的其他测试用例也需要重新执行一遍,避免因 A 模块的更改影响到 B 模块的功能,从而在更早阶段发现潜在 bug。
2、可以发现测试用例本身的问题
如果某个测试用例在多个版本的执行中失败的概率非常大。且失败的原因并不是因为程序 bug 引起的,则说明这个测试用例是不稳定的测试用例,应该仔细分析失败原因并加以改进。
3、可以发现潜在的性能问题
通过对各个版本的测试结果对比,我们可以发现潜在的性能问题。比如在某一段时间内,相同的测试用例集,整个测试的整体运行时间越来越久,则说明某些业务的性能在下降。
4、可以让整个团队都加入质量保障中
通过持久化的保存测试结果数据,并且以报表的形式发送给项目相关负责人。可以使得除开发、测试之外的团队角色对产品的质量有完整且不断更新的认识,可以促进关键负责人对产品质量的关注,从而获得更多的资源倾斜。
如何进行测试数据持久化
测试数据持久化大家首先想到的就是把数据放到 DB 中,但是如果只是单纯的存储,并不能享用到数据持久化的好处。通常情况下,我们的测试请求数据,要跟测试用例进行一一对应。
而测试用例,应该要根据不同的测试目的,放到不同的测试套件里去,最后通过测试套件的执行,形成测试用例、测试脚本、测试数据、测试结果的对应,从而方便后续我们对测试结果数据进行多维度分析。
那么怎么使得测试数据持久化能够实现上述目标呢?当前流行的解决方案有以下几种。
1、国外——JIRA
其实是 JIRA+ Zephyr 或者 JIRA + synapseRT。其中 JIRA 在国外,是公认的市场占有率最高的项目管理和开发管理工具,而 Zephyr 和 synapseRT 均是收费的 JIRA 插件。
Zephyr 的用例管理虽然使用简单,但是无法记录和跟踪需求,管理人员无法直观了解测试进度,所以较难从项目整体角度来管理测试用例;
synapseRT 可以用来记录和跟踪需求,也可以用来创建、组织、计划和执行测试用例,还可以用来批量执行测试用例、链接 Bug,以及生成各种关于需求和测试的报告等等。
2、国内——禅道
禅道作为国内市场占有率第一的,并且是国产、开源的专业研发项目管理软件,可用作缺陷管理、需求管理和任务管理,在功能上与 JIRA 不相上下。
并且禅道有很多专有工具,例如:zendata 测试数据生成器、ztf 自动化测试框架等,可以一站式地完成项目管理,以及测试管理与执行,非常适合中小团队使用。
(1)禅道安装、配置
禅道支持多个平台,每个平台的安装和配置各有不同,你可以参考 https://www.zentao.net/book/zentaopmshelp/64.html 进行安装和配置。
(2)使用禅道进行测试管理
测试管理指对测试需求、计划、用例和实施过程进行管理。因禅道安装指南 https://www.zentao.net/book/zentaopmshelp/64.html 已经有十分全面的解释与说明,这里就不再演示如何使用禅道进行:产品、测试套件、测试用例、测试用例执行与执行结果查看了。
(3)ZTF 自动化测试框架
ZTF 是禅道开发的一款开源自动化测试管理框架,它聚焦于自动化测试的管理功能。ZTF 提供了自动化测试脚本的定义、管理、驱动、执行结果的回传、bug 的创建,以及和其他自动化测框架的集成。
ZTF 是独立安装的,其安装部署可以参考ZTF 安装部署 https://ztf.im/book/ztf/ztf-about-26.html,它的 ZTF 的语法如下:
set -s 设置语言、禅道系统同步参数。用户对当前目录需要有写权限
co checkout 导出禅道系统中的用例,已存在的将更新标题和步骤描述。可指定产品、套件、测试单编号 up update 从禅道系统更新已存在的用例。可指定产品、模块、套件、测试单编号 run -r 执行用例。可指定目录、套件、脚本、结果文件路径,以及套件和任务编号,多个文件间用空格隔开 junit|testng 执行JUnit、TestNG、PHPUnit、PyTest、JTest、CppUnit、GTest、QTest单元测试脚本 ci 将脚本中修改的用例信息,同步到禅道系统 cr 将用例执行结果提交到禅道系统中 cb 将执行结果中的失败用例,作为缺陷提交到禅道系统 list ls -l 查看测试用例列表。可指定目录和文件的列表,之间用空格隔开 view -v 查看测试用例详情。可指定目录和文件的列表,之间用空格隔开 sort -sort 将脚本文件中的步骤重新排序 clean -c 清除脚本执行日志 --verbose 增加此参数,用于显示详细日志,如Http请求、响应、错误等信息
ZTF 的常用命令如下:
$>ztf.exe run demo\lang\bat\1_string_match.bat 执行演示测试用例 $>ztf.exe set 根据系统提示,设置语言、禅道地址、账号等,Windows下会提示输入语言解释程序 $>ztf.exe co 交互式导出禅道测试用例,将提示用户输入导出类型和编号 $>ztf.exe co -product 1 -language python 导出编号为1的产品测试用例,使用python语言,缩写-p -l $>ztf.exe run product01 -suite 1 执行禅道系统中编号为1的套件,脚本在product01目录,缩写-s $>ztf.exe ci product01\tc-1.py 将脚本里修改的用例信息,同步到禅道系统
(4) ZTF 框架和禅道的结合使用
ZTF 可以和禅道结合使用,来提高测试的效率。
-
设置 ZTF
# D:\ztf为你ztf的安装路径 D:\ztf>ztf.exe set
ZTF 会弹出提示,根据提示输入即可完成配置。
-
导出禅道的测试用例为测试脚本
通过 ztf 可以将我们在禅道中定义的测试用例导出,具体用法如下:
根据系统提示,我们导出刚才创建的测试套件 1 的测试用例 1,并且导出格式为 python。导出成功后,在文件夹 D:\ztf\product1\ 下就会有自动生成的 1.py 文件,内容如下:#!/usr/bin/env python ''' [case] title=测试用例-01 cid=1 pid=1 [group] 1. 输入用户名 >> candy.wu 2. 输入密码 >> 123456 [esac] ''' # 访问'demo\python'获取更多帮助 print(">> candy.wu") print(">> 123456")
-
运行测试脚本
脚本更新好后,我们来运行下:
直接运行刚刚生成的 product1 文件夹下的所有测试用例,可以看到测试成功。 -
通过 ztf 更新测试用例到禅道
正常情况下,我们的测试脚本是根据测试用例编写的,测试脚本和禅道里的测试用例是一致的。
假设现在需求有变化,我的测试脚本失败了,我发现后先更新了测试脚本。这个时候我的测试脚本和禅道里的测试用例就不一致了,就需要同步。ztf 提供了一个方法来同步我们的测试用例,方法如下:
通过 ztf.exe ci 的方式可以使我们的测试脚本和测试用例保持同步,避免了测试用例测试没有反映真实测试需求的情况。
-
ZenData 测试数据生成器的使用
在前期推文“测试请求数据的准备方式”中讲过了测试数据生成,其中一个办法是测试数据平台。ZenData 即是禅道提供的一款测试数据通用平台,可以方便地生成测试数据。
ZenData 主要有以下两大功能:
数据生成通过一个配置文件,使用 ZenData 生成你想要的各种数据;数据解析对某一个数据文件,指定其数据类型定义的配置文件,完成到结构化数据的解析。
ZenData 生成的测试数据可用于手工测试,也可以用于自动化测试,下面来看下 Zendata 的使用。
Zendata 安装部署请直接参考Zendata 安装部署 https://www.zendata.cn/book/zendata/why-zendata-115.html。
-
ZenData 的语法如下:
-d --default 默认的数据格式配置文件 -c --config 当前场景的数据格式配置文件,可以覆盖默认文件里面的设置 -o --output 生成的数据的文件名。可通过扩展名指定输出json|xml|sql格式的数据。默认输出原始格式的文本数据 -n --lines 要生成的记录条数,默认为10条 -F --field 可通过该参数指定要输出的字段列表,用逗号分隔。默认是所有的字段 -t --table 输出格式为sql时,需通过该参数指定要插入数据的表名 -T --trim 输出的字段去除前后缀,通常用在生成SQL格式的输出 -H --human 输出可读格式,打印字段名,并使用tab键进行分割 -r --recursive 递归模式。如不指定,默认为平行模式。平行模式下各个字段独立循环 递归模式下每个字段的取值依赖于前一字段。可增强数据的随机性
-
ZenData 生成数据示例
ZenData 生成测试数据非常简单,首先你使用 yaml 文件来定义你的数据格式,然后使用上述命令即可。
下面的实例, 根据配置文件 demo\test\test-email.yaml 生成了一组 email:
# zd是ZenData的安装目录 # demo\test\test-email.yaml是默认的配置文件。存在ZenData根目录下的demo文件夹 C:\zd>zd.exe -d demo\test\test-email.yaml -n 1 -o hello_world.txt
在上面的代码里,-d 函数后面跟默认的 yaml 文件格式,ZenData 会根据指定的格式来生成数据,你也可以自己定义 yaml 文件。-n 代表生成的数据组数,-o 代表输出的文件名。
注意,每一组生成的数据有多少字段,取决于你 yaml 文件中的定义。如果你想控制输出的个数,可以采用如下方式:
# number_with_esp是yaml文件test-email.yaml的filed名称 # 本例指定输出filed是number_with_esp生成的数据 C:\zd>zd.exe -d demo\test\test-email.yaml -n 1 -F number_with_esp -o hello_world.txt
执行成功后打开生成的 hello_world.txt 文件,你将看到有 email 数据生成,此文件直接可用于你的自动化测试中。当前 ZenData 支持 TXT、JSON 、CSV 以及 sql 格式的文件生成。
了解了 ZenData 的用法后,我们来看一个真实用例,生成用于注册的账户,提供两个字段,用户名和密码。
首先,我们创建一个 yaml 文件。为简单起见,我在 ZenData 安装目录下的 demo\test 文件夹下创建一个名为 test-user.yaml 的文件,内容如下:
title: 用户账户 desc: author: candy Wu version: 1.0 fields: - field: number_with_esp from: email.v1.yaml use: number_with_esp prefix: "" postfix: "\t" - field: field_format range: 1-10 format: "passwd%02d" postfix: "\t"
然后,我在命令行执行如下命令:
# zd是ZenData的安装目录 # demo\test\test-user.yaml是刚创建的配置文件。用于生成用户名和密码 C:\zd>zd.exe -d demo\test\test-user.yaml -n 1 -o hello_world.txt
命令执行完后,查看生成的 hello_world.txt 文件:
01289qq@.com passwd01
可以看到数据文件被正确生成,关于更多数据文件的格式及用法,可以参考 ZenData 官网 https://www.zendata.cn/。
总结
通过禅道一站式的解决方案,你可以完成产品、项目、 需求、测试管理、测试执行,以及测试报告的工作。更多关于禅道的用法和高级使用,请直接参考禅道官方网站https://www.zentao.net/。
数据持久化是个非常简单的动作,但是数据持久化采用什么方式进行,与哪种企业管理工具结合,数据持久化后要实现什么目标,才是更需要关注的部分。通过禅道的一站式解决方案,我们可以轻松把测试数据管理起来,实现测试管理的跃升和测试效率的提高。
欢迎关注【无量测试之道】公众号,
Python编程学习资源干货、
Python+Appium框架APP的UI自动化、
Python+Selenium框架Web的UI自动化、
Python+Unittest框架API自动化、
文章下方有公众号二维码,可直接微信扫一扫关注即可。
备注:我的个人公众号已正式开通,致力于测试技术的分享,包含:大数据测试、功能测试,测试开发,API接口自动化、测试运维、UI自动化测试等,微信搜索公众号:“无量测试之道”,或扫描下方二维码:
添加关注,让我们一起共同成长!