pytest Fixtures reference
内置fixture
@pytest.fixture 装饰器的形式来使用
1 | capfd |
fixture 使用
1 | import pytest |
因此,当它们运行时,外部将不存在找到内部的问题,因为 pytest 是从测试的角度进行搜索的
跨文件使用多个fixture:conftest.py
1 | tests/ |
第三方插件fixture
1 | tests/ |
If plugin_a is installed and provides the fixture a_fix, and plugin_b is installed and provides the fixture b_fix, then this is
fixture 执行顺序
三个要素 scope dependencies autouse
scope
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29import pytest
def order():
return []
def func(order):
order.append("function")
def cls(order):
order.append("class")
def mod(order):
order.append("module")
def pack(order):
order.append("package")
def sess(order):
order.append("session")
class TestClass:
def test_order(self, func, cls, mod, pack, sess, order):
assert order == ["session", "package", "module", "class", "function"]依赖关系执行
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36import pytest
def order():
return []
def a(order):
order.append("a")
def b(a, order):
order.append("b")
def c(b, order):
order.append("c")
def d(c, b, order):
order.append("d")
def e(d, b, order):
order.append("e")
def f(e, order):
order.append("f")
def g(f, c, order):
order.append("g")
def test_order(g, order):
assert order == ["a", "b", "c", "d", "e", "f", "g"]Autouse fixtures are executed first within their scope
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36import pytest
def order():
return []
def a(order):
order.append("a")
def b(a, order):
order.append("b")
def c(b, order):
order.append("c")
def d(b, order):
order.append("d")
def e(d, order):
order.append("e")
def f(e, order):
order.append("f")
def g(f, c, order):
order.append("g")
def test_order_and_g(g, order):
assert order == ["a", "b", "c", "d", "e", "f", "g"]看 c和d
注意 一个 autouse fixture 将自动执行每一个可以到达它的测试,即使他们没有请求它1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25import pytest
def order():
return []
def c1(order):
order.append("c1")
def c2(order):
order.append("c2")
def c3(order, c1):
order.append("c3")
class TestClassWithC1Request:
def test_order(self, order, c1, c3):
assert order == ["c1", "c3"]
class TestClassWithoutC1Request:
def test_order(self, order, c2):
assert order == ["c1", "c2"]
1 | import pytest |