用法:
fixture类似于不同的函数间调用。使用fixture标记的fuction可以被其它函数调用并拿到对应的返回值。
备注:
- fixture标记的test_case不会被认为是一个case(pytest收集case时不计数),最后未标记的才是
-
若前序case(fixture标记的内容报错),调用方也会被标记为失败
使用方式:
- 在方法func1()上标记@pytest.fixture,则func1可以被调用。可以通过func1名称拿到对应方法返回值
使用参考: import pytest @pytest.fixture() def test_a(): assert 1 == 1 print('in a') return 3 @pytest.fixture() def test_b(test_a): print(test_a) print('in b') assert test_a in [2, 3] return (4, 5, 6) def test_c(test_b, test_a): print(test_b[1]) print('in c') assert test_b[1] in (4, 5, 6, 7)
返回结果:
in a
3
in b
5
in c
.
1 passed in 0.90s
- fixture使用可以标记使用范围
fixture里面有个scope参数可以控制fixture的作用范围:session>module>class>function
-function:每一个函数或方法都会调用
-class:每一个类调用一次,一个类中可以有多个方法
-module:每一个.py文件调用一次,该文件内又有多个function和class
-session:是多个文件调用一次,可以跨.py文件调用,每个.py文件就是module
使用效果:
@pytest.fixture(scope='module')
def test_a():
assert 1 == 1
print('in a')
return 3
# @pytest.fixture()
def test_b(test_a):
print(test_a)
print('in b')
assert test_a in [2, 3]
return (4, 5, 6)
def test_c(test_a):
# print(test_b[1])
print('in c')
assert 4 in (4, 5, 6, 7)返回结果:
in a
3
in b
.in c
.
2 passed in 0.87s