接口测试框架实战(五) | 测试数据的数据驱动

简介: 本文节选自霍格沃玆测试学院内部教材

本文节选自霍格沃玆测试学院内部教材,文末链接进阶学习!

数据驱动就是数据的改变从而驱动自动化测试的执行,最终引起测试结果的改变。简单来说,就是参数化的应用。数据量小的测试用例可以使用代码的参数化来实现数据驱动,数据量大的情况下建议使用一种结构化的文件(例如 YAML,JSON 等)来对数据进行存储,然后在测试用例中读取这些数据。

参数化实现数据驱动

参数化数据驱动原理与之前分享的 接口测试框架实战(二) | 搞定多环境下的接口测试 大同小异。
本文依然使用 @pytest.mark.parametrize 装饰器来进行参数化,使用参数化来实现数据驱动。

通过参数化的方式,分别判断 id 为 2,3 的部门的 parentid 为 1:

import pytest

class TestDepartment:
    department = Department()

    @pytest.mark.parametrize("id", [2, 3])
    def test_department_list(self, id):
        r = self.department.list(id)
        assert self.department.jsonpath(expr="$..parentid")[0] == 1

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

YAML 文件实现数据驱动实战

当测试数据量大的情况下,可以考虑把数据存储在结构化的文件中。从文件中读取出代码中所需要格式的数据,传递到测试用例中执行。
本次实战以 YAML 进行演示。YAML 以使用动态字段进行结构化,它以数据为中心,比 Excel、csv、JSON、XML 等更适合做数据驱动。
将上面参数化的两组数据存储到 YAML 文件中,创建一个 data/department_list.yml 文件,代码如下:

- 2
- 3

上面的代码定义了一个 YAML 格式的数据文件 department_list.yml ,文件中定义了一个列表,列表中有两个数据,最后生成的是这样的数据格式:[1,2] 。将测试用例中参数化的数据改造成从 department_list.yml 文件中读取,代码如下:

class TestDepartment:
    department = Department()

    @pytest.mark.parametrize("id", \
    yaml.safe_load(open("../data/department_list.yml")))
    def test_department_list(self, id):
        r = self.department.list(id)
        assert self.department.jsonpath(expr="$..parentid")[0] == 1

上面的代码,只需要使用 yaml.safe_load() 方法,读取 department_list.yml 文件中的数据,分别传入到用例 test_department_list() 方法中完成输入与结果的验证。

更多接口测试框架实战进阶内容,我们在后续文章分享。

更多技术文章分享及测试资料

