[PATCH] test/py: support pytest 6

Stephen Warren swarren at wwwdotorg.org
Sat Jan 30 22:05:44 CET 2021


Two changes are needed to support pytest 6:

1) The main entry point no longer allows command-line arguments to be
supplied. Instead, we must modify sys.argv before calling the entry
point. pytest 5.1.2 (from the current requirements.txt) supports either
modifying sys.argv, or passing arguments, so is compatible with this
change.

2) The implementation of pytest_runtest_protocol() must call
pytest_runtest_logstart() and pytest_runtest_logfinish(). This appears to
be necessary even in pytest 5.1.2 judging by the default version of
pytest_runtest_protocol(), but evidently some form of code
reorganization in pytest only made this have a practical effect in the
newer version. I'd previously been under the impression that 100% of the
required work of pytest_runtest_protocol() was handled by the fact it
called runtestprotocol() as its implementation. However, it appears that
custom implementations do need to do a little more than this.

Reported-by: Heinrich Schuchardt <xypron.glpk at gmx.de> (point 2)
Signed-off-by: Stephen Warren <swarren at wwwdotorg.org>
---
 test/py/conftest.py | 5 ++++-
 test/py/test.py     | 4 ++--
 2 files changed, 6 insertions(+), 3 deletions(-)

diff --git a/test/py/conftest.py b/test/py/conftest.py
index dc92c0be32ee..7cacfcec26ef 100644
--- a/test/py/conftest.py
+++ b/test/py/conftest.py
@@ -554,7 +554,10 @@ def pytest_runtest_protocol(item, nextitem):
     """
 
     log.get_and_reset_warning()
+    ihook = item.ihook
+    ihook.pytest_runtest_logstart(nodeid=item.nodeid, location=item.location)
     reports = runtestprotocol(item, nextitem=nextitem)
+    ihook.pytest_runtest_logfinish(nodeid=item.nodeid, location=item.location)
     was_warning = log.get_and_reset_warning()
 
     # In pytest 3, runtestprotocol() may not call pytest_runtest_setup() if
@@ -623,4 +626,4 @@ def pytest_runtest_protocol(item, nextitem):
     if failure_cleanup:
         console.cleanup_spawn()
 
-    return reports
+    return True # reports
diff --git a/test/py/test.py b/test/py/test.py
index bee88d96bc26..d5bea127ab47 100755
--- a/test/py/test.py
+++ b/test/py/test.py
@@ -14,7 +14,7 @@ from pkg_resources import load_entry_point
 
 # argv; py.test test_directory_name user-supplied-arguments
 args = [os.path.dirname(__file__) + '/tests']
-args.extend(sys.argv)
+sys.argv[1:1] = args
 
 if __name__ == '__main__':
-    sys.exit(load_entry_point('pytest', 'console_scripts', 'pytest')(args))
+    sys.exit(load_entry_point('pytest', 'console_scripts', 'pytest')())
-- 
2.25.1



More information about the U-Boot mailing list