在Python框架中,conftest.py文件通常用于共享测试配置和夹具(fixtures)。它位于测试文件或测试目录的顶级位置,并在运行测试时自动加载。

以下是一些在conftest.py中常见的代码示例:

  • 导入必要的库和模块:
import pytest
from selenium import webdriver


# 定义全局的夹具(fixtures):

@pytest.fixture(scope='session')
def browser():
    driver = webdriver.Chrome()  # 初始化浏览器
    yield driver  # 返回浏览器实例
    driver.quit()  # 关闭浏览器


# 定义其他自定义夹具(fixtures):

@pytest.fixture
def login(browser):
    # 登录操作
    # 返回登录后的页面对象或其他需要的数据
    pass

上述示例中的login夹具是一个自定义夹具,它可以在测试函数中作为参数使用,用于模拟登录操作并返回登录后的页面对象或其他需要的数据。

  • 添加钩子函数(hooks):
def pytest_runtest_setup(item):
    # 在每个测试用例运行之前执行的代码
    pass

def pytest_runtest_teardown(item):
    # 在每个测试用例运行之后执行的代码
    pass

上述示例中的pytest_runtest_setuppytest_runtest_teardown是钩子函数,它们可以在每个测试用例运行之前和之后执行自定义的代码。

需要注意的是,conftest.py中的代码可以根据测试需求进行扩展或修改。上述示例只是一种常见的用法,具体的实现取决于你的测试框架和需求。

  • conftest.py中实现失败截图的功能

可以使用pytest提供的钩子函数和Selenium的截图功能,使用钩子函数和Allure API将失败的截图添加到Allure报告中

import allure
import pytest
from selenium import webdriver


# 定义全局的夹具(fixtures)
@pytest.fixture(scope='session')
def browser(request):
    driver = webdriver.Chrome()  # 初始化浏览器
    yield driver  # 返回浏览器实例
    driver.quit()  # 关闭浏览器


# 添加钩子函数
@pytest.hookimpl(tryfirst=True, hookwrapper=True)
def pytest_runtest_makereport(item, call):
    # 获取测试结果
    outcome = yield
    rep = outcome.get_result()

    if rep.when == 'call' and rep.failed:
        # 获取浏览器实例
        browser = item.funcargs['browser']

        # 截图
        screenshot = browser.get_screenshot_as_png()

        # 将截图添加到Allure报告中
        allure.attach(screenshot, name="Failure Screenshot", attachment_type=allure.attachment_type.PNG)


# 添加Allure报告的额外信息
@pytest.fixture(autouse=True)
def add_extra_info(request):
    # 添加测试用例的名称
    allure.dynamic.title(request.node.name)

    # 添加测试用例的描述
    allure.dynamic.description(request.node.nodeid)


# 添加Allure报告的环境信息
@pytest.fixture(scope='session', autouse=True)
def allure_environment(request):
    # 添加环境信息
    allure.environment(report='Environment', browser='Chrome', environment='Test')