本文共 2285 字,大约阅读时间需要 7 分钟。
重复执行测试用例是确保代码稳定性和可靠性的重要手段。本文将介绍四种实现重复执行测试用例的方法,并展示当前迭代次数和剩余执行次数,帮助开发者更好地追踪测试执行过程,提升测试效率。
通过创建自定义装饰器,可以轻松实现测试用例的重复执行。这种方法适用于需要在函数级别控制迭代次数的场景。
import pytestimport datetimefrom logger import logdef 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 decoratorclass TestDemo1(object): count = 3 @repeat(count) def test_01(self): log.info(f"迭代时间: {datetime.datetime.now()}:{self.count}") pytest.assume(3 > 2) Pytest 提供了 @pytest.mark.parametrize 装饰器,适用于将测试用例参数化处理。
import pytestimport datetimefrom logger import logclass 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) 直接在测试方法内部使用循环来控制迭代次数,无需依赖外部装饰器。
import pytestimport datetimefrom logger import logclass 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) 通过类参数来控制迭代次数,可以在测试类中统一管理重复执行的次数。
import pytestimport datetimefrom logger import logclass 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) import osimport timeimport pytestif __name__ == "__main__": 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) 以上四种方法各有优劣,选择哪种方法取决于具体需求。个人推荐采用方法四(使用类参数),因为它提供了更直观的控制和管理方式。希望这些方法能帮助开发者更好地管理测试流程,提升代码稳定性和测试效率。
转载地址:http://hnafk.baihongyu.com/