Skip to content

Mark test as complete at teardown. #125

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

Merged
merged 4 commits into from
May 5, 2017
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 4 additions & 0 deletions CHANGELOG
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,10 @@
and ``EachScheduling`` implementations. Note that required scheduler class public
API may change in next ``pytest-xdist`` versions.

- fix #124: xdist would mark test as complete after 'call' step. As a result,
xdist could identify the wrong test as failing when test crashes at teardown.
To address this issue, xdist now marks test as complete at teardown.

1.15.0
------

Expand Down
27 changes: 26 additions & 1 deletion testing/acceptance_test.py
Original file line number Diff line number Diff line change
Expand Up @@ -437,7 +437,32 @@ def test_noncrash():
""")
result = testdir.runpytest("-n2", p)
result.stdout.fnmatch_lines([
"*crashed*test_crash*", "*1 failed*1 passed*"
"*crashed*::test_crash*", "*1 failed*1 passed*"
])


def test_crashing_item_teardown(testdir):
p = testdir.makepyfile("""
import py
import pytest
import os
import time

@pytest.fixture
def crash_fixture(request):
def kill_me():
py.process.kill(os.getpid())
request.addfinalizer(kill_me)

def test_a(crash_fixture):
pass

def test_b():
pass
""")
result = testdir.runpytest("-n1", p)
result.stdout.fnmatch_lines([
"*crashed*::test_a*", "*1 failed*2 passed*"
])


Expand Down
2 changes: 1 addition & 1 deletion xdist/dsession.py
Original file line number Diff line number Diff line change
Expand Up @@ -660,7 +660,7 @@ def slave_testreport(self, node, rep):
If the node indicates it is finished with a test item, remove
the item from the pending list in the scheduler.
"""
if rep.when == "call" or (rep.when == "setup" and not rep.passed):
if rep.when == "teardown" or (rep.when == "setup" and not rep.passed):
self.sched.mark_test_complete(node, rep.item_index, rep.duration)
# self.report_line("testreport %s: %s" %(rep.id, rep.status))
rep.node = node
Expand Down