既然fixtures函数也是我们本身写的,那不免会发生异常,当fixture函数异常后,pytest中如何处理呢?app
首先,在pytest中,若是一个测试函数中传入了多个fixture函数,那么pytest会尽量的按线性顺序前后执行。
若是,先执行的fixture函数有问题引起了异常,那么pytest将会中止执行这个测试函数的fixture,而且标记此测试函数有错误。函数
可是,当测试被标记为有错误时,并非说这个测试函数的结果失败了,这仅仅意味着测试函数所依赖的fixture有问题,
致使测试函数不能正常进行。测试
因此,这就引出了另外一个值得关注的点:fixture虽灵活好用,切记不要滥用。code
在实际应用中,要尽量的减小没必要要的依赖关系。这样的话,测试函数就不会由于其余不相关的问题,致使本身不能正常运行。test
结合代码示例,进一步了解:import
import pytest @pytest.fixture def order(): return [] @pytest.fixture def append_first(order): order.append(1) @pytest.fixture def append_second(order, append_first): order.extend([2]) @pytest.fixture(autouse=True) def append_third(order, append_second): order += [3] def test_order(order): assert order == [1, 2, 3]
首先声明,这段代码是能够正常运行的,测试函数test_order
也是正常经过的。im
假设,无论怎样,在order.append(1)
处总会报错。这时候,咱们其实没法肯定order.extend([2])
或order +=[3]
是否也有问题。异常
在append_first
报错抛出异常后,pytest就不会继续运行任何的fixture函数了,就连测试函数test_order
自己也不会运行。sse