pytest教程(二)---fixture装饰器

一、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即为测试用例:

pytest教程(二)---fixture装饰器

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"])

 

 

上一篇:conftest文件作用介绍


下一篇:pytest测试框架实战一