Fix warnings summary header appearing twice
Ref: https://github.com/pytest-dev/pytest/pull/4450#discussion_r236017645 Ref: https://github.com/pytest-dev/pytest/pull/4399
This commit is contained in:
		
							parent
							
								
									16b15af624
								
							
						
					
					
						commit
						be3b8fc9c1
					
				| 
						 | 
				
			
			@ -33,8 +33,6 @@ Running pytest now produces this output::
 | 
			
		|||
      $REGENDOC_TMPDIR/test_show_warnings.py:4: UserWarning: api v1, should use functions from v2
 | 
			
		||||
        warnings.warn(UserWarning("api v1, should use functions from v2"))
 | 
			
		||||
 | 
			
		||||
    -- Docs: https://docs.pytest.org/en/latest/warnings.html
 | 
			
		||||
    ========================= warnings summary (final) =========================
 | 
			
		||||
    -- Docs: https://docs.pytest.org/en/latest/warnings.html
 | 
			
		||||
    =================== 1 passed, 1 warnings in 0.12 seconds ===================
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -358,8 +356,6 @@ defines an ``__init__`` constructor, as this prevents the class from being insta
 | 
			
		|||
      $REGENDOC_TMPDIR/test_pytest_warnings.py:1: PytestWarning: cannot collect test class 'Test' because it has a __init__ constructor
 | 
			
		||||
        class Test:
 | 
			
		||||
 | 
			
		||||
    -- Docs: https://docs.pytest.org/en/latest/warnings.html
 | 
			
		||||
    ========================= warnings summary (final) =========================
 | 
			
		||||
    -- Docs: https://docs.pytest.org/en/latest/warnings.html
 | 
			
		||||
    1 warnings in 0.12 seconds
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -422,8 +422,6 @@ additionally it is possible to copy examples for an example folder before runnin
 | 
			
		|||
      $REGENDOC_TMPDIR/test_example.py:4: PytestExperimentalApiWarning: testdir.copy_example is an experimental api that may change over time
 | 
			
		||||
        testdir.copy_example("test_example.py")
 | 
			
		||||
 | 
			
		||||
    -- Docs: https://docs.pytest.org/en/latest/warnings.html
 | 
			
		||||
    ========================= warnings summary (final) =========================
 | 
			
		||||
    -- Docs: https://docs.pytest.org/en/latest/warnings.html
 | 
			
		||||
    =================== 2 passed, 1 warnings in 0.12 seconds ===================
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -734,6 +734,8 @@ class TerminalReporter(object):
 | 
			
		|||
            else:
 | 
			
		||||
                warnings = all_warnings
 | 
			
		||||
            self._already_displayed_warnings = len(warnings)
 | 
			
		||||
            if not warnings:
 | 
			
		||||
                return
 | 
			
		||||
 | 
			
		||||
            grouped = itertools.groupby(
 | 
			
		||||
                warnings, key=lambda wr: wr.get_location(self.config)
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1094,7 +1094,34 @@ def test_terminal_summary_warnings_are_displayed(testdir):
 | 
			
		|||
        ]
 | 
			
		||||
    )
 | 
			
		||||
    assert "None" not in result.stdout.str()
 | 
			
		||||
    assert result.stdout.str().count("warning_from_test") == 1
 | 
			
		||||
    stdout = result.stdout.str()
 | 
			
		||||
    assert stdout.count("warning_from_test") == 1
 | 
			
		||||
    assert stdout.count("=== warnings summary ") == 2
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@pytest.mark.filterwarnings("default")
 | 
			
		||||
def test_terminal_summary_warnings_header_once(testdir):
 | 
			
		||||
    testdir.makepyfile(
 | 
			
		||||
        """
 | 
			
		||||
        def test_failure():
 | 
			
		||||
            import warnings
 | 
			
		||||
            warnings.warn("warning_from_" + "test")
 | 
			
		||||
            assert 0
 | 
			
		||||
    """
 | 
			
		||||
    )
 | 
			
		||||
    result = testdir.runpytest("-ra")
 | 
			
		||||
    result.stdout.fnmatch_lines(
 | 
			
		||||
        [
 | 
			
		||||
            "*= warnings summary =*",
 | 
			
		||||
            "*warning_from_test*",
 | 
			
		||||
            "*= short test summary info =*",
 | 
			
		||||
            "*== 1 failed, 1 warnings in *",
 | 
			
		||||
        ]
 | 
			
		||||
    )
 | 
			
		||||
    assert "None" not in result.stdout.str()
 | 
			
		||||
    stdout = result.stdout.str()
 | 
			
		||||
    assert stdout.count("warning_from_test") == 1
 | 
			
		||||
    assert stdout.count("=== warnings summary ") == 1
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@pytest.mark.parametrize(
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue