Bug 1433923 - Use detailed failure message for wdspec test failures (pytest). draft
authorHenrik Skupin <mail@hskupin.info>
Thu, 22 Mar 2018 13:16:33 +0100
changeset 772917 962051ae7731f47ae4d2068ebf4e82839f3b13a6
parent 772310 b99844d179cacf74a5d39ad23429be91e989c331
push id104089
push userbmo:hskupin@gmail.com
push dateTue, 27 Mar 2018 05:29:51 +0000
bugs1433923
milestone61.0a1
Bug 1433923 - Use detailed failure message for wdspec test failures (pytest). When adding failures to the test report, the hook for pytest_runtest_logreport missed to extract the failure message from the stack, and as such passed in no message for the failure. MozReview-Commit-ID: CRhnnONMzbP
testing/web-platform/tests/tools/wptrunner/wptrunner/executors/pytestrunner/runner.py
--- a/testing/web-platform/tests/tools/wptrunner/wptrunner/executors/pytestrunner/runner.py
+++ b/testing/web-platform/tests/tools/wptrunner/wptrunner/executors/pytestrunner/runner.py
@@ -97,17 +97,29 @@ class SubtestResultRecorder(object):
                 self.record_fail(report)
         elif report.skipped:
             self.record_skip(report)
 
     def record_pass(self, report):
         self.record(report.nodeid, "PASS")
 
     def record_fail(self, report):
-        self.record(report.nodeid, "FAIL", stack=report.longrepr)
+        # pytest outputs the stacktrace followed by an error message prefixed
+        # with "E   ", e.g.
+        #
+        #        def test_example():
+        #  >         assert "fuu" in "foobar"
+        #  > E       AssertionError: assert 'fuu' in 'foobar'
+        message = ""
+        for line in report.longreprtext.splitlines():
+           if line.startswith("E   "):
+               message = line[1:].strip()
+               break
+
+        self.record(report.nodeid, "FAIL", message=message, stack=report.longrepr)
 
     def record_error(self, report):
         # error in setup/teardown
         if report.when != "call":
             message = "%s error" % report.when
         self.record(report.nodeid, "ERROR", message, report.longrepr)
 
     def record_skip(self, report):