在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_setup
和pytest_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')