I would like to have a list of all the tests that have failed to be used at the end of session.
Pytest lets you define a hook pytest_sessionfinish(session, exitstatus)
, that is called at the end of the session, where I wish to have that list.
session
is a _pytest.main.Session
instance that has the attribute items
(type list
), but I couldn't find whether the each item
in that list passed of failed.
How can it be done while using pytest-xdist
plugin, where I would like to get that list in the master process. Using this plugin, session
does not even have items
attribute in the master:
def pytest_sessionfinish(session, exitstatus):
if os.environ.get("PYTEST_XDIST_WORKER", "master") == "master":
print(hasattr(session, "items")) # False
Run pytest with -rf
to get it to print a list of failed tests at the end.
From py.test --help
:
-r chars show extra test summary info as specified by chars
(f)ailed, (E)error, (s)skipped, (x)failed, (X)passed,
(p)passed, (P)passed with output, (a)all except pP.
Warnings are displayed at all times except when
--disable-warnings is set
Here's what you get:
$ py.test -rf
================= test session starts =================
platform darwin -- Python 3.7.2, pytest-4.3.1, py-1.6.0, pluggy-0.7.1
[...]
=============== short test summary info ===============
FAILED test_foo.py::test_foo_is_flar
FAILED test_spam.py::test_spam_is_mostly_pork
FAILED test_eggs.py::test_eggs_are_also_spam
=== 3 failed, 222 passed, 8 warnings in 12.52 seconds ==