Bug 1349516 - Add support to pytest-mozlog for tests rerun using pytest-rerunfailures; r?ahal draft
authorDave Hunt <dhunt@mozilla.com>
Thu, 20 Jul 2017 18:03:11 +0100
changeset 612360 7496f3ce5bb550613bd2842363d0f707fe4a2cef
parent 612315 d3ebc6448a62d38b134e957eb4fd5c2565ad40b8
child 638392 dfbfaea2dee48ac134b69c034b9cb5a2b9b85f62
push id69479
push userdhunt@mozilla.com
push dateThu, 20 Jul 2017 17:04:02 +0000
reviewersahal
bugs1349516
milestone56.0a1
Bug 1349516 - Add support to pytest-mozlog for tests rerun using pytest-rerunfailures; r?ahal MozReview-Commit-ID: GrFaW74EwXC
testing/mozbase/mozlog/mozlog/pytest_mozlog/plugin.py
--- a/testing/mozbase/mozlog/mozlog/pytest_mozlog/plugin.py
+++ b/testing/mozbase/mozlog/mozlog/pytest_mozlog/plugin.py
@@ -76,17 +76,17 @@ class MozLog(object):
 
     def pytest_runtest_logreport(self, report):
         '''Called 3 times per test (setup, call, teardown), indicated by report.when'''
         test = report.nodeid
         status = expected = 'PASS'
         message = stack = None
         if hasattr(report, 'wasxfail'):
             expected = 'FAIL'
-        if report.failed:
+        if report.failed or report.outcome == 'rerun':
             status = 'FAIL' if report.when == 'call' else 'ERROR'
         if report.skipped:
             status = 'SKIP' if not hasattr(report, 'wasxfail') else 'FAIL'
         if report.longrepr is not None:
             longrepr = report.longrepr
             if isinstance(longrepr, basestring):
                 # When using pytest-xdist, longrepr is serialised as a str
                 message = stack = longrepr
@@ -105,13 +105,13 @@ class MozLog(object):
             elif hasattr(longrepr, "__getitem__") and len(longrepr) == 3:
                 # For skips, longrepr is a tuple of (file, lineno, reason)
                 message = report.longrepr[-1]
             else:
                 raise ValueError("Unable to convert longrepr to message:\ntype %s\nfields:" %
                                  (longrepr.__class__, dir(longrepr)))
         if status != expected or expected != 'PASS':
             self.results[test] = (status, expected, message, stack)
-        if report.when == 'teardown':
+        if report.outcome == 'rerun' or report.when == 'teardown':
             defaults = ('PASS', 'PASS', None, None)
             status, expected, message, stack = self.results.get(test, defaults)
             self.logger.test_end(test=test, status=status, expected=expected,
                                  message=message, stack=stack)