数据持久化的定义

百度百科给出的定义如下:
数据持久化就是将内存中的数据模型转换为存储模型,以及将存储模型转换为内存中的数据模型的统称。数据模型可以是任何数据结构或对象模型,存储模型可以是关系模型、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 已经有十分全面的解释与说明,这里就不再演示如何使用禅道进行:产品、测试套件、测试用例、测试用例执行与执行结果查看了。测试框架—如何做好数据持久化?_数据测试框架—如何做好数据持久化?_测试数据_02

测试框架—如何做好数据持久化?_用例_03测试框架—如何做好数据持久化?_测试数据_02

 

(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                       将脚本里修改的用例信息,同步到禅道系统

 

测试框架—如何做好数据持久化?_测试数据_02

(4) ZTF 框架和禅道的结合使用
ZTF 可以和禅道结合使用,来提高测试的效率。

  • 设置 ZTF

    # D:\ztf为你ztf的安装路径
    D:\ztf>ztf.exe set
    测试框架—如何做好数据持久化?_测试数据_02

    ZTF 会弹出提示,根据提示输入即可完成配置。
    测试框架—如何做好数据持久化?_测试数据_07测试框架—如何做好数据持久化?_测试数据_02

     

  • 导出禅道的测试用例为测试脚本
    通过 ztf 可以将我们在禅道中定义的测试用例导出,具体用法如下:
    测试框架—如何做好数据持久化?_用例_09测试框架—如何做好数据持久化?_测试数据_02


    根据系统提示,我们导出刚才创建的测试套件 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")
    测试框架—如何做好数据持久化?_测试数据_02
  • 运行测试脚本
    脚本更新好后,我们来运行下:测试框架—如何做好数据持久化?_数据测试框架—如何做好数据持久化?_测试数据_02

    测试框架—如何做好数据持久化?_数据_14测试框架—如何做好数据持久化?_测试数据_02
    直接运行刚刚生成的 product1 文件夹下的所有测试用例,可以看到测试成功。

     

  • 通过 ztf 更新测试用例到禅道
    正常情况下,我们的测试脚本是根据测试用例编写的,测试脚本和禅道里的测试用例是一致的。

假设现在需求有变化,我的测试脚本失败了,我发现后先更新了测试脚本。这个时候我的测试脚本和禅道里的测试用例就不一致了,就需要同步。ztf 提供了一个方法来同步我们的测试用例,方法如下:测试框架—如何做好数据持久化?_数据_16测试框架—如何做好数据持久化?_测试数据_02

测试框架—如何做好数据持久化?_数据持久化_18测试框架—如何做好数据持久化?_测试数据_02
通过 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  递归模式。如不指定,默认为平行模式。平行模式下各个字段独立循环
                   递归模式下每个字段的取值依赖于前一字段。可增强数据的随机性

测试框架—如何做好数据持久化?_测试数据_02

 

  • 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
测试框架—如何做好数据持久化?_测试数据_02

在上面的代码里,-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

测试框架—如何做好数据持久化?_测试数据_02

执行成功后打开生成的 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"

测试框架—如何做好数据持久化?_测试数据_02

然后,我在命令行执行如下命令:

# zd是ZenData的安装目录
# demo\test\test-user.yaml是刚创建的配置文件。用于生成用户名和密码
C:\zd>zd.exe -d demo\test\test-user.yaml -n 1 -o hello_world.txt

测试框架—如何做好数据持久化?_测试数据_02

命令执行完后,查看生成的 hello_world.txt 文件:

01289qq@.com   passwd01
测试框架—如何做好数据持久化?_测试数据_02

可以看到数据文件被正确生成,关于更多数据文件的格式及用法,可以参考 ZenData 官网 https://www.zendata.cn/。

 

总结

通过禅道一站式的解决方案,你可以完成产品、项目、 需求、测试管理、测试执行,以及测试报告的工作。更多关于禅道的用法和高级使用,请直接参考禅道官方网站https://www.zentao.net/。

数据持久化是个非常简单的动作,但是数据持久化采用什么方式进行,与哪种企业管理工具结合,数据持久化后要实现什么目标,才是更需要关注的部分。通过禅道的一站式解决方案,我们可以轻松把测试数据管理起来,实现测试管理的跃升和测试效率的提高。

欢迎关注【无量测试之道】公众号,
Python编程学习资源干货、
Python+Appium框架APP的UI自动化、
Python+Selenium框架Web的UI自动化、
Python+Unittest框架API自动化、


文章下方有公众号二维码,可直接微信扫一扫关注即可。

备注:我的个人公众号已正式开通,致力于测试技术的分享,包含:大数据测试、功能测试,测试开发,API接口自动化、测试运维、UI自动化测试等,微信搜索公众号:“无量测试之道”,或扫描下方二维码:

测试框架—如何做好数据持久化?_数据_26测试框架—如何做好数据持久化?_测试数据_02

 添加关注,让我们一起共同成长!