pytest中的fixtrue

发布时间 2023-07-19 16:58:23作者: 娜乌西卡在路上

关键特性:

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