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


    数据持久化的定义

    百度百科给出的定义如下:
    数据持久化就是将内存中的数据模型转换为存储模型,以及将存储模型转换为内存中的数据模型的统称。数据模型可以是任何数据结构或对象模型,存储模型可以是关系模型、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 demolangat1_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	c-1.py                       将脚本里修改的用例信息,同步到禅道系统

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

    • 设置 ZTF

      # D:ztf为你ztf的安装路径
      D:ztf>ztf.exe set

      ZTF 会弹出提示,根据提示输入即可完成配置。
      图片

    • 导出禅道的测试用例为测试脚本
      通过 ztf 可以将我们在禅道中定义的测试用例导出,具体用法如下:
      图片


      根据系统提示,我们导出刚才创建的测试套件 1 的测试用例 1,并且导出格式为 python。导出成功后,在文件夹 D:ztfproduct1 下就会有自动生成的 1.py 文件,内容如下:

      #!/usr/bin/env python
      '''
      [case]
      title=测试用例-01
      cid=1
      pid=1
      [group]
      1. 输入用户名            >> candy.wu
      2. 输入密码              >> 123456
      [esac]
      '''
      # 访问'demopython'获取更多帮助
      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 est est-email.yaml 生成了一组 email:

    # zd是ZenData的安装目录
    # demo	est	est-email.yaml是默认的配置文件。存在ZenData根目录下的demo文件夹
    C:zd>zd.exe -d demo	est	est-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	est	est-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 est 文件夹下创建一个名为 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: "	"
    
    - field: field_format 
    
    range: 1-10 
    
    format: "passwd%02d" 
    
    postfix: "	"

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

    # zd是ZenData的安装目录
    # demo	est	est-user.yaml是刚创建的配置文件。用于生成用户名和密码
    C:zd>zd.exe -d demo	est	est-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自动化测试等,微信搜索公众号:“无量测试之道”,或扫描下方二维码:

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

  • 相关阅读:
    3dsmax不同版本 pyside qt UI 设置max窗口为父窗口的方法
    oracle中的数据库和实例
    oracle中的表空间(tablespace)、方案(schema)、段(segment)、区(extent)、块(block)
    什么是WSE
    Server.Transfer,Response.Redirect的区别
    Oracle 中的几个数据类型介绍
    oracle中的连接字符串
    Oracle中的 单引号 和 双引号
    接口是否可以继承接口?抽象类是否可以实现接口?抽象类是否可以继承实体类?
    聚簇索引
  • 原文地址:https://www.cnblogs.com/Wu13241454771/p/14395773.html
Copyright © 2020-2023  润新知