关键特性:
1、每个fixtrue可以互相调用,有独立的命名。
2、可以实现unittest不能的实现的功能,比如unittest中的测试用例和测试用例之间是无法传递参数和数据的,但是fixture却可以解决这个问题
3、从简单的单元扩展到复杂的功能测试,允许根据配置和组件选项对fixture和测试用例进行参数化
和setup/teardown对比
1、setup/teardown是针对测试脚本全局来设置的,不能针对某一个方法来设置
2、fixture命名方式灵活,而setup/teardown,只能使用setup、teardown、setup_method等
3、使用fixture的conftest方式可以跨模块(py文件)来共享前置、后置的数据,而且在调用时不需要导入fixture修饰的方法,即scope="module"方式
4、fixture可以实现多模块(py文件)共用一个session的情况,即scop=session方式
作用范围
1、function:每一个函数或方法都会调用
2、class:每一个类调用一次,一个类中可以有多个方法
3、module:每一个.py文件调用一次,该文件内又有多个function和class
4、session:多个文件调用一次,可以跨.py文件调用(通常这个级别会结合conftest.py文件使用)
用法
1、作为参数使用
fixture的名字直接作为测试用例的参数,用例调用fixture的返回值,直接将fixture的函数名称当做变量名称;如果用例需要用到多个fixture的返回数据,fixture也可以返回一个元祖,list或字典,然后从里面取出对应数据。
将fixture函数作为参数传递给测试用例
@pytest.fixture()def login(): print("this is login fixture") user = "chen" pwd = 123456 return user, pwddef test_login(login):
"""将fixture修饰的login函数作为参数传递给本用例"""
print(login)
assert login[0] == "chen"
assert login[1] == 123456 assert "chen" in str(login)
同一个用例中传入多个fixtrue函数
@pytest.fixture()def user(): user = "cris" return user@pytest.fixture()def pwd(): pwd = "123456" return pwddef test_trans_fixture(user, pwd):
"""同一条用例中传入多个fixture函数"""
print(user, pwd) assert "cris" in str(user) assert pwd == "123456"
fixture函数之间的相互传递
@pytest.fixture()
def user2():
user = "cris"
return user@pytest.fixture()
def login_info(user2):
"""fixture与fixture函数之间的相互传递"""
pwd = "e10adc3949ba59abbe56e057f20f883e"
return user2, pwddef test_assert_login_info(login_info):
print(login_info)
print(type(login_info))
assert login_info[0] == "cris"
assert login_info[1] == "e10adc3949ba59abbe56e057f20f883e"
其余用法可参考
https://baijiahao.baidu.com/s?id=1743909872503109022&wfr=spider&for=pc