美文网首页
pytest-fixture的使用

pytest-fixture的使用

作者: Chaweys | 来源:发表于2021-06-01 23:02 被阅读0次

fixture可以让我们自定义测试用例的前置条件

fixture可以让我们自定义测试用例的前置条件

fixture命名方式灵活,不局限于 setup 和teardown 这几个命名
conftest.py 配置里可以实现数据共享,不需要 import 就能自动找到fixture
scope="module" 可以实现多个.py 跨文件共享前置
scope="session" 以实现多个.py 跨文件使用一个 session 来完成多个用例


举例:
@pytest.fixture(scope="function", params=None, autouse=False, ids=None, name=None)
def test():
    print("fixture初始化的参数列表")

fixture参数列表:
scope:  fixture的作用域,默认:function,还有class、module、package、session四个【常用】
autouse:默认:False,需要用例手动调用该fixture;如果是True,所有作用域内的测试用例都会自动调用该fixture
name:   默认:装饰器的名称,同一模块的fixture相互调用建议写个不同的name
注:     session的作用域:是整个测试会话,即开始执行pytest到结束测试


测试用例如何调用fixture?
(1)、测试用例函数的入参传入fixture的名称
(2)、测试用例添加上装饰器 @pytest.mark.usefixtures(fixture_name)
(3)、定义fixture时设置参数autouse=True


知识点:
在类声明上面加 @pytest.mark.usefixtures() ,代表这个类里面所有测试用例都会调用该fixture
可以叠加多个 @pytest.mark.usefixtures() ,先执行的放底层,后执行的放上层
可以传多个fixture参数,先执行的放前面,后执行的放后面
如果fixture有返回值,用 @pytest.mark.usefixtures() 是无法获取到返回值的,必须用传参的方式(方式一)


#coding=utf-8
import pytest

@pytest.fixture()  #定义第一个fixture,fixture_name=login
def login():
    print("请先登录login1")

@pytest.fixture()  #定义第二个fixture,fixture_name=login2
def login2():
    print("请先登录login2")

#第一种调用fixture方式:fixture_name作为入参传入
def test_one(login):
    print("测试test_one")


#第二种调用fixture方式:定义装饰器并传入fixture_name作为入参
@pytest.mark.usefixtures("login","login2")
def test_two():
    print("测试test_two")


#第三种调用fixture方式:定义fixture为自动调用
@pytest.fixture(autouse=True)
def login3():
    print("所有的测试用例都自动调用该login3")



if __name__ == '__main__':
    pytest.main(["-s","test_fixture.py"])
    
结果:
test_fixture.py 
所有的测试用例都自动调用该login3
请先登录login1
测试test_one

.所有的测试用例都自动调用该login3
请先登录login1
请先登录login2
测试test_two
.

fixture实现teardown后置条件操作

#fixture实现teardown操作,利用yield关键字来开启teardown操作
#coding=utf-8
import pytest

@pytest.fixture()
def login():
    #测试用例方法的前置操作即setup
    print("请登录")
    name="账号"
    pwd="密码"
    age="年龄"
    yield name,pwd,age #yield返回name,pwd,age
    #测试用例方法的后置操作即teardown,由前面的yield关键字开启
    print("登录结束")

def test_one(login): #测试用例方法传入fixture的name作为参数,调用fixture
    print(login)
    name,pwd,age=login   #为何可以赋值?因为login函数由返回值yield定义的
    assert "账号" in name
    assert "密码" in pwd
    assert "年龄" in age

if __name__ == '__main__':
    pytest.main(["-s","test_fixture.py"])

结果:
test_fixture.py 请登录        【这是前置条件】
('账号', '密码', '年龄')
.登录结束                     【这是后置条件】

相关文章

  • pytest-fixture的使用

    http://doc.pytest.org/en/latest/fixture.html fixture的优点 显...

  • pytest-fixture的使用

    fixture可以让我们自定义测试用例的前置条件 fixture实现teardown后置条件操作

  • pytest-fixture使用详解03(上)

    一、fixture的特点 在测试函数运行前后,由pytest执行的外壳函数,代码可定制用于将测试前后进行预备或清理...

  • pytest-fixture使用详解03(下)

    结合上一篇,补充fixture的用法 一、什么是fixture? fixture属于pytest中的一种方法,可以...

  • pytest-fixture

    作用 1、完成setup和teardown操作,处理数据库、文件等资源的打开和关闭

  • pytest-fixture

    执行测试后自动执行某些操作,用到关键字yeild scope="module"代表在模块的最后一次测试完成后执行s...

  • pytest-fixture用法

    fixture简介 fixture的目的是提供一个固定基线,在该基线上测试可以可靠地和重复地执行。fixture提...

  • pytest-fixture中的yield及autouse

    记录一下fixture中关于yield以及autouse参数的两个小细节。 yield yield在fixture...

  • iconfont的使用(下载使用)

    1、下载文件 2、在生命周期中引入项目 beforeCreate () { var domModule = ...

  • Gson的使用--使用注解

    Gson为了简化序列化和反序列化的过程,提供了很多注解,这些注解大致分为三类,我们一一的介绍一下。 自定义字段的名...

网友评论

      本文标题:pytest-fixture的使用

      本文链接:https://www.haomeiwen.com/subject/wwdzjltx.html