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

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

四种实现方法解析:

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

  2. 方法2:使用 pytest 的参数化

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

  4. 方法4:使用类参数

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

 
  1. import pytest

  2. import datetime

  3. from logger import log

  4. def repeat(count):

  5. def decorator(func):

  6. def wrapper(*args, **kwargs):

  7. for i in range(count):

  8. log.info(f"当前迭代次数: {i + 1}, 剩余次数: {count - i - 1}")

  9. func(*args, **kwargs)

  10. return wrapper

  11. return decorator

  12. class TestDemo1(object):

  13. count = 3

  14. @repeat(count)

  15. def test_01(self):

  16. log.info(f"迭代时间: {datetime.datetime.now()}:{self.count}")

  17. pytest.assume(3 > 2)

方法2:使用 pytest 的参数化

 
  1. import pytest

  2. import datetime

  3. from logger import log

  4. class TestDemo2(object):

  5. count = 3

  6. @pytest.mark.parametrize("iteration", range(count))

  7. def test_02(self, iteration):

  8. remaining = self.count - iteration - 1

  9. log.info(f"当前迭代次数: {iteration + 1}, 剩余次数: {remaining}")

  10. pytest.assume(3 > 2)

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

 
  1. import pytest

  2. import datetime

  3. from logger import log

  4. class TestDemo3(object):

  5. count = 3

  6. def test_03(self):

  7. for i in range(self.count):

  8. remaining = self.count - i - 1

  9. log.info(f"当前迭代次数: {i + 1}, 剩余次数: {remaining}")

  10. pytest.assume(3 > 2)

方法4:使用类参数

 
  1. import pytest

  2. import datetime

  3. from logger import log

  4. class TestDemo4(object):

  5. count = 3

  6. current_count = 0

  7. @pytest.mark.repeat(count)

  8. def test_04(self):

  9. TestDemo4.current_count += 1

  10. log.info(f"当前迭代次数: {TestDemo4.current_count}, 剩余次数: {self.count - TestDemo4.current_count}")

  11. pytest.assume(3 > 2)

程序入口:main.py

 
  1. import os

  2. import time

  3. import pytest

  4. if __name__ == "__main__":

  5. """

  6. "-s": 输出调试信息,包括 print 打印的信息。这通常在调试时使用,因为它会显示测试用例中的所有 print 输出。

  7. "-v": 显示更详细的信息.

  8. "-n=num": 启用多线程或分布式运行测试用例。这需要安装 pytest-xdist 插件模块。允许并行运行的测试用例数量。

  9. "-k=value": 只执行用例的 nodeid 包含指定值的用例。这可以用于根据表达式匹配并运行特定的测试用例。

  10. "-m"=标签名: 执行被 @pytest.mark.标签名 标记的用例。这允许你根据定义的标签来过滤和运行测试用例。

  11. "-x": 一旦有任何一个用例执行失败,就停止当前线程的测试执行。

  12. "--maxfail=num": 与 -x 功能相似,但允许指定失败用例的最大数量后停止执行。

  13. "--reruns=num": 失败用例重跑指定次数。这需要安装 pytest-rerunfailures 插件模块。

  14. """

  15. now = time.strftime("%Y_%m_%d_%H_%M_%S")

  16. pytest.main(["-s", "./tests", '--alluredir', f'./report/xml_{now}'])

  17. cmd = rf'allure generate ./report/xml_{now} -o ./report/report_{now} --clean'

  18. print(f"{cmd}")

  19. os.system(cmd)

运行结果:

在这里插入图片描述
Allure:

在这里插入图片描述

注意事项:

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

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

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

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

感谢每一个认真阅读我文章的人,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走:

这些资料,对于【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴上万个测试工程师们走过最艰难的路程,希望也能帮助到你!有需要的小伙伴可以点击下方小卡片领取   

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值