相关文章
|
3天前
|
Web App开发 JavaScript 前端开发
深入理解自动化测试框架Selenium的设计与实现
【4月更文挑战第20天】 在软件测试领域,自动化测试已成为提升测试效率和确保产品质量的关键手段。Selenium作为一款广泛使用的开源自动化测试框架,其设计精巧且功能强大,为Web应用提供了一种灵活、高效的测试解决方案。本文将深入探讨Selenium的核心架构与实现细节,解析其如何通过模拟用户操作来执行测试用例,以及它如何适应不断变化的Web技术标准。通过对Selenium内部机制的剖析,旨在帮助测试工程师更好地掌握该工具,并在测试实践中发挥其最大效能。
|
4天前
|
监控 测试技术 数据安全/隐私保护
如何将代理IP集成到自动化测试框架中?
如何将代理IP集成到自动化测试框架中?
|
7天前
|
敏捷开发 监控 前端开发
深入理解自动化测试框架Selenium的架构与实践
【4月更文挑战第16天】 在现代软件开发过程中,自动化测试已成为确保产品质量和加快迭代速度的关键手段。Selenium作为一种广泛使用的自动化测试工具,其开源、跨平台的特性使得它成为业界的首选之一。本文旨在剖析Selenium的核心架构,并结合实际案例探讨其在复杂Web应用测试中的高效实践方法。通过详细解读Selenium组件间的交互机制以及如何优化测试脚本,我们希望为读者提供深入理解Selenium并有效运用于日常测试工作的参考。
13 1
|
7天前
|
自然语言处理 测试技术 API
深入理解自动化测试框架Selenium的设计理念与实践
【4月更文挑战第15天】 在现代软件开发过程中,自动化测试已成为确保产品质量和加速迭代的关键手段。Selenium作为一种广泛使用的自动化测试框架,提供了对多种浏览器和平台的支持,极大地促进了Web应用的功能测试。本文旨在剖析Selenium的核心设计理念,探讨其在实际项目中的应用,并指出常见的误区及最佳实践,以期帮助测试工程师更高效地利用Selenium进行测试工作。
|
9天前
|
监控 测试技术 API
深入理解自动化测试框架Selenium的设计与实现
【4月更文挑战第14天】在软件开发过程中,自动化测试是确保代码质量、减少人工重复劳动的关键步骤。Selenium作为一款广泛使用的自动化测试工具,提供了对多种浏览器和操作系统的支持。本文将探讨Selenium的核心组件及其架构设计,分析其如何通过WebDriver与浏览器交互,以及它如何支持多种编程语言进行脚本编写。同时,我们还将讨论Selenium Grid的作用以及它如何实现并行测试,以缩短测试周期并提高测试效率。
174 59
|
11天前
|
Web App开发 前端开发 Java
框架分析(11)-测试框架
框架分析(11)-测试框架
|
15天前
|
人工智能 分布式计算 Kubernetes
人工智能,应该如何测试?(三)数据构造与性能测试篇
本文探讨了人工智能场景中的性能测试,区别于传统互联网测试,其复杂性更高。主要关注点包括两类AI产品——业务类和平台类,后者涉及AI全生命周期,测试难度更大。测试重点是模型训练的性能,特别是数据模拟。需要构造大量结构化数据,如不同规模、分布、分片和特征规模的数据,以评估算法效率。此外,还涉及模拟设备规模(如视频流)和节点规模(边缘计算),以测试在大规模负载下的系统性能。文中提到了使用工具如Spark、ffmpeg、流媒体服务器和Kubernetes(K8S)的扩展项目,如Kubemark,来模拟大规模环境。最后,文章介绍了使用Golang进行异步IO操作以构建海量小文件,优化IO性能。
31 0
|
21天前
|
XML 存储 监控
深入理解自动化测试中的数据驱动策略
【4月更文挑战第2天】 随着软件开发周期的不断缩短和测试需求的日益增加,自动化测试已成为确保软件质量的关键手段。本文将深入探讨数据驱动测试(DDT)策略在自动化测试中的应用及其优势。数据驱动测试是一种将测试逻辑与测试数据分离的方法,通过外部数据源动态提供输入和预期结果,从而增强测试案例的灵活性和可扩展性。我们将分析数据驱动测试的核心原理、实施步骤以及如何利用它来提高测试覆盖率和效率。
|
24天前
|
敏捷开发 设计模式 监控
深入理解自动化测试框架的设计原则
在软件开发的复杂多变环境中,自动化测试已成为确保产品质量和加速市场交付的关键步骤。本文将探讨自动化测试框架的设计原则,包括模块化、可扩展性、易用性和可靠性,旨在为软件测试工程师提供构建高效、健壮且易于维护的自动化测试系统的指导。通过分析设计模式的应用,我们将了解如何减少代码冗余,提高测试覆盖率,并适应快速变化的技术要求。
|
25天前
|
存储 XML 测试技术
深入理解自动化测试中的数据驱动策略
在现代软件开发周期中,自动化测试已经成为提升效率、确保质量的关键手段。本文重点探讨了数据驱动测试(DDT)策略的核心原理及其在实际测试中的应用优势。通过将测试逻辑与测试数据分离,DDT能够增强测试案例的可重用性,简化测试维护,并提高测试覆盖率。文章详细分析了如何设计数据驱动测试框架,以及如何利用该框架进行有效的测试数据管理。同时,文中还讨论了实施DDT时可能遇到的挑战和限制,并提出了一系列解决方案。