一、fixture的定义方法
把一个函数定义为fixture很简单,只需要在函数声明之前加上“@pytest.fixture”,参数如下:fixture(scope="function", params=None, autouse=False, ids=None, name=None):
1、scope:有四个级别参数 "function" (默认), "class", "module" or "session":
☆ session多个文件调用一次,可以跨.py文件调用
☆ module每个.py文件调用一次
☆ class每个类调用一次
☆ function每个函数或方法都会调用
2、params: 一个可选的参数列表,默认为None。当它不为None时,params里面的每个值,fixture都会去调用执行一次,就像执行for循环一样把params里的值遍历一次;
3、autouse: 当默认为False,就可以选择另外两种方式来调用fixture。当设置为True时,在一个session内的所有的测试用例都会自动调用这个fixture;
4、ids: 每个字符串id的列表,每个字符串对应于params 这样他们就是测试ID的一部分。 如果没有提供ID它们将从params自动生成;
5、name: fixture的名称,代表装饰函数的名称。
二、fixture的调用方法
fixture函数定义完成之后,如果想在测试用例中调用它,调用方式有三种:
☆ 直接调用;
☆ 使用fixture调用,在测试用例前加上“@pytest.mark.usefixtures(“名”)”;
☆ 使用fixture的autouse参数来调用,将autose参数置为True,则该session下的所有用例都会自动调用它。
三、fixture的返回值
fixture可以返回一个值、一个元组、list或字典。
四、conftest.py
如果多个用例需要调用同一个功能。我们可以将fixture写入conftest.py 配置文件里实现数据共享,同时又方便统一管理这些公共的功能。
conftest.py配置需要注意以下几点:
☆ conftest.py配置脚本名称是固定的,不能改名称;
☆ conftest.py与运行的用例要在同一个目录下,并且有__init__.py文件;
☆ 不需要import导入 conftest.py,用例会自动查找。
五、实例
conftest.py以及test_fixture.py放在同一目录下,test_fixture.py即为测试用例:
conftest.py内容如下:
import pytest
@pytest.fixture()
def user():
print("获取用户名")
a = "hillwill"
b = "wxt"
return (a,b)
test_fixture.py内容如下:
import pytest
def test_1(user):
user1 = user[0]
print("用户名1:%s" % user1)
assert user1 == "hillwill"
def test_2(user):
user2 = user[1]
print("用户名2:%s" % user2)
assert user1 == "wxt"
if __name__ == "__main__":
pytest.main(["-s", "test_fixture.py"])