Python pytest如何添加到元数据

Python pytest如何添加到元数据,python,pytest,Python,Pytest,当我运行我的pytests时,我喜欢将browser、browserVersion和driverversion等变量添加到元数据中,以便pytest html插件能够获取它们: metadata: {'Python': '3.7.4', 'Platform': 'Windows-10-10.0.18362-SP0',\ 'Packages': {'pytest': '5.0.1', 'py': '1.8.0', 'pluggy': '0.12.0'}, \ 'Plugins': {'base-u

当我运行我的
pytests
时,我喜欢将
browser
browserVersion
driverversion
等变量添加到元数据中,以便
pytest html
插件能够获取它们:

metadata: {'Python': '3.7.4', 'Platform': 'Windows-10-10.0.18362-SP0',\
'Packages': {'pytest': '5.0.1', 'py': '1.8.0', 'pluggy': '0.12.0'}, \
'Plugins': {'base-url': '1.4.1', 'clarity': '0.2.0a1', 'html': '1.22.0', \
'metadata': '1.8.0', 'mock': '1.10.4', 'variables': '1.7.1'}, \
'JAVA_HOME': 'C:\\Program Files\\AdoptOpenJDK\\jdk-8.0.212.03-hotspot\\', 'Base URL': ''}
如何向元数据添加类似selenium的webdriver功能:

webdriver:chrome, capabilities:{'acceptInsecureCerts': False,\
'browserName': 'chrome', 'browserVersion': '76.0.3809.100', \
'chrome':  {'chromedriverVersion': '76.0.3809.126 (d80a294506b4c9d18015e755cee48f953ddc3f2f-refs/branch-heads/3809@{#1024})}'
我有一个
pytest。fixture
用于
webdriver
webdriver
是一个环境变量 控制浏览器,但它们不会显示在元数据中

我可以在
conftest.py
中用这个钩子添加静态变量和
env-vars
,但是驱动程序没有初始化,它是在自己的夹具中设置的,如何确保这个夹具在我的
wd
夹具(设置全局驱动程序)之后运行。不允许在
conftest.py
中向函数添加装置:

@pytest.mark.optionalhook
def pytest_metadata(metadata):
    global driver
    if driver:
        metadata['browserName'] = driver.capabilities['browserName']
        metadata['browserVersion'] = driver.capabilities['browserName']
        if driver.capabilities.get('chrome'):
            metadata['chromedriverVersion'] = driver.capabilities['chrome']['chromedriverVersion']
    else:
        metadata['drivererror'] = "driver not initialized"

例如,您可以通过
config.\u metadata
属性访问fixture和tests中的元数据dict

@pytest.fixture(scope='session')
def driver():
    return webdriver.Chrome()


@pytest.fixture(autouse=True, scope='session')
def store_driver_info(request, driver):
    request.config._metadata['browserName'] = driver.capabilities['browserName']


def test_browser_name(request, driver):
    assert request.config._metadata['browserName'] == driver.capabilities['browserName']

解决方法是将webdriver的安装移到
pytest\u metadata()
中,然后放下我的整个webdriver安装夹具。不是很优雅。
autouse=True
使用
请求自动夹具(而不是
config
)并将其全部添加到驱动程序中(我称之为
wd`)是解决方案。谢谢