Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[xunit-report] (version >= 3) stdout/sdterr duplicated when test case is marked with xfail #3491

lbrack opened this issue May 18, 2018 · 2 comments


Copy link

@lbrack lbrack commented May 18, 2018

This is a very minor issue but still. Basically when marking a test as xfail and generating an xunit report, the xunit's <system-out> and <system-err> tags are generated twice.

It is to be noted that:

  • running the same test with the --runxfail do produce the correct output.
  • I can reproduce the problem with all the 3.x versions but not with prior versions (<3)

pip list of the virtual environment you are using

$ pip list
Package        Version
-------------- -------
attrs          18.1.0
more-itertools 4.1.0
pip            10.0.1
pluggy         0.6.0
py             1.5.3
pytest         3.5.1
setuptools     39.1.0
six            1.11.0
wheel          0.31.1

pytest and operating system versions

  • python 3.6.2 (but could also be reproduced on 2.7)
  • pytest 3.5.1
  • Darwin Kernel Version 17.5.0: Fri Apr 13 19:32:32 PDT 2018;RELEASE_X86_64 x86_64

Minimal example if possible

Running the following code with py.test <path> --junit-xml=xunit-report.xml

import sys
import pytest

@pytest.mark.xfail(reason="for kicks")
def test_fail():
    sys.stdout.write("XFAIL This is stdout\n")
    sys.stderr.write("XFAIL This is stderr\n")
    assert 0, "Could this be represented as an exemption"

generates the following xml (with duplicate outputs for stdout and stderr)

<?xml version="1.0" encoding="utf-8"?>
<testsuite errors="0" failures="0" name="pytest" skips="1" tests="1" time="0.072">
  <testcase classname="testspace.test_special_xunit" file="testspace/" line="3" name="test_fail" time="0.0023894309997558594">
<skipped message="expected test failure">for kicks</skipped>
<system-out>XFAIL This is stdout</system-out>
<system-err>XFAIL This is stderr</system-err>
<system-out>XFAIL This is stdout</system-out>
<system-err>XFAIL This is stderr</system-err>
Copy link

@pytestbot pytestbot commented May 18, 2018 thinks possibly related issues are #3100 (Cannot dynamically mark a test as xfail), #552 (Can't mark.xfail a callable test param), #2875 (Segmentation fault in versions >=3.1.1), #1546 (When an xfail marked test passes(xpass), the report.outcome value shows as 'failed'), and #2942 (pytest >= 3.2.4 raises an exception when pytest.mark.xfail() is used as a fixture param).

Copy link

@nicoddemus nicoddemus commented May 25, 2018

Fixed in #3499

@nicoddemus nicoddemus closed this May 25, 2018
guykisel added a commit to guykisel/inline-plz that referenced this issue Jul 6, 2018
This PR updates [pytest]( from **3.5.1** to **3.6.3**.

   ### 3.6.2

Bug Fixes

- Fix regression in ``Node.add_marker`` by extracting the mark object of a
  ``MarkDecorator``. (`3555

- Warnings without ``location`` were reported as ``None``. This is corrected to
  now report ``&lt;undetermined location&gt;``. (`3563

- Continue to call finalizers in the stack when a finalizer in a former scope
  raises an exception. (`3569

- Fix encoding error with `print` statements in doctests (`3583

Improved Documentation

- Add documentation for the ``--strict`` flag. (`3549

Trivial/Internal Changes

- Update old quotation style to parens in fixture.rst documentation. (`3525

- Improve display of hint about ``--fulltrace`` with ``KeyboardInterrupt``.
  (`3545 &lt;;`_)

- pytest&#39;s testsuite is no longer runnable through ``python test`` --
  instead invoke ``pytest`` or ``tox`` directly. (`3552

- Fix typo in documentation (`3567
   ### 3.6.1

Bug Fixes

- Fixed a bug where stdout and stderr were logged twice by junitxml when a test
  was marked xfail. (`3491

- Fix ``usefixtures`` mark applyed to unittest tests by correctly instantiating
  ``FixtureInfo``. (`3498

- Fix assertion rewriter compatibility with libraries that monkey patch
  ``file`` objects. (`3503

Improved Documentation

- Added a section on how to use fixtures as factories to the fixture
  documentation. (`3461 &lt;;`_)

Trivial/Internal Changes

- Enable caching for pip/pre-commit in order to reduce build time on
  travis/appveyor. (`3502

- Switch pytest to the src/ layout as we already suggested it for good practice
  - now we implement it as well. (`3513

- Fix if in tests to support 3.7.0b5, where a docstring handling in AST got
  reverted. (`3530 &lt;;`_)

- Remove some python2.5 compatibility code. (`3529
   ### 3.6.0


- Revamp the internals of the ``pytest.mark`` implementation with correct per
  node handling which fixes a number of long standing bugs caused by the old
  design. This introduces new ``Node.iter_markers(name)`` and
  ``Node.get_closest_mark(name)`` APIs. Users are **strongly encouraged** to
  read the `reasons for the revamp in the docs
  or jump over to details about `updating existing code to use the new APIs
  &lt;;`_. (`3317

- Now when ``pytest.fixture`` is applied more than once to the same function a
  ``ValueError`` is raised. This buggy behavior would cause surprising problems
  and if was working for a test suite it was mostly by accident. (`2334

- Support for Python 3.7&#39;s builtin ``breakpoint()`` method, see `Using the
  builtin breakpoint function
  &lt;;`_ for
  details. (`3180 &lt;;`_)

- ``monkeypatch`` now supports a ``context()`` function which acts as a context
  manager which undoes all patching done within the ``with`` block. (`3290

- The ``--pdb`` option now causes KeyboardInterrupt to enter the debugger,
  instead of stopping the test session. On python 2.7, hitting CTRL+C again
  exits the debugger. On python 3.2 and higher, use CTRL+D. (`3299

- pytest not longer changes the log level of the root logger when the
  ``log-level`` parameter has greater numeric value than that of the level of
  the root logger, which makes it play better with custom logging configuration
  in user code. (`3307 &lt;;`_)

Bug Fixes

- A rare race-condition which might result in corrupted ``.pyc`` files on
  Windows has been hopefully solved. (`3008

- Also use iter_marker for discovering the marks applying for marker
  expressions from the cli to avoid the bad data from the legacy mark storage.
  (`3441 &lt;;`_)

- When showing diffs of failed assertions where the contents contain only
  whitespace, escape them using ``repr()`` first to make it easy to spot the
  differences. (`3443 &lt;;`_)

Improved Documentation

- Change documentation copyright year to a range which auto-updates itself each
  time it is published. (`3303

Trivial/Internal Changes

- ``pytest`` now depends on the `python-atomicwrites
  &lt;;`_ library. (`3008

- Update all URLs to (`3431

- Detect `pytest_` prefixed hooks using the internal plugin manager since
  ``pluggy`` is deprecating the ``implprefix`` argument to ``PluginManager``.
  (`3487 &lt;;`_)

- Import ``Mapping`` and ``Sequence`` from ``_pytest.compat`` instead of
  directly from ``collections`` in ````. Add ``Mapping``
  to ``_pytest.compat``, import it from ``collections`` on python 2, but from
  ```` on Python 3 to avoid a ``DeprecationWarning`` on Python
  3.7 or newer. (`3497 &lt;;`_)


  - PyPI:
  - Changelog:
  - Repo:
  - Homepage:
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
None yet
Linked pull requests

Successfully merging a pull request may close this issue.

None yet
3 participants