一:fixture作用于function
import pytest
class Test_fix():
@pytest.fixture()
def user(self):
print("用户名")
a = "admin"
return a
@pytest.fixture()
def psw(self):
print("密码")
b = "admin123"
return b
@pytest.fixture()
def test_1(self,user, psw):
'''传多个fixture'''
print("@@@@@账号:%s,密码:%s" % (user, psw))
cc = 3
return cc
def test_2(self,test_1):
print("第二个")
print("########",test_1)
执行结果:
============================= test session starts =============================
platform win32 – Python 3.7.4, pytest-5.2.1, py-1.8.0, pluggy-0.13.0 – D:\ProgramData\Anaconda3\python.exe
cachedir: .pytest_cache
rootdir: E:\自动化\PY_test
plugins: arraydiff-0.3, doctestplus-0.4.0, openfiles-0.4.0, remotedata-0.3.2
collecting … collected 1 item
test_fixture.py::Test_fix::test_2 用户名
密码
@@@@@账号:admin,密码:admin123
PASSED [100%]第二个
######## 3
============================== 1 passed in 0.03s ==============================
二:fixture的作用范围:
1、@pytest.fixture(scope=“function”)
@pytest.fixture(scope="function")
def first():
print("\n获取用户名,scope为function级别只运行一次1")
a="nuo"
return a
class TestCase():
# @pytest.fixture(scope="function")
# def first(self):
# print("\n获取用户名,scope为function级别只运行一次2")
# a = "nuo"
# return a
def test_1(self,first):
'用例传fixture'
print("测试账号:%s"%first)
assert first == "nuo"
def test_2(self,first):
'用例传fixture'
print("测试账号:%s"%first)
assert first == "nuo"
class Test_2():
def test(self):
print("第二个类")
输出为:
从中可以看出,作用范围是function,若function调用了该函数,则在调用的function执行之前,都会执行一次该函数。他的作用和setup_method是类似的。不过setup_method仅针对自己所在的类的实例有效。
2、
@pytest.fixture(scope=“class”)
@pytest.fixture(scope="class")
def first():
print("\n获取用户名,scope为class级别只运行一次1")
a="nuo"
return a
class TestCase():
def test_1(self,first):
'用例传fixture'
print("测试账号:%s"%first)
assert first == "nuo"
def test_2(self,first):
'用例传fixture'
print("测试账号:%s"%first)
assert first == "nuo"
def test1(self):
print("第一个类")
class Test_2():
def test_22(self,first):
'用例传fixture'
print("测试账号:%s"%first)
assert first == "nuo"
def test(self):
print("第二个类")
从中可以看出,如果类中的实例调用了该函数,则在每个调用了该函数的用例执行之前,就会先执行一次这个函数。和setup_class类似,不过setup_class仅针对自己所在的类的实例有效。
3、@pytest.fixture(scope=“module”)
@pytest.fixture(scope="module")
def first():
print("\n获取用户名,scope为module级别只运行一次1")
a="nuo"
return a
class TestCase():
def test_1(self,first):
'用例传fixture'
print("测试账号:%s"%first)
assert first == "nuo"
def test_2(self,first):
'用例传fixture'
print("测试账号:%s"%first)
assert first == "nuo"
def test1(self):
print("第一个类")
class Test_2():
def test_22(self,first):
'用例传fixture'
print("测试账号:%s"%first)
assert first == "nuo"
def test(self):
print("第二个类")
从中可以看出,如果.py文件中调用了该函数,则在所有的用例开始之前,只执行一次这个函数,和setup_module作用类似