From 197fd69ddcc4acb4f9e598f3e857abee9e02cba1 Mon Sep 17 00:00:00 2001 From: Bruno Oliveira Date: Wed, 19 Dec 2018 17:11:20 -0200 Subject: [PATCH] Use mocking to make test_junit_duration_report deterministic Fix #4563 --- testing/test_junitxml.py | 35 ++++++++++++++++++++++++----------- 1 file changed, 24 insertions(+), 11 deletions(-) diff --git a/testing/test_junitxml.py b/testing/test_junitxml.py index cbadbf064..59c11fa00 100644 --- a/testing/test_junitxml.py +++ b/testing/test_junitxml.py @@ -153,23 +153,36 @@ class TestPython(object): val = tnode["time"] assert round(float(val), 2) >= 0.03 - def test_junit_duration_report(self, testdir): + @pytest.mark.parametrize("duration_report", ["call", "total"]) + def test_junit_duration_report(self, testdir, monkeypatch, duration_report): + + # mock LogXML.node_reporter so it always sets a known duration to each test report object + original_node_reporter = LogXML.node_reporter + + def node_reporter_wrapper(s, report): + report.duration = 1.0 + reporter = original_node_reporter(s, report) + return reporter + + monkeypatch.setattr(LogXML, "node_reporter", node_reporter_wrapper) + testdir.makepyfile( """ - import time, pytest - def setup_module(): - time.sleep(0.1) - def teardown_module(): - time.sleep(0.1) - def test_sleep(): - time.sleep(0.1) + def test_foo(): + pass """ ) - result, dom = runandparse(testdir, "-o", "junit_duration_report=call") + result, dom = runandparse( + testdir, "-o", "junit_duration_report={}".format(duration_report) + ) node = dom.find_first_by_tag("testsuite") tnode = node.find_first_by_tag("testcase") - val = tnode["time"] - assert 0.1 <= round(float(val), 2) < 0.2 + val = float(tnode["time"]) + if duration_report == "total": + assert val == 3.0 + else: + assert duration_report == "call" + assert val == 1.0 def test_setup_error(self, testdir): testdir.makepyfile(