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

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

 

 

相关文章

目录1、前言2、mark的使用(一)注册自定义标记(二)在测试...
用例执行状态用例执行完成后,每条用例都有自己的状态,常见...
什么是conftest.py可以理解成一个专门存放fixture的配置文件...
前言pytest默认执行用例是根据项目下的文件名称按ascii码去收...
前言:什么是元数据?元数据是关于数据的描述,存储着关于数...