Pytest+Yaml 数据驱动测试用例

简介:当需要执行的测试用例达到一定的量后,存储和管理测试用例直接放在test_case显然是不合理的,需要将测试用例存储在测试用例文件。综合来看,主要有3种方式存储,即:excel、csv、yaml。

Excel: 提供了丰富的格式和功能,可以方便地进行编辑和维护。图形界面使得用户可以直观地看到数据。但不是纯文本格式,不适合版本控制,也不易于自动化测试工具的集成。

CSV: 纯文本格式,易于版本控制,也易于自动化工具处理。缺乏Excel的直观性和功能,不适合存储复杂的测试用例数据。

YAML:可读性高,可读取的数据序列化格式,易于维护和阅读。它支持复杂的数据结构,如列表和字典。YAML不提供Excel那样的可视化界面。

小记:萝卜青菜各有所爱,如果需要设计比较复杂的业务场景,个人更倾向于yaml。

历史攻略:

Python:读写yaml

Python:读写CSV文件

Python:xlrd和xlwt模块操作Excel表格

pytest+allure安装和使用

Python:封装logging模块和引用

安装依赖:

pip install pyyaml

测试用例文件:yaml

test_demo:
  test_demo_01:
    before_cmd_list: ["ls -al", "hostnamect"]
    cmd_list: ["free -h"]
    assert: ["Mem:"]
    after_cmd_list: ["date", "who"]

  test_demo_02:
    before_cmd_list: ["pwd"]
    cmd_list: ["date"]
    assert: ["2023"]
    after_cmd_list: ["echo python2"]

  test_demo_03:
    before_cmd_list: ["pwd"]
    cmd_list: ["date"]
    assert: ["2024"]
    after_cmd_list: ["echo python3"]

编写读取yaml测试用例的方法 read_yaml.py

# -*- coding: utf-8 -*-
# time: 2024/3/29 1:19
# file: read_ym.py
# 公众号: 玩转测试开发
import yaml


def read_yaml(yaml_path, node_name):
    with open(yaml_path, "r", encoding="utf8")as f:
        data = yaml.safe_load(f)
        print(data[node_name])
    return list(data[node_name].values())


if __name__ == '__main__':
    yaml_path = r"../data/demo.yaml"
    data = read_yaml(yaml_path, "test_demo")

test_demo.py解析参数化

# -*- coding: utf-8 -*-
# time: 2024/3/31 10:34
# file: test_demo.py
# 公众号: 玩转测试开发
import time
import pytest
from lib.read_ym import read_yaml
from logger import log


class TestDemo:

    @pytest.mark.parametrize("case_info", read_yaml("./data/demo.yaml", "test_demo"))
    def test_demo(self, case_info):
        log.info(case_info["before_cmd_list"])
        log.info(case_info["cmd_list"])
        log.info(case_info["assert"])
        log.info(case_info["after_cmd_list"])

执行main.py

# -*- coding: utf-8 -*-
# time: 2024/03/24 10:30
# file: main.py
# 公众号: 玩转测试开发
import os
import pytest

if __name__ == "__main__":
    # step-1:use pytest run test_case
    pytest.main(["-s", "test_case/test_demo.py", '-n', 'auto', "--alluredir", "./report"])

    # step-2:auto report json data,zip to allure-html
    os.system("allure serve report")

运行结果:

图片

  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
pytest是一个Python的测试框架,用于编写和运行测试用例。而yaml则是一种常见的数据格式,用于存储和传输数据。 在pytest中,可以使用ddt(Data-Driven Testing)模块来进行数据驱动的测试。ddt模块允许我们将测试用例的输入数据和预期结果从代码中分离出来,以yaml格式存储在单独的文件中。这样一来,我们可以轻松地修改和扩展测试数据,而无需修改测试代码。 使用ddt进行数据驱动测试的步骤如下: 1. 安装ddt模块:在终端中运行`pip install ddt`命令来安装ddt模块。 2. 在测试类中引入ddt装饰器:在测试类上方添加`@ddt`装饰器,以告诉pytest该类将使用ddt模块。 3. 使用@data装饰器和@unpack装饰器:在测试方法上方添加`@data`装饰器,并传入从yaml文件中读取的测试数据。如果测试数据是一个列表,可以使用`@unpack`装饰器将其拆分为多个参数,方便使用。 4. 在测试方法中使用测试数据:在测试方法内部,使用传入的测试数据进行测试操作。通过调用断言函数来比较实际结果和预期结果,以判断测试是否通过。 5. 在命令行中运行测试用例:在终端中运行命令`pytest`来执行测试用例pytest将自动查找和执行包含ddt装饰器的测试方法,并使用测试数据进行多次测试。 通过这种方式,我们可以通过简单修改或添加yaml文件中的测试数据,从而轻松地扩展和维护测试用例。同时,ddt模块还提供了更多的装饰器和功能,如@file_data、@cases、@data_class等,可以满足各种不同的测试需求。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值