pytest:4种方法实现 - 重复执行用例 - 展示迭代次数

简介:在软件测试中,我们经常需要重复执行测试用例,以确保代码的稳定性和可靠性。在本文中,我们将介绍四种方法来实现重复执行测试用例,并显示当前迭代次数和剩余执行次数。这些方法将帮助你更好地追踪测试执行过程,提升测试效率。

历史攻略:

pytest常用命令行参数解析

pytest-cov:好用的统计代码测试覆盖率插件

Pytest用例自定义 - 重复、并行、串行

Python:封装logging模块和引用

四种实现方法解析:

方法1:使用自定义装饰器
方法2:使用 pytest 的参数化
方法3:在测试方法内部使用循环
方法4:使用类参数

方法1:使用自定义装饰器

# -*- coding: utf-8 -*-
# time: 2024/5/12 17:47
# file: test_demo1.py
# 公众号: 玩转测试开发
import pytest
import datetime
from logger import log


def repeat(count):
    def decorator(func):
        def wrapper(*args, **kwargs):
            for i in range(count):
                log.info(f"当前迭代次数: {i + 1}, 剩余次数: {count - i - 1}")
                func(*args, **kwargs)

        return wrapper

    return decorator


class TestDemo1(object):
    count = 3

    @repeat(count)
    def test_01(self):
        log.info(f"迭代时间: {datetime.datetime.now()}:{self.count}")
        pytest.assume(3 > 2)

方法2:使用 pytest 的参数化

# -*- coding: utf-8 -*-
# time: 2024/5/12 17:47
# file: test_demo2.py
# 公众号: 玩转测试开发
import pytest
import datetime
from logger import log


class TestDemo2(object):
    count = 3

    @pytest.mark.parametrize("iteration", range(count))
    def test_02(self, iteration):
        remaining = self.count - iteration - 1
        log.info(f"当前迭代次数: {iteration + 1}, 剩余次数: {remaining}")
        pytest.assume(3 > 2)

方法3:在测试方法内部使用循环

# -*- coding: utf-8 -*-
# time: 2024/5/12 17:47
# file: test_demo3.py
# 公众号: 玩转测试开发
import pytest
import datetime
from logger import log


class TestDemo3(object):
    count = 3

    def test_03(self):
        for i in range(self.count):
            remaining = self.count - i - 1
            log.info(f"当前迭代次数: {i + 1}, 剩余次数: {remaining}")

            pytest.assume(3 > 2)

方法4:使用类参数

# -*- coding: utf-8 -*-
# time: 2024/5/12 17:47
# file: test_demo4.py
# 公众号: 玩转测试开发
import pytest
import datetime
from logger import log


class TestDemo4(object):
    count = 3
    current_count = 0

    @pytest.mark.repeat(count)
    def test_04(self):
        TestDemo4.current_count += 1
        log.info(f"当前迭代次数: {TestDemo4.current_count}, 剩余次数: {self.count - TestDemo4.current_count}")
        pytest.assume(3 > 2)

程序入口:main.py

# -*- coding: utf-8 -*-
# time: 2024/5/12 17:46
# file: main.py
# 公众号: 玩转测试开发
import os
import time
import pytest

if __name__ == "__main__":
    """
    "-s": 输出调试信息,包括 print 打印的信息。这通常在调试时使用,因为它会显示测试用例中的所有 print 输出。
    "-v": 显示更详细的信息.
    "-n=num": 启用多线程或分布式运行测试用例。这需要安装 pytest-xdist 插件模块。允许并行运行的测试用例数量。
    "-k=value": 只执行用例的 nodeid 包含指定值的用例。这可以用于根据表达式匹配并运行特定的测试用例。
    "-m"=标签名: 执行被 @pytest.mark.标签名 标记的用例。这允许你根据定义的标签来过滤和运行测试用例。
    "-x": 一旦有任何一个用例执行失败,就停止当前线程的测试执行。
    "--maxfail=num": 与 -x 功能相似,但允许指定失败用例的最大数量后停止执行。
    "--reruns=num": 失败用例重跑指定次数。这需要安装 pytest-rerunfailures 插件模块。
    """
    now = time.strftime("%Y_%m_%d_%H_%M_%S")
    pytest.main(["-s", "./tests",  '--alluredir', f'./report/xml_{now}'])
    cmd = rf'allure generate ./report/xml_{now} -o ./report/report_{now} --clean'
    print(f"{cmd}")
    os.system(cmd)

运行结果:

图片

Allure:

图片

注意事项:

1、避免全局变量冲突:在方法四中,我们使用了类变量来追踪迭代次数。如果有多个测试类同时运行,可能会导致变量冲突。建议在每个测试类中使用不同的变量名称。

2、性能考虑:在大量重复执行的情况下,打印日志或控制台输出可能会影响性能。可以根据需要调整输出频率或记录方式。

3、测试独立性:确保每次迭代的测试用例是独立的,不会相互影响。可以在每次迭代前重置测试环境。

总结:在本文中,我们介绍了四种实现重复执行测试用例的方法,并显示当前迭代次数和剩余执行次数。这些方法各有优缺点,可以根据具体需求选择最适合的方法。希望这些方法能帮助你更好地进行测试管理,提高测试效率和代码稳定性。个人推荐采用第四种类参数的方式。

相关推荐

  1. pytest并发执行方案

    2024-07-21 08:12:02       32 阅读
  2. python——pytest对于失败的重新执行

    2024-07-21 08:12:02       40 阅读
  3. C++中实现容器的3方法

    2024-07-21 08:12:02       43 阅读
  4. pytest+allure批量执行测试

    2024-07-21 08:12:02       49 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-21 08:12:02       52 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-21 08:12:02       54 阅读
  3. 在Django里面运行非项目文件

    2024-07-21 08:12:02       45 阅读
  4. Python语言-面向对象

    2024-07-21 08:12:02       55 阅读

热门阅读

  1. 分享一款开源免费的ftp服务工具——Pyftpsync

    2024-07-21 08:12:02       19 阅读
  2. 线程局部变量共享

    2024-07-21 08:12:02       18 阅读
  3. SQL Server报告服务的艺术:在SSRS中打造专业报告

    2024-07-21 08:12:02       17 阅读
  4. 探索Sklearn的分层抽样:数据科学中的精确艺术

    2024-07-21 08:12:02       18 阅读
  5. SQL Server分布式查询:跨数据库的无缝数据探索

    2024-07-21 08:12:02       18 阅读
  6. Vue的渲染函数:深入探索与应用实践

    2024-07-21 08:12:02       16 阅读
  7. mac os 去除压缩包下的__MACOSX

    2024-07-21 08:12:02       17 阅读