and new hooks for result logging
This commit is contained in:
parent
97ed87c79f
commit
2919a33191
1 changed files with 56 additions and 1 deletions
|
|
@ -5,18 +5,22 @@
|
||||||
# sys.path. It is thus good practise for projects to either put conftest.py under
|
# sys.path. It is thus good practise for projects to either put conftest.py under
|
||||||
# a package scope or to never import anything from a conftest.py file.
|
# a package scope or to never import anything from a conftest.py file.
|
||||||
|
|
||||||
|
import os.path
|
||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
|
|
||||||
import pytest
|
import pytest
|
||||||
from dirmanager import DirManager
|
from dirmanager import DirManager
|
||||||
from dotenv import dotenv_values
|
from dotenv import dotenv_values
|
||||||
|
from playwright.sync_api import BrowserContext
|
||||||
|
|
||||||
pytest_plugins = [
|
pytest_plugins = [
|
||||||
"setup.setup_authentik",
|
"setup.setup_authentik",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
|
||||||
|
TIMEOUT = 5000
|
||||||
|
|
||||||
|
|
||||||
def pytest_addoption(parser):
|
def pytest_addoption(parser):
|
||||||
parser.addoption(
|
parser.addoption(
|
||||||
"--env_file",
|
"--env_file",
|
||||||
|
|
@ -62,3 +66,54 @@ def STATES(dirmanager) -> Path:
|
||||||
@pytest.fixture(scope="session", autouse=True)
|
@pytest.fixture(scope="session", autouse=True)
|
||||||
def RESULTS(dirmanager) -> Path:
|
def RESULTS(dirmanager) -> Path:
|
||||||
return dirmanager.dirs["results"]
|
return dirmanager.dirs["results"]
|
||||||
|
|
||||||
|
|
||||||
|
# log failed tests
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.hookimpl(tryfirst=True, hookwrapper=True)
|
||||||
|
def pytest_runtest_makereport(item, call):
|
||||||
|
# execute all other hooks to obtain the report object
|
||||||
|
outcome = yield
|
||||||
|
rep = outcome.get_result()
|
||||||
|
|
||||||
|
# we only look at actual failing test calls, not setup/teardown
|
||||||
|
if rep.when == "call" and rep.failed:
|
||||||
|
mode = "a" if os.path.exists("failures") else "w"
|
||||||
|
with open("failures", mode) as f:
|
||||||
|
f.write(rep.longreprtext + "\n")
|
||||||
|
|
||||||
|
|
||||||
|
# trace chrome on failed test
|
||||||
|
|
||||||
|
|
||||||
|
# inspired from https://docs.pytest.org/en/6.2.x/example/simple.html#request-example
|
||||||
|
"""
|
||||||
|
@pytest.hookimpl(tryfirst=True, hookwrapper=True)
|
||||||
|
def pytest_runtest_makereport(item, call):
|
||||||
|
outcome = yield
|
||||||
|
rep = outcome.get_result()
|
||||||
|
# set a report attribute for each phase of a call, which can
|
||||||
|
# be "setup", "call", "teardown"
|
||||||
|
setattr(item, "rep_" + rep.when, rep)
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.fixture
|
||||||
|
def setup(request, context: BrowserContext):
|
||||||
|
# before test
|
||||||
|
context.tracing.start(screenshots=True, snapshots=True, sources=True)
|
||||||
|
context.set_default_timeout(TIMEOUT)
|
||||||
|
|
||||||
|
# test execution
|
||||||
|
yield context
|
||||||
|
|
||||||
|
# after test
|
||||||
|
if request.node.rep_setup.failed:
|
||||||
|
# test setup failed
|
||||||
|
pass
|
||||||
|
else:
|
||||||
|
if request.node.rep_call.failed:
|
||||||
|
# test execution failed
|
||||||
|
filename = "trace-" + request.node.originalname + ".zip"
|
||||||
|
context.tracing.stop(path=filename)
|
||||||
|
"""
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue