Merge pull request #125 from reginaldl/master

Mark test as complete at teardown.
This commit is contained in:
Ronny Pfannschmidt
2017-05-05 22:43:53 +02:00
committed by GitHub
3 changed files with 31 additions and 2 deletions

View File

@@ -10,6 +10,10 @@
and ``EachScheduling`` implementations. Note that required scheduler class public and ``EachScheduling`` implementations. Note that required scheduler class public
API may change in next ``pytest-xdist`` versions. 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 1.15.0
------ ------

View File

@@ -437,7 +437,32 @@ def test_crashing_item(testdir):
""") """)
result = testdir.runpytest("-n2", p) result = testdir.runpytest("-n2", p)
result.stdout.fnmatch_lines([ 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*"
]) ])

View File

@@ -660,7 +660,7 @@ class DSession:
If the node indicates it is finished with a test item, remove If the node indicates it is finished with a test item, remove
the item from the pending list in the scheduler. 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.sched.mark_test_complete(node, rep.item_index, rep.duration)
# self.report_line("testreport %s: %s" %(rep.id, rep.status)) # self.report_line("testreport %s: %s" %(rep.id, rep.status))
rep.node = node rep.node = node