pytest-fixture之conftest.py

conftest.py作用

多个.py文件想使用同一个前置函数,如果使用setup和teardown代码重复率较高,并且编写麻烦,所以可以使用conftest.py进行实现

conftest.py配置

  • conftest.py 配置脚本名称是固定的,不能改名称
  • conftest.py 不运行的用例要在同一个 pakage 下,并且有__init__.py文件
  • 不需要 import 导入 conftest.py,pytest 用例会自动查找

conftest.py示例

示例一:无yield

# -*- coding: utf-8 -*-
'''
@Time : 2021/1/18
@Author : 
@File : conftest.py
@describe : 
'''
import pytest

@pytest.fixture(scope='session')
def login():
    print('用户登陆')

测试用例直接调用conftest.py文件中的函数

# -*- coding: utf-8 -*-
'''
@Time : 2021/1/18
@Author : 
@File : c.py
@describe : 
'''
import pytest

class Testaa:

    def test_one(self,login):
        print('测试用例一')

    def test_two(self):
        print('测试用例二')

    def test_three(self,login):
        print('测试用例三')

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

运行结果:
pytest-fixture之conftest.py_第1张图片

示例二:有yield

# -*- coding: utf-8 -*-
'''
@Time : 2021/1/18
@Author : 
@File : conftest.py
@describe : 
'''
import pytest

@pytest.fixture(scope='session')
def login():
    print('用户登陆')
    yield
    print('用户退出')

用例:

# -*- coding: utf-8 -*-
'''
@Time : 2021/1/18
@Author : 
@File : c.py
@describe : 
'''
import pytest

class Testaa:

    def test_one(self,login):
        print('测试用例一')

    def test_two(self):
        print('测试用例二')

    def test_three(self,login):
        print('测试用例三')

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

运行结果如下:
pytest-fixture之conftest.py_第2张图片

  • 一般的fixture 函数会在测试函数之前运行,但是如果 fixture 函数包含 yiled,那么会在 yiled处停止并转而运行测试函数,等测试函数执行完毕后再回到该 fixture 继续执行 yiled 后面的代码。
  • 可以将 yiled前面的代码看作是 setup,yiled 后面的部分看作是 teardown 的过程。
  • 无论是测试函数中发生了什么是成功还是失败或者 error 等情况,yiled 后面的代码都会被执行,yiled 中的返回数据也可以在测试函数中使用

你可能感兴趣的:(pytest学习笔记,python)