Merge pull request #10513 from pytest-dev/backport-10482-to-7.2.x
[7.2.x] issue-10457/show test name when skipping from fixture
This commit is contained in:
		
						commit
						3c2f90b9b9
					
				
							
								
								
									
										1
									
								
								AUTHORS
								
								
								
								
							
							
						
						
									
										1
									
								
								AUTHORS
								
								
								
								
							| 
						 | 
				
			
			@ -88,6 +88,7 @@ Daniel Grana
 | 
			
		|||
Daniel Hahler
 | 
			
		||||
Daniel Nuri
 | 
			
		||||
Daniel Sánchez Castelló
 | 
			
		||||
Daniel Valenzuela Zenteno
 | 
			
		||||
Daniel Wandschneider
 | 
			
		||||
Daniele Procida
 | 
			
		||||
Danielle Jenkins
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -0,0 +1 @@
 | 
			
		|||
If a test is skipped from inside a fixture, the test summary now shows the test location instead of the fixture location.
 | 
			
		||||
| 
						 | 
				
			
			@ -58,6 +58,7 @@ from _pytest.mark import Mark
 | 
			
		|||
from _pytest.mark import ParameterSet
 | 
			
		||||
from _pytest.mark.structures import MarkDecorator
 | 
			
		||||
from _pytest.outcomes import fail
 | 
			
		||||
from _pytest.outcomes import skip
 | 
			
		||||
from _pytest.outcomes import TEST_OUTCOME
 | 
			
		||||
from _pytest.pathlib import absolutepath
 | 
			
		||||
from _pytest.pathlib import bestrelpath
 | 
			
		||||
| 
						 | 
				
			
			@ -1129,6 +1130,10 @@ def pytest_fixture_setup(
 | 
			
		|||
    except TEST_OUTCOME:
 | 
			
		||||
        exc_info = sys.exc_info()
 | 
			
		||||
        assert exc_info[0] is not None
 | 
			
		||||
        if isinstance(
 | 
			
		||||
            exc_info[1], skip.Exception
 | 
			
		||||
        ) and not fixturefunc.__name__.startswith("xunit_setup"):
 | 
			
		||||
            exc_info[1]._use_item_location = True  # type: ignore[attr-defined]
 | 
			
		||||
        fixturedef.cached_result = (None, my_cache_key, exc_info)
 | 
			
		||||
        raise
 | 
			
		||||
    fixturedef.cached_result = (result, my_cache_key, None)
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1439,6 +1439,27 @@ def test_relpath_rootdir(pytester: Pytester) -> None:
 | 
			
		|||
    )
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def test_skip_from_fixture(pytester: Pytester) -> None:
 | 
			
		||||
    pytester.makepyfile(
 | 
			
		||||
        **{
 | 
			
		||||
            "tests/test_1.py": """
 | 
			
		||||
        import pytest
 | 
			
		||||
        def test_pass(arg):
 | 
			
		||||
            pass
 | 
			
		||||
        @pytest.fixture
 | 
			
		||||
        def arg():
 | 
			
		||||
            condition = True
 | 
			
		||||
            if condition:
 | 
			
		||||
                pytest.skip("Fixture conditional skip")
 | 
			
		||||
            """,
 | 
			
		||||
        }
 | 
			
		||||
    )
 | 
			
		||||
    result = pytester.runpytest("-rs", "tests/test_1.py", "--rootdir=tests")
 | 
			
		||||
    result.stdout.fnmatch_lines(
 | 
			
		||||
        ["SKIPPED [[]1[]] tests/test_1.py:2: Fixture conditional skip"]
 | 
			
		||||
    )
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def test_skip_using_reason_works_ok(pytester: Pytester) -> None:
 | 
			
		||||
    p = pytester.makepyfile(
 | 
			
		||||
        """
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue