2 new commits in pytest: https://bitbucket.org/hpk42/pytest/commits/69543636b13a/ Changeset: 69543636b13a User: adamgoucher Date: 2013-04-16 06:45:14 Summary: stdout/stderr now captured by junitxml Affected #: 3 files
diff -r 82139da07b58da52fc124be4218c8957b71f3ac1 -r 69543636b13a1e2cad7e9296b0b69d6b785577fb _pytest/capture.py --- a/_pytest/capture.py +++ b/_pytest/capture.py @@ -173,8 +173,7 @@ if funcarg_outerr is not None: outerr = (outerr[0] + funcarg_outerr[0], outerr[1] + funcarg_outerr[1]) - if not rep.passed: - addouterr(rep, outerr) + addouterr(rep, outerr) if not rep.passed or rep.when == "teardown": outerr = ('', '') item.outerr = outerr diff -r 82139da07b58da52fc124be4218c8957b71f3ac1 -r 69543636b13a1e2cad7e9296b0b69d6b785577fb _pytest/junitxml.py --- a/_pytest/junitxml.py +++ b/_pytest/junitxml.py @@ -107,11 +107,20 @@ time=getattr(report, 'duration', 0) )) + def _write_captured_output(self, report): + sec = dict(report.sections) + for name in ('out', 'err'): + content = sec.get("Captured std%s" % name) + if content: + tag = getattr(Junit, 'system-'+name) + self.append(tag(bin_xml_escape(content))) + def append(self, obj): self.tests[-1].append(obj) def append_pass(self, report): self.passed += 1 + self._write_captured_output(report) def append_failure(self, report): #msg = str(report.longrepr.reprtraceback.extraline) @@ -120,16 +129,11 @@ Junit.skipped(message="xfail-marked test passes unexpectedly")) self.skipped += 1 else: - sec = dict(report.sections) fail = Junit.failure(message="test failure") fail.append(str(report.longrepr)) self.append(fail) - for name in ('out', 'err'): - content = sec.get("Captured std%s" % name) - if content: - tag = getattr(Junit, 'system-'+name) - self.append(tag(bin_xml_escape(content))) self.failed += 1 + self._write_captured_output(report) def append_collect_failure(self, report): #msg = str(report.longrepr.reprtraceback.extraline) @@ -162,6 +166,7 @@ message=skipreason )) self.skipped += 1 + self._write_captured_output(report) def pytest_runtest_logreport(self, report): if report.passed: diff -r 82139da07b58da52fc124be4218c8957b71f3ac1 -r 69543636b13a1e2cad7e9296b0b69d6b785577fb testing/test_junitxml.py --- a/testing/test_junitxml.py +++ b/testing/test_junitxml.py @@ -282,13 +282,35 @@ if not sys.platform.startswith("java"): assert "hx" in fnode.toxml() + def test_pass_captures_stdout(self, testdir): + testdir.makepyfile(""" + def test_pass(): + print('hello-stdout') + """) + result, dom = runandparse(testdir) + node = dom.getElementsByTagName("testsuite")[0] + pnode = node.getElementsByTagName("testcase")[0] + systemout = pnode.getElementsByTagName("system-out")[0] + assert "hello-stdout" in systemout.toxml() + + def test_pass_captures_stderr(self, testdir): + testdir.makepyfile(""" + import sys + def test_pass(): + sys.stderr.write('hello-stderr') + """) + result, dom = runandparse(testdir) + node = dom.getElementsByTagName("testsuite")[0] + pnode = node.getElementsByTagName("testcase")[0] + systemout = pnode.getElementsByTagName("system-err")[0] + assert "hello-stderr" in systemout.toxml() + def test_mangle_testnames(): from _pytest.junitxml import mangle_testnames names = ["a/pything.py", "Class", "()", "method"] newnames = mangle_testnames(names) assert newnames == ["a.pything", "Class", "method"] - def test_dont_configure_on_slaves(tmpdir): gotten = [] class FakeConfig: https://bitbucket.org/hpk42/pytest/commits/a8b625d3000c/ Changeset: a8b625d3000c User: hpk42 Date: 2013-04-16 09:02:08 Summary: Merged in adamgoucher/pytest (pull request #29) stdout/stderr now captured by junitxml Affected #: 3 files diff -r 1e37dc2b23fe92b81da6be1c4b6bde2025ee4f1b -r a8b625d3000c8048a9630d6bf8dc45bdabc44a9a _pytest/capture.py --- a/_pytest/capture.py +++ b/_pytest/capture.py @@ -173,8 +173,7 @@ if funcarg_outerr is not None: outerr = (outerr[0] + funcarg_outerr[0], outerr[1] + funcarg_outerr[1]) - if not rep.passed: - addouterr(rep, outerr) + addouterr(rep, outerr) if not rep.passed or rep.when == "teardown": outerr = ('', '') item.outerr = outerr diff -r 1e37dc2b23fe92b81da6be1c4b6bde2025ee4f1b -r a8b625d3000c8048a9630d6bf8dc45bdabc44a9a _pytest/junitxml.py --- a/_pytest/junitxml.py +++ b/_pytest/junitxml.py @@ -107,11 +107,20 @@ time=getattr(report, 'duration', 0) )) + def _write_captured_output(self, report): + sec = dict(report.sections) + for name in ('out', 'err'): + content = sec.get("Captured std%s" % name) + if content: + tag = getattr(Junit, 'system-'+name) + self.append(tag(bin_xml_escape(content))) + def append(self, obj): self.tests[-1].append(obj) def append_pass(self, report): self.passed += 1 + self._write_captured_output(report) def append_failure(self, report): #msg = str(report.longrepr.reprtraceback.extraline) @@ -120,16 +129,11 @@ Junit.skipped(message="xfail-marked test passes unexpectedly")) self.skipped += 1 else: - sec = dict(report.sections) fail = Junit.failure(message="test failure") fail.append(str(report.longrepr)) self.append(fail) - for name in ('out', 'err'): - content = sec.get("Captured std%s" % name) - if content: - tag = getattr(Junit, 'system-'+name) - self.append(tag(bin_xml_escape(content))) self.failed += 1 + self._write_captured_output(report) def append_collect_failure(self, report): #msg = str(report.longrepr.reprtraceback.extraline) @@ -162,6 +166,7 @@ message=skipreason )) self.skipped += 1 + self._write_captured_output(report) def pytest_runtest_logreport(self, report): if report.passed: diff -r 1e37dc2b23fe92b81da6be1c4b6bde2025ee4f1b -r a8b625d3000c8048a9630d6bf8dc45bdabc44a9a testing/test_junitxml.py --- a/testing/test_junitxml.py +++ b/testing/test_junitxml.py @@ -282,13 +282,35 @@ if not sys.platform.startswith("java"): assert "hx" in fnode.toxml() + def test_pass_captures_stdout(self, testdir): + testdir.makepyfile(""" + def test_pass(): + print('hello-stdout') + """) + result, dom = runandparse(testdir) + node = dom.getElementsByTagName("testsuite")[0] + pnode = node.getElementsByTagName("testcase")[0] + systemout = pnode.getElementsByTagName("system-out")[0] + assert "hello-stdout" in systemout.toxml() + + def test_pass_captures_stderr(self, testdir): + testdir.makepyfile(""" + import sys + def test_pass(): + sys.stderr.write('hello-stderr') + """) + result, dom = runandparse(testdir) + node = dom.getElementsByTagName("testsuite")[0] + pnode = node.getElementsByTagName("testcase")[0] + systemout = pnode.getElementsByTagName("system-err")[0] + assert "hello-stderr" in systemout.toxml() + def test_mangle_testnames(): from _pytest.junitxml import mangle_testnames names = ["a/pything.py", "Class", "()", "method"] newnames = mangle_testnames(names) assert newnames == ["a.pything", "Class", "method"] - def test_dont_configure_on_slaves(tmpdir): gotten = [] class FakeConfig: Repository URL: https://bitbucket.org/hpk42/pytest/ -- This is a commit notification from bitbucket.org. You are receiving this because you have the service enabled, addressing the recipient of this email. _______________________________________________ pytest-commit mailing list pytest-commit@python.org http://mail.python.org/mailman/listinfo/pytest-commit