Приспособления оцениваются после выполнения ловушки pytest_csv_register_columns
, поэтому вы не можете ссылаться на них в ловушке. Если вам нужен доступ к приборам или другим внутренним элементам pytest
для данных столбца, вместо этого передайте функцию. Пример из pytest-csv
источников :
>>> columns['my_simple_column'] = lambda item, report: {'my column': report.nodeid}
В вашем случае это можно реализовать следующим образом:
@pytest.fixture
def browser(request):
...
def _output_column_builder(item, report):
# check if the test case requests the browser fixture
if "browser" in item.fixturenames:
# get browser fixture value
browser_fixture_value = item.funcargs["browser"]
logs = browser_fixture_value.get_log('browser')
else:
logs = []
return {"chrome_console": logs}
def pytest_csv_register_columns(columns):
columns["ConsoleOutput"] = _output_column_builder
Пример теста:
def test_yt(browser):
browser.get('https://www.youtube.com')
При запуске тестов теперь будут записываться журналы браузера в формате JSON:
$ pytest --csv out.csv --csv-columns ConsoleOutput
...
$ cat out.csv
chrome_console
"[{'level': 'WARNING', 'message': 'https://www.youtube.com/ - A cookie associated with a cross-site resource at https://accounts.google.com/ was set without the `SameSite` attribute. A future release of Chrome will only deliver cookies with cross-site requests if they are set with `SameSite=None` and `Secure`. You can review cookies in developer tools under Application>Storage>Cookies and see more details at https://www.chromestatus.com/feature/5088147346030592 and https://www.chromestatus.com/feature/5633521622188032.', 'source': 'other', 'timestamp': 1586104294304}, ...]"