pytest自定义测试固件_byseyOrd

前言

  固件Fixture是一些函数,pytest 会在执行测试函数之前(或之后)加载运行它们。主要是为一些单独测试用例需要预先设置与清理的情况下使用的。不同于setup和teardown,测试固件是自定义函数,能指定某些用例运行此固件的自定义函数

例子

@pytest.fixture()
def text():
    print("开始执行")          #使用pytest.fixture()装饰一个函数成为fixture

def test_one():
    print("执行第一个用例")

def test_two(text):          #用例传入fixture函数名,以此来确认执行
    print("执行第二个用例")

第一个参数不会运行先运行固件的自定义函数

固件函数使用yield定义用例运行之后运行的代码

@pytest.fixture()
def text():
    print("开始执行")
    yield                 #yield 之后的代码属于后处理,将在测试完成后执行
    print("执行完毕")

def test_one():
    print("执行第一个用例")

def test_two(text):
    print("执行第二个用例")

使用文件 conftest.py 集中管理固件

import pytest

@pytest.fixture(scope="session")
def start():
    print("\n打开首页")

  python会自动加载当前模块的conftest.py文件里的自定义测试固件,一般可以在根目录里定义更通用的自定义测试固件

注意注意conftest.py文件名是系统规定的名字

scope 作用域参数

  • function: 函数级,每个测试函数都会执行一次固件;
  • class: 类级别,每个测试类执行一次,所有方法都可以使用;
  • module: 模块级,每个模块执行一次,模块内函数和方法都可使用;
  • session: 会话级,一次测试只执行一次,所有被找到的函数和方法都可用。

 自定义测试固件的自动化与参数化

  自定义测试固件可以使用autouse参数实现自动化,而不用传入函数。可以使用params实现参数化

./conftest.py

@pytest.fixture(scope="module",params=['test1','test2'],autouse=True)
def text(request):
    print("开始执行")
    yield request.param
    print("执行完毕")

./test_sample.py

def test_one():     #此用例也会运行
    print("执行第一个用例")
    print(text)

def test_two(text):
    print("执行第二个用例")

猜你喜欢

转载自www.cnblogs.com/seyOrd/p/12681814.html