如何通过pytest parametrize实现完整测试流程的顺序参数化执行?
解决Pytest参数化类的执行顺序问题
默认情况下,在测试类上使用@pytest.mark.parametrize时,Pytest会对每个测试方法单独遍历所有参数,执行顺序为test_first(1) → test_first(2) → test_second(1) → test_second(2),这和你期望的test_first(1) → test_second(1) → test_first(2) → test_second(2)不符。
要实现需求,你可以将参数化逻辑改为类级别的fixture,让每个参数值对应一次类实例化,类内所有测试方法共享该参数值执行:
import pytest class TestClass: @pytest.fixture(scope="class", params=[1, 2]) def args(self, request): return request.param def test_first(self, args): print(args) def test_second(self, args): print(args)
原理说明
scope="class"指定fixture的作用域为类,每个参数值会触发一次类的初始化- 类内所有测试方法都会使用当前参数值完成全部执行后,才会切换到下一个参数值,从而实现你想要的执行顺序
内容的提问来源于stack exchange,提问作者Saba
相关产品推荐
相关产品推荐

