微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

 

 

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