软件测试|Yaml实现测试数据驱动

简介: 软件测试|Yaml实现测试数据驱动


理念与同“UI自动化测试框架”中的“测试步骤的数据驱动”相同,接口中的测试步骤的数据驱动就是将接口的参数(比如 method、url、param等)封装到 yaml 文件中管理。当测试步骤发生改变,只需要修改 yaml 文件中的配置即可。
数据驱动就是数据的改变从而驱动自动化测试的执行,最终引起测试结果的改变。简单来说,就是参数化的应用。数据量小的测试用例可以使用代码的参数化来实现数据驱动,数据量大的情况下建议使用一种结构化的文件(例如yaml,json等)来对数据进行存储,然后在测试用例中读取这些数据。

原理与前面章节“UI自动化测试框架”中的“测试数据的数据驱动”大同小异。依然使用 @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以使用动态字段进行结构化,它以数据为中心,比 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() 方法中完成输入与结果的验证。

实际工作中,对于环境的切换和配置,为了便于维护,通常不会使用硬编码的形式完成。在“多环境下的接口测试”章节中已经介绍了,如何将环境的切换作为一个可配置的选项。本章节会把这部分内容进行重构,使用数据驱动的方式完成多环境的配置。

根据“多环境下的接口测试”章节,将此章节中的环境配置部分改为数据驱动的模式
代码如下:

#把host修改为ip,并附加host header
env={
    "docker.testing-studio.com": {
        "dev": "127.0.0.1",
        "test": "1.1.1.2"
    },
    "default": "dev"
}
data["url"]=str(data["url"]).replace(
    "docker.testing-studio.com",
    env["docker.testing-studio.com"][env["default"]]
)
data["headers"]["Host"]="docker.testing-studio.com"

依然以yaml为示例,将所有的环境配置信息放到 env.yml 文件中。如果怕出错,可以先使用yaml.safe_dump(env)将dict格式的代码转换为yaml。
如下所示,打印出来的,就是成功转换yaml格式的配置信息:

def test_send(self):
    env={
        "docker.testing-studio.com": {
            "dev": "127.0.0.1",
            "test": "1.1.1.2"
        },
        "default": "dev"
    }
    yaml2 = yaml.safe_dump(env)
    print("")
    print(yaml2)

将打印出来的内容粘贴到 env.yml 文件中: env.yml

docker.testing-studio.com:
  dev: "127.0.0.1"
  test: "1.1.1.2"
  level: 4
default:
  "dev"

将环境准备中的代码稍作修改,把env变量从一个典型dict改为,使用yaml.safe_load读取 env.yml:

# 把host修改为ip,并附加host header
env = yaml.safe_load(open("./env.yml"))
data["url"] = str(data["url"]).\
    replace("docker.testing-studio.com",
    env["docker.testing-studio.com"][env["default"]])
data["headers"]["Host"] = "docker.testing-studio.com"

如此一来,就可以实现使用数据驱动的方式,通过修改 env.yml 文件来直接修改配置信息。

相关文章
|
30天前
|
人工智能 搜索推荐 数据管理
探索软件测试中的自动化测试框架选择与优化策略
本文深入探讨了在现代软件开发流程中,如何根据项目特性、团队技能和长期维护需求,精准选择合适的自动化测试框架。
93 8
|
2月前
|
测试技术
软件测试的艺术:探索式测试的实践与思考
在软件开发的广阔海洋中,测试是确保航船稳健行驶的关键。本文将带你领略探索式测试的魅力,一种结合创造性思维和严格方法论的测试方式。我们将一起揭开探索式测试的神秘面纱,了解其核心概念、实施步骤和带来的效益。通过实际代码示例,你将学会如何将探索式测试融入日常的软件质量保证流程中,提升测试效率与质量。
|
1月前
|
测试技术 持续交付
探索软件测试中的自动化测试策略
随着软件开发周期的加速和市场需求的不断增长,传统的手动软件测试方法已难以满足现代软件开发的高效性和准确性要求。本文旨在探讨自动化测试在软件测试中的重要性、实施策略及其对提高软件质量的影响。通过分析自动化测试的优势与挑战,以及提供实用的自动化测试工具和框架选择指南,旨在帮助读者理解并应用自动化测试以提升软件开发效率和产品质量。
|
1月前
|
机器学习/深度学习 人工智能 监控
软件测试中的自动化测试策略与最佳实践##
在当今快速发展的软件行业中,自动化测试已成为确保软件质量和加速产品上市的关键工具。本文将探讨自动化测试的重要性,分析不同类型的自动化测试工具和框架,并深入讨论实施自动化测试的最佳实践。通过案例研究和数据分析,我们将揭示如何有效整合自动化测试到软件开发生命周期中,以及它如何帮助团队提高测试效率和覆盖率。 ##
61 1
|
4天前
|
分布式计算 Shell MaxCompute
odps测试表及大量数据构建测试
odps测试表及大量数据构建测试
|
10天前
|
开发框架 .NET Java
C#集合数据去重的5种方式及其性能对比测试分析
C#集合数据去重的5种方式及其性能对比测试分析
29 11
|
12天前
|
开发框架 .NET Java
C#集合数据去重的5种方式及其性能对比测试分析
C#集合数据去重的5种方式及其性能对比测试分析
41 10
|
2月前
|
测试技术 UED 开发者
软件测试的艺术与科学:探索有效的测试策略
在软件开发的宇宙中,测试是一颗璀璨的星辰,它不仅保障着产品的质量,也指引着项目的方向。本文将带你穿梭于测试的银河系,从基础的单元测试到复杂的集成测试,再到全面的系统测试,我们将一探究竟。你会发现,每一个测试阶段都是一次对代码深度和广度的挑战,也是一次对开发者耐心和智慧的考验。准备好了吗?让我们开始这段探索之旅,看看如何通过精心设计的测试案例来确保我们的软件能够在现实世界中稳健运行。
|
1月前
|
Java 测试技术 API
探索软件测试中的自动化测试框架
本文深入探讨了自动化测试在软件开发中的重要性,并详细介绍了几种流行的自动化测试框架。通过比较它们的优缺点和适用场景,旨在为读者提供选择合适自动化测试工具的参考依据。
|
1月前
|
数据管理 测试技术 持续交付
软件测试中的自动化测试策略与最佳实践
在当今快速迭代的软件开发环境中,自动化测试已成为确保软件质量和加速产品上市的关键手段。本文旨在探讨软件测试中的自动化测试策略,包括选择合适的自动化测试工具、构建有效的自动化测试框架以及实施持续集成和持续部署(CI/CD)。通过分析自动化测试的最佳实践,本文为软件开发团队提供了一系列实用的指南,以优化测试流程、提高测试效率并减少人为错误。
70 4