UI 自动化测试实战(二)| 测试数据的数据驱动

news2024/11/18 22:43:16

关注公众号,获取测试开发实战干货合辑。本文节选自霍格沃兹《测试开发实战进阶》课程教学内容,进阶学习文末加群。

数据驱动就是通过数据的改变驱动自动化测试的执行,最终引起测试结果的改变。简单来说,就是参数化在自动化测试中的应用

测试过程中使用数据驱动的优势主要体现在以下几点:

  1. 提高代码复用率,相同的测试逻辑只需编写一条测试用例,就可以被多条测试数据复用,提高了测试代码的复用率,同时提高了测试代码的编写效率。

  2. 异常排查效率高,测试框架依据测试数据,每条数据生成一条测试用例,用例执行过程相互隔离。如果其中一条失败,不会影响其他的测试用例。

  3. 代码可维护性高,清晰的测试框架利于其他测试工程师阅读,提高代码的可维护性。

测试数据的数据驱动

数据量小的测试用例可以使用代码的参数化来实现数据驱动,数据量大的情况下建议大家使用一种结构化的文件(例如 YAML,JSON 等)来对数据进行存储,然后在测试用例中读取这些数据。

参数化实现数据驱动

Pytest 提供了 @pytest.mark.parametrize 装饰器来进行参数化,可以使用参数化来实现数据驱动。代码如下:

import pytest

@pytest.mark.parametrize("key, stock_type, price", [
        ("alibaba", "BABA", 200),
        ("JD", "JD", 20)
    ])
    def test_search_data(self, key, stock_type, price):
        assert self.main.goto_search_page().\
        search(key).get_price(stock_type) > price

上面的代码首先使用 @pytest.mark.parametrize 装饰器,传递了两组数据,测试结果显示有两条测试用例被执行,而不是一条测试用例。也就是 Pytest 会将两组测试数据自动生成两个对应的测试用例并执行,生成两条测试结果。

使用 YAML 文件实现数据驱动

当测试数据量大的情况下,可以考虑把数据存储在结构化的文件中。从文件中读取出代码中所需要格式的数据,传递到测试方法中执行。这里推荐大家使用 YAML 类型的文件来存储测试数据。YAML 使用动态字段进行结构化,它以数据为中心,比 Excel、CSV、JSON、XML 等更适合做数据驱动。

下面,我们将上面参数化的两组数据存储到 YAML 文件中,创建一个 data/searchdata.yml 文件,代码如下:

-
  - 'alibaba'
  - 'BABA'
  - 200
-
  - 'JD'
  - 'JD'
  - 20

上面的代码定义了一个 yaml 格式的数据文件 searchdata.yml ,文件中定义了一个列表,列表中有两组数据,最后生成的是这样的数据格式:[["alibaba", "BABA", 200],["JD", "JD", 20]] 。

下一步将测试用例中参数化的数据改造成从 searchdata.yml 文件中读取,代码如下:

import pytest
import yaml

@pytest.mark.parametrize("search_key, type, price",\
yaml.safe_load(open("../data/searchdata.yml")))
    def test_search(self, search_key, type, price):
        assert self.main.goto_search_page().\
        search(search_key).get_price(type)>price

上面的代码,只需要使用 yaml.safe_load() 方法,就来读取 searchdata.yml 文件中的数据,分别传入到用例 test_search() 方法中完成数据的输入与结果的验证。而如果使用 Excel、CSV 文件格式进行数据的存储,需要先从 Excel 文件中读取数据,再解析成需要的格式。而使用 YAML 则完全省去了这个过程。

以上,关于其他环节的数据驱动,在后续章节分享。

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/107073.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

企业生产管理必备模板,助力企业数字化转型

如今企业在市场经济中快速发展,不少企业在市场中得到了更好的发展机遇。然而机遇与挑战往往是共存的,市场同时也给制造企业生产方面提出了更高要求——企业需要在产品结构优化、生产系统改良以及运作模式创新的基础上,注重管理思维模式的改进…

【实时数仓】DWM层订单宽表之维表关联优化 -- 异步查询

文章目录一 DWM层-订单宽表1 维表关联代码实现(1)优化2:异步查询a 封装线程池工具类b 封装维度异步查询的函数类DimAsyncFunctionc 自定义维度查询接口DimJoinFunctiond 使用DimAsyncFunction关联用户维度源码测试配置配置表历史数据同步总结…

构建Web应用程序哪个最好:PHP,Python还是Ruby?

在本文中,我们将了解哪种PHP,Python和Ruby最适合构建Web应用程序。 什么是 Python? Python 是一种具有动态语义的解释型、面向对象的高级编程语言。其高级内置数据结构,以及动态绑定和动态类型,使其特别适合用作脚本…

如何计算并有效降低独立站的客户流失率?

关键词:客户流失率 独立站 对于跨境电商的独立站运营来说,现在获取一个新用户的成本越来越高,成本可能是维护现有客户的5倍;品牌有大约60%–70% 的机会向现有客户销售产品,而仅有大约 20% 的机会向新客户销售产品。 所以&#xff…

有奖征文活动:从 RTC 到 RTE,从音视频到「实时万象」!

Hi 小伙伴们, 社区已经更名 RTE 两个月辣~大家对于 RTC 和 RTE 的区分,是否还有疑惑呢?🤔 关于这两者的区别,我们创始人兼 CEO 赵斌老师说: “RTC(实时音视频)从 Commu…

k8s-Service简单学习

目录 Service介绍 Service类型 Service使用 实验环境准备 ClusterIP类型的Service HeadLiness类型的Service NodePort类型的Service LoadBalancer类型的Service ExternalName类型的Service Ingress介绍(最好) Ingress使用 环境准备 Http代理 …

网络安全实战之植入后门程序

在VMware上建立两个虚拟机:win7和kali。 Kali:它是Linux发行版的操作系统,它拥有超过300个渗透测试工具,就不用自己再去找安装包,去安装到我们自己的电脑上了,毕竟自己从网上找到,也不安全。它…

搞懂 Dubbo 入门理论,这一篇就够

RPC简介 ● RPC, Remote Procedure Call ,远程过程调用,是一种跨系统间服务调用的协议或框架 ● 在很多企业,在内部存在大量的业务子系统,这些子系统都承担独立的业务功能,并相互协作,实现企业…

[思维模式-10]:《如何系统思考》-6- 认识篇 - 结构决定功能,如何进行深度思考

目录 第1章 深度思考概述 1.1 深度思考的本质 1.2 深度思考的冰山模型 1.3 行为模式:结构与现象之间的桥梁 第2章 复杂多变的现象背后的六种基本的行为模式 第3章 透过模式/趋势看清内在的结构 第1章 深度思考概述 1.1 深度思考的本质 结构决定功能&#x…

超标量处理器设计——第三章_虚拟存储器

超标量处理器设计——第三章_虚拟存储器 参考《超标量处理器》姚永斌著 文章目录超标量处理器设计——第三章_虚拟存储器3.2 地址转换3.2.1 单级页表3.2.2 多级页表3.2.3 Page Fault3.3 程序保护3.4 加入TLB和Cache3.4.1 TLB的设计TLB缺失TLB的写入对TLB进行控制3.4.2 Cache的设…

时变电磁场 工程电磁场 P24

两个重要定律 首先是两个非常重要的定理 法拉第电磁感应定律完整形式: 应用斯托克斯定律,我们可以得到 在静止媒质钟我们有 全电流定律 对于非恒定的电流,我们可以写成 相应的微分形式 电磁感应定律与全电流定律构成了电磁场理论的基石 这两…

python自学难吗?零基础学python难吗?

作为一名小白,学习任务新东西的时候都会关系,要学的东西难吗?学习Python时自然也会关心Python难吗?能学会吗? 从编程语言的角度来看,Python相比于其他语言真的是不难,Python本身极简的语法&…

正点原子-Linux嵌入式开发学习-第二期03

第九讲:模仿STM32驱动开发实验 前言:在02中我们学习的如何使用C语言的知识去编写代码,并且是直接定义寄存器地址的。你自己回想一下,stm32的库文件是这样的吗?当然不是,它是继续封装了地址,把寄…

ACL介绍

ACL 中文:访问控制列表 介绍: ACL 是网络当中策略的一种,策略:我们之前学的内容只够我们把网络连通,但网络不仅仅是能连通那么简单,在保证网络能连通的基础上,应该还有更高一层的追求&#xf…

地统计插值学习心得(二)

简介 交叉验证是一种“留一”法,可用于确定插值模型与数据的拟合程度。交叉验证从数据集中移除一个点,并使用剩余的所有其他点来预测被移除点的位置。预测值随后与测量值进行比较,并生成大量统计数据 来确定预测的准确性。 交叉验证窗格可以用于展示并评价插值模型的执行效…

Redis持久化之RDB

Redis持久化之RDB1.RDB(Redis DataBase)1.1 RDB是什么1.2 dump.rdb文件1.3Redis启动方式1.4 配置文件中默认快照配置1.5 命令save VS bgsave1.6 RDB举例1.7 stop-writes-on-bgsave-error1.8 rdbchecksum 检查完整性2.持久化如何执行的2.1 流程优势劣势1.…

【小学信息技术教资面试】《生活在信息中》教案

题目:生活在信息中内容: 基本要求: (1)说出信息的不同表现形式及信息在生活中的应用。 (2)教学中注意师生间的交流互动。 (3)十分钟之内完成试讲。 《生活在信息中》教…

【学习笔记04】生命周期的钩子函数

目录一、生命周期的钩子函数二、创建阶段三、挂载阶段四、父子组件创建和挂载阶段钩子函数的执行次序五、更新阶段六、销毁阶段七、复习和补充1、MVVM2、v-for中的key值3、$nextTick一、生命周期的钩子函数 在组件的生命周期的过程中自动的调用的函数,叫做生命周期…

C++进阶 多态讲解

作者:小萌新 专栏:C进阶 作者简介:大二学生 希望能和大家一起进步! 本篇博客简介:简单介绍C中多态的概念 多态多态的概念多态的定义及实现多态的构成条件虚函数虚函数的重写虚函数重写的两个例外协变析构函数的重写C11…

【ML】numpy meshgrid函数使用说明(全网最简单版)

【ML】numpy meshgrid函数使用说明meshgrid的作用?怎么使用(举例说明)手工描点(帮助理解)怎么画三维?附画图代码meshgrid的作用? 首先要明白numpy.meshgrid()函数是为了画网格,&…