Merge branch 'master' into merge-master-into-features
This commit is contained in:
		
						commit
						6ac31088c5
					
				
							
								
								
									
										1
									
								
								AUTHORS
								
								
								
								
							
							
						
						
									
										1
									
								
								AUTHORS
								
								
								
								
							|  | @ -74,3 +74,4 @@ Eric Hunsberger | |||
| Simon Gomizelj | ||||
| Russel Winder | ||||
| Ben Webb | ||||
| Alexei Kozlenok | ||||
|  |  | |||
|  | @ -15,9 +15,16 @@ | |||
|   of passing tests, respectively. Thanks to David Vierra for the PR. | ||||
| 
 | ||||
| 
 | ||||
| 2.8.5.dev0 | ||||
| 2.8.6.dev1 | ||||
| ---------- | ||||
| 
 | ||||
| 
 | ||||
| 2.8.5 | ||||
| ----- | ||||
| 
 | ||||
| - fix #1243: fixed issue where class attributes injected during collection could break pytest. | ||||
|   PR by Alexei Kozlenok, thanks Ronny Pfannschmidt and Bruno Oliveira for the review and help. | ||||
| 
 | ||||
| - fix #1074: precompute junitxml chunks instead of storing the whole tree in objects | ||||
|   Thanks Bruno Oliveira for the report and Ronny Pfannschmidt for the PR | ||||
| 
 | ||||
|  |  | |||
|  | @ -42,7 +42,6 @@ Note: this assumes you have already registered on pypi. | |||
|    installed:: | ||||
| 
 | ||||
|       cd doc/en       | ||||
|       python plugins_index/plugins_index.py | ||||
|       make html | ||||
| 
 | ||||
|    Commit any changes before tagging the release. | ||||
|  |  | |||
|  | @ -451,7 +451,7 @@ class PyCollector(PyobjMixin, pytest.Collector): | |||
|         seen = {} | ||||
|         l = [] | ||||
|         for dic in dicts: | ||||
|             for name, obj in dic.items(): | ||||
|             for name, obj in list(dic.items()): | ||||
|                 if name in seen: | ||||
|                     continue | ||||
|                 seen[name] = True | ||||
|  |  | |||
							
								
								
									
										105
									
								
								appveyor.yml
								
								
								
								
							
							
						
						
									
										105
									
								
								appveyor.yml
								
								
								
								
							|  | @ -1,98 +1,19 @@ | |||
| environment: | ||||
|   matrix: | ||||
| 
 | ||||
|     # Pre-installed Python versions, which Appveyor may upgrade to | ||||
|     # a later point release. | ||||
| 
 | ||||
|     - PYTHON: "C:\\Python27" | ||||
|       PYTHON_VERSION: "2.7.x" # currently 2.7.9 | ||||
|       PYTHON_ARCH: "32" | ||||
|       TESTENV: "py27" | ||||
| 
 | ||||
|     - PYTHON: "C:\\Python27-x64" | ||||
|       PYTHON_VERSION: "2.7.x" # currently 2.7.9 | ||||
|       PYTHON_ARCH: "64" | ||||
|       TESTENV: "py27" | ||||
| 
 | ||||
|     - PYTHON: "C:\\Python33" | ||||
|       PYTHON_VERSION: "3.3.x" # currently 3.3.5 | ||||
|       PYTHON_ARCH: "32" | ||||
|       TESTENV: "py33" | ||||
| 
 | ||||
|     - PYTHON: "C:\\Python33-x64" | ||||
|       PYTHON_VERSION: "3.3.x" # currently 3.3.5 | ||||
|       PYTHON_ARCH: "64" | ||||
|       TESTENV: "py33" | ||||
| 
 | ||||
|     - PYTHON: "C:\\Python34" | ||||
|       PYTHON_VERSION: "3.4.x" # currently 3.4.3 | ||||
|       PYTHON_ARCH: "32" | ||||
|       TESTENV: "py34" | ||||
| 
 | ||||
|     - PYTHON: "C:\\Python34-x64" | ||||
|       PYTHON_VERSION: "3.4.x" # currently 3.4.3 | ||||
|       PYTHON_ARCH: "64" | ||||
|       TESTENV: "py34" | ||||
| 
 | ||||
|     - PYTHON: "C:\\Python35" | ||||
|       PYTHON_VERSION: "3.5.x" # currently 3.5.0 | ||||
|       PYTHON_ARCH: "32" | ||||
|       TESTENV: "py35" | ||||
| 
 | ||||
|     - PYTHON: "C:\\Python35-x64" | ||||
|       PYTHON_VERSION: "3.5.x" # currently 3.5.0 | ||||
|       PYTHON_ARCH: "64" | ||||
|       TESTENV: "py35" | ||||
| 
 | ||||
|     # Also test a Python version not pre-installed | ||||
|     # See: https://github.com/ogrisel/python-appveyor-demo/issues/10 | ||||
| 
 | ||||
|     - PYTHON: "C:\\Python266" | ||||
|       PYTHON_VERSION: "2.6.6" | ||||
|       PYTHON_ARCH: "32" | ||||
|       TESTENV: "py26" | ||||
| 
 | ||||
|     # xdist testing | ||||
| 
 | ||||
|     - PYTHON: "C:\\Python27" | ||||
|       PYTHON_VERSION: "2.7.x" # currently 2.7.9 | ||||
|       PYTHON_ARCH: "32" | ||||
|       TESTENV: "py27-xdist" | ||||
| 
 | ||||
|     - PYTHON: "C:\\Python35" | ||||
|       PYTHON_VERSION: "3.5.x" # currently 3.5.0 | ||||
|       PYTHON_ARCH: "32" | ||||
|       TESTENV: "py35-xdist" | ||||
| 
 | ||||
| 
 | ||||
| install: | ||||
|   - ECHO "Filesystem root:" | ||||
|   - ps: "ls \"C:/\"" | ||||
|   - echo Installed Pythons | ||||
|   - dir c:\Python* | ||||
| 
 | ||||
|   - ECHO "Installed SDKs:" | ||||
|   - ps: "ls \"C:/Program Files/Microsoft SDKs/Windows\"" | ||||
| 
 | ||||
|   # Install Python (from the official .msi of http://python.org) and pip when | ||||
|   # not already installed. | ||||
|   - ps: if (-not(Test-Path($env:PYTHON))) { & appveyor\install.ps1 } | ||||
| 
 | ||||
|   # Prepend newly installed Python to the PATH of this build (this cannot be | ||||
|   # done from inside the powershell script as it would require to restart | ||||
|   # the parent CMD process). | ||||
|   - "SET PATH=%PYTHON%;%PYTHON%\\Scripts;%PATH%" | ||||
| 
 | ||||
|   # Check that we have the expected version and architecture for Python | ||||
|   - "python --version" | ||||
|   - "python -c \"import struct; print(struct.calcsize('P') * 8)\"" | ||||
| 
 | ||||
|   # Install the build dependencies of the project. If some dependencies contain | ||||
|   # compiled extensions and are not provided as pre-built wheel packages, | ||||
|   # pip will build them from source using the MSVC compiler matching the | ||||
|   # target Python version and architecture | ||||
|   - C:\Python27\python -m pip install tox | ||||
|   - C:\Python35\python -m pip install tox | ||||
| 
 | ||||
| build: false  # Not a C# project, build stuff at the test step instead. | ||||
| 
 | ||||
| test_script: | ||||
|   # Build the compiled extension and run the project tests | ||||
|   - C:\Python27\python -m tox -e %TESTENV% | ||||
|   - 'set TESTENVS= | ||||
|           flakes, | ||||
|           py26, | ||||
|           py27, | ||||
|           py33, | ||||
|           py34, | ||||
|           py27-xdist, | ||||
|           py35-xdist | ||||
|     ' | ||||
|   - C:\Python35\python -m tox -e "%TESTENVS%" | ||||
|  |  | |||
|  | @ -1,180 +0,0 @@ | |||
| # Sample script to install Python and pip under Windows | ||||
| # Authors: Olivier Grisel, Jonathan Helmus and Kyle Kastner | ||||
| # License: CC0 1.0 Universal: http://creativecommons.org/publicdomain/zero/1.0/ | ||||
| 
 | ||||
| $MINICONDA_URL = "http://repo.continuum.io/miniconda/" | ||||
| $BASE_URL = "https://www.python.org/ftp/python/" | ||||
| $GET_PIP_URL = "https://bootstrap.pypa.io/get-pip.py" | ||||
| $GET_PIP_PATH = "C:\get-pip.py" | ||||
| 
 | ||||
| 
 | ||||
| function DownloadPython ($python_version, $platform_suffix) { | ||||
|     $webclient = New-Object System.Net.WebClient | ||||
|     $filename = "python-" + $python_version + $platform_suffix + ".msi" | ||||
|     $url = $BASE_URL + $python_version + "/" + $filename | ||||
| 
 | ||||
|     $basedir = $pwd.Path + "\" | ||||
|     $filepath = $basedir + $filename | ||||
|     if (Test-Path $filename) { | ||||
|         Write-Host "Reusing" $filepath | ||||
|         return $filepath | ||||
|     } | ||||
| 
 | ||||
|     # Download and retry up to 3 times in case of network transient errors. | ||||
|     Write-Host "Downloading" $filename "from" $url | ||||
|     $retry_attempts = 2 | ||||
|     for($i=0; $i -lt $retry_attempts; $i++){ | ||||
|         try { | ||||
|             $webclient.DownloadFile($url, $filepath) | ||||
|             break | ||||
|         } | ||||
|         Catch [Exception]{ | ||||
|             Start-Sleep 1 | ||||
|         } | ||||
|    } | ||||
|    if (Test-Path $filepath) { | ||||
|        Write-Host "File saved at" $filepath | ||||
|    } else { | ||||
|        # Retry once to get the error message if any at the last try | ||||
|        $webclient.DownloadFile($url, $filepath) | ||||
|    } | ||||
|    return $filepath | ||||
| } | ||||
| 
 | ||||
| 
 | ||||
| function InstallPython ($python_version, $architecture, $python_home) { | ||||
|     Write-Host "Installing Python" $python_version "for" $architecture "bit architecture to" $python_home | ||||
|     if (Test-Path $python_home) { | ||||
|         Write-Host $python_home "already exists, skipping." | ||||
|         return $false | ||||
|     } | ||||
|     if ($architecture -eq "32") { | ||||
|         $platform_suffix = "" | ||||
|     } else { | ||||
|         $platform_suffix = ".amd64" | ||||
|     } | ||||
|     $msipath = DownloadPython $python_version $platform_suffix | ||||
|     Write-Host "Installing" $msipath "to" $python_home | ||||
|     $install_log = $python_home + ".log" | ||||
|     $install_args = "/qn /log $install_log /i $msipath TARGETDIR=$python_home" | ||||
|     $uninstall_args = "/qn /x $msipath" | ||||
|     RunCommand "msiexec.exe" $install_args | ||||
|     if (-not(Test-Path $python_home)) { | ||||
|         Write-Host "Python seems to be installed else-where, reinstalling." | ||||
|         RunCommand "msiexec.exe" $uninstall_args | ||||
|         RunCommand "msiexec.exe" $install_args | ||||
|     } | ||||
|     if (Test-Path $python_home) { | ||||
|         Write-Host "Python $python_version ($architecture) installation complete" | ||||
|     } else { | ||||
|         Write-Host "Failed to install Python in $python_home" | ||||
|         Get-Content -Path $install_log | ||||
|         Exit 1 | ||||
|     } | ||||
| } | ||||
| 
 | ||||
| function RunCommand ($command, $command_args) { | ||||
|     Write-Host $command $command_args | ||||
|     Start-Process -FilePath $command -ArgumentList $command_args -Wait -Passthru | ||||
| } | ||||
| 
 | ||||
| 
 | ||||
| function InstallPip ($python_home) { | ||||
|     $pip_path = $python_home + "\Scripts\pip.exe" | ||||
|     $python_path = $python_home + "\python.exe" | ||||
|     if (-not(Test-Path $pip_path)) { | ||||
|         Write-Host "Installing pip..." | ||||
|         $webclient = New-Object System.Net.WebClient | ||||
|         $webclient.DownloadFile($GET_PIP_URL, $GET_PIP_PATH) | ||||
|         Write-Host "Executing:" $python_path $GET_PIP_PATH | ||||
|         Start-Process -FilePath "$python_path" -ArgumentList "$GET_PIP_PATH" -Wait -Passthru | ||||
|     } else { | ||||
|         Write-Host "pip already installed." | ||||
|     } | ||||
| } | ||||
| 
 | ||||
| 
 | ||||
| function DownloadMiniconda ($python_version, $platform_suffix) { | ||||
|     $webclient = New-Object System.Net.WebClient | ||||
|     if ($python_version -eq "3.4") { | ||||
|         $filename = "Miniconda3-3.5.5-Windows-" + $platform_suffix + ".exe" | ||||
|     } else { | ||||
|         $filename = "Miniconda-3.5.5-Windows-" + $platform_suffix + ".exe" | ||||
|     } | ||||
|     $url = $MINICONDA_URL + $filename | ||||
| 
 | ||||
|     $basedir = $pwd.Path + "\" | ||||
|     $filepath = $basedir + $filename | ||||
|     if (Test-Path $filename) { | ||||
|         Write-Host "Reusing" $filepath | ||||
|         return $filepath | ||||
|     } | ||||
| 
 | ||||
|     # Download and retry up to 3 times in case of network transient errors. | ||||
|     Write-Host "Downloading" $filename "from" $url | ||||
|     $retry_attempts = 2 | ||||
|     for($i=0; $i -lt $retry_attempts; $i++){ | ||||
|         try { | ||||
|             $webclient.DownloadFile($url, $filepath) | ||||
|             break | ||||
|         } | ||||
|         Catch [Exception]{ | ||||
|             Start-Sleep 1 | ||||
|         } | ||||
|    } | ||||
|    if (Test-Path $filepath) { | ||||
|        Write-Host "File saved at" $filepath | ||||
|    } else { | ||||
|        # Retry once to get the error message if any at the last try | ||||
|        $webclient.DownloadFile($url, $filepath) | ||||
|    } | ||||
|    return $filepath | ||||
| } | ||||
| 
 | ||||
| 
 | ||||
| function InstallMiniconda ($python_version, $architecture, $python_home) { | ||||
|     Write-Host "Installing Python" $python_version "for" $architecture "bit architecture to" $python_home | ||||
|     if (Test-Path $python_home) { | ||||
|         Write-Host $python_home "already exists, skipping." | ||||
|         return $false | ||||
|     } | ||||
|     if ($architecture -eq "32") { | ||||
|         $platform_suffix = "x86" | ||||
|     } else { | ||||
|         $platform_suffix = "x86_64" | ||||
|     } | ||||
|     $filepath = DownloadMiniconda $python_version $platform_suffix | ||||
|     Write-Host "Installing" $filepath "to" $python_home | ||||
|     $install_log = $python_home + ".log" | ||||
|     $args = "/S /D=$python_home" | ||||
|     Write-Host $filepath $args | ||||
|     Start-Process -FilePath $filepath -ArgumentList $args -Wait -Passthru | ||||
|     if (Test-Path $python_home) { | ||||
|         Write-Host "Python $python_version ($architecture) installation complete" | ||||
|     } else { | ||||
|         Write-Host "Failed to install Python in $python_home" | ||||
|         Get-Content -Path $install_log | ||||
|         Exit 1 | ||||
|     } | ||||
| } | ||||
| 
 | ||||
| 
 | ||||
| function InstallMinicondaPip ($python_home) { | ||||
|     $pip_path = $python_home + "\Scripts\pip.exe" | ||||
|     $conda_path = $python_home + "\Scripts\conda.exe" | ||||
|     if (-not(Test-Path $pip_path)) { | ||||
|         Write-Host "Installing pip..." | ||||
|         $args = "install --yes pip" | ||||
|         Write-Host $conda_path $args | ||||
|         Start-Process -FilePath "$conda_path" -ArgumentList $args -Wait -Passthru | ||||
|     } else { | ||||
|         Write-Host "pip already installed." | ||||
|     } | ||||
| } | ||||
| 
 | ||||
| function main () { | ||||
|     InstallPython $env:PYTHON_VERSION $env:PYTHON_ARCH $env:PYTHON | ||||
|     InstallPip $env:PYTHON | ||||
| } | ||||
| 
 | ||||
| main | ||||
|  | @ -6,6 +6,7 @@ Release announcements | |||
|    :maxdepth: 2 | ||||
| 
 | ||||
| 
 | ||||
|    release-2.8.5 | ||||
|    release-2.8.4 | ||||
|    release-2.8.3 | ||||
|    release-2.8.2 | ||||
|  |  | |||
|  | @ -0,0 +1,39 @@ | |||
| pytest-2.8.5 | ||||
| ============ | ||||
| 
 | ||||
| pytest is a mature Python testing tool with more than a 1100 tests | ||||
| against itself, passing on many different interpreters and platforms. | ||||
| This release is supposed to be drop-in compatible to 2.8.4. | ||||
| 
 | ||||
| See below for the changes and see docs at: | ||||
| 
 | ||||
|     http://pytest.org | ||||
| 
 | ||||
| As usual, you can upgrade from pypi via:: | ||||
| 
 | ||||
|     pip install -U pytest | ||||
| 
 | ||||
| Thanks to all who contributed to this release, among them: | ||||
| 
 | ||||
|   Alex Gaynor | ||||
|   aselus-hub | ||||
|   Bruno Oliveira | ||||
|   Ronny Pfannschmidt | ||||
| 
 | ||||
| 
 | ||||
| Happy testing, | ||||
| The py.test Development Team | ||||
| 
 | ||||
| 
 | ||||
| 2.8.5 (compared to 2.8.4) | ||||
| ------------------------- | ||||
| 
 | ||||
| - fix #1243: fixed issue where class attributes injected during collection could break pytest. | ||||
|   PR by Alexei Kozlenok, thanks Ronny Pfannschmidt and Bruno Oliveira for the review and help. | ||||
| 
 | ||||
| - fix #1074: precompute junitxml chunks instead of storing the whole tree in objects | ||||
|   Thanks Bruno Oliveira for the report and Ronny Pfannschmidt for the PR | ||||
| 
 | ||||
| - fix #1238: fix ``pytest.deprecated_call()`` receiving multiple arguments | ||||
|   (Regression introduced in 2.8.4). Thanks Alex Gaynor for the report and | ||||
|   Bruno Oliveira for the PR. | ||||
|  | @ -26,7 +26,7 @@ you will see the return value of the function call:: | |||
| 
 | ||||
|     $ py.test test_assert1.py | ||||
|     ======= test session starts ======== | ||||
|     platform linux -- Python 3.4.3, pytest-2.8.4, py-1.4.30, pluggy-0.3.1 | ||||
|     platform linux -- Python 3.4.3, pytest-2.8.5, py-1.4.31, pluggy-0.3.1 | ||||
|     rootdir: $REGENDOC_TMPDIR, inifile:  | ||||
|     collected 1 items | ||||
|      | ||||
|  | @ -146,7 +146,7 @@ if you run this module:: | |||
| 
 | ||||
|     $ py.test test_assert2.py | ||||
|     ======= test session starts ======== | ||||
|     platform linux -- Python 3.4.3, pytest-2.8.4, py-1.4.30, pluggy-0.3.1 | ||||
|     platform linux -- Python 3.4.3, pytest-2.8.5, py-1.4.31, pluggy-0.3.1 | ||||
|     rootdir: $REGENDOC_TMPDIR, inifile:  | ||||
|     collected 1 items | ||||
|      | ||||
|  |  | |||
|  | @ -80,7 +80,7 @@ If you then run it with ``--lf``:: | |||
| 
 | ||||
|     $ py.test --lf | ||||
|     ======= test session starts ======== | ||||
|     platform linux -- Python 3.4.3, pytest-2.8.4, py-1.4.30, pluggy-0.3.1 | ||||
|     platform linux -- Python 3.4.3, pytest-2.8.5, py-1.4.31, pluggy-0.3.1 | ||||
|     run-last-failure: rerun last 2 failures | ||||
|     rootdir: $REGENDOC_TMPDIR, inifile:  | ||||
|     collected 50 items | ||||
|  | @ -121,7 +121,7 @@ of ``FF`` and dots):: | |||
| 
 | ||||
|     $ py.test --ff | ||||
|     ======= test session starts ======== | ||||
|     platform linux -- Python 3.4.3, pytest-2.8.4, py-1.4.30, pluggy-0.3.1 | ||||
|     platform linux -- Python 3.4.3, pytest-2.8.5, py-1.4.31, pluggy-0.3.1 | ||||
|     run-last-failure: rerun last 2 failures first | ||||
|     rootdir: $REGENDOC_TMPDIR, inifile:  | ||||
|     collected 50 items | ||||
|  | @ -226,7 +226,7 @@ You can always peek at the content of the cache using the | |||
| 
 | ||||
|     $ py.test --cache-clear | ||||
|     ======= test session starts ======== | ||||
|     platform linux -- Python 3.4.3, pytest-2.8.4, py-1.4.30, pluggy-0.3.1 | ||||
|     platform linux -- Python 3.4.3, pytest-2.8.5, py-1.4.31, pluggy-0.3.1 | ||||
|     rootdir: $REGENDOC_TMPDIR, inifile:  | ||||
|     collected 1 items | ||||
|      | ||||
|  |  | |||
|  | @ -64,7 +64,7 @@ of the failing function and hide the other one:: | |||
| 
 | ||||
|     $ py.test | ||||
|     ======= test session starts ======== | ||||
|     platform linux -- Python 3.4.3, pytest-2.8.4, py-1.4.30, pluggy-0.3.1 | ||||
|     platform linux -- Python 3.4.3, pytest-2.8.5, py-1.4.31, pluggy-0.3.1 | ||||
|     rootdir: $REGENDOC_TMPDIR, inifile:  | ||||
|     collected 2 items | ||||
|      | ||||
|  |  | |||
|  | @ -46,7 +46,7 @@ then you can just invoke ``py.test`` without command line options:: | |||
| 
 | ||||
|     $ py.test | ||||
|     ======= test session starts ======== | ||||
|     platform linux -- Python 3.4.3, pytest-2.8.4, py-1.4.30, pluggy-0.3.1 | ||||
|     platform linux -- Python 3.4.3, pytest-2.8.5, py-1.4.31, pluggy-0.3.1 | ||||
|     rootdir: $REGENDOC_TMPDIR, inifile: pytest.ini | ||||
|     collected 1 items | ||||
|      | ||||
|  |  | |||
|  | @ -31,7 +31,7 @@ You can then restrict a test run to only run tests marked with ``webtest``:: | |||
| 
 | ||||
|     $ py.test -v -m webtest | ||||
|     ======= test session starts ======== | ||||
|     platform linux -- Python 3.4.3, pytest-2.8.4, py-1.4.30, pluggy-0.3.1 -- $PYTHON_PREFIX/bin/python3.4 | ||||
|     platform linux -- Python 3.4.3, pytest-2.8.5, py-1.4.31, pluggy-0.3.1 -- $PYTHON_PREFIX/bin/python3.4 | ||||
|     cachedir: .cache | ||||
|     rootdir: $REGENDOC_TMPDIR, inifile:  | ||||
|     collecting ... collected 4 items | ||||
|  | @ -45,7 +45,7 @@ Or the inverse, running all tests except the webtest ones:: | |||
| 
 | ||||
|     $ py.test -v -m "not webtest" | ||||
|     ======= test session starts ======== | ||||
|     platform linux -- Python 3.4.3, pytest-2.8.4, py-1.4.30, pluggy-0.3.1 -- $PYTHON_PREFIX/bin/python3.4 | ||||
|     platform linux -- Python 3.4.3, pytest-2.8.5, py-1.4.31, pluggy-0.3.1 -- $PYTHON_PREFIX/bin/python3.4 | ||||
|     cachedir: .cache | ||||
|     rootdir: $REGENDOC_TMPDIR, inifile:  | ||||
|     collecting ... collected 4 items | ||||
|  | @ -66,7 +66,7 @@ tests based on their module, class, method, or function name:: | |||
| 
 | ||||
|     $ py.test -v test_server.py::TestClass::test_method | ||||
|     ======= test session starts ======== | ||||
|     platform linux -- Python 3.4.3, pytest-2.8.4, py-1.4.30, pluggy-0.3.1 -- $PYTHON_PREFIX/bin/python3.4 | ||||
|     platform linux -- Python 3.4.3, pytest-2.8.5, py-1.4.31, pluggy-0.3.1 -- $PYTHON_PREFIX/bin/python3.4 | ||||
|     cachedir: .cache | ||||
|     rootdir: $REGENDOC_TMPDIR, inifile:  | ||||
|     collecting ... collected 5 items | ||||
|  | @ -79,7 +79,7 @@ You can also select on the class:: | |||
| 
 | ||||
|     $ py.test -v test_server.py::TestClass | ||||
|     ======= test session starts ======== | ||||
|     platform linux -- Python 3.4.3, pytest-2.8.4, py-1.4.30, pluggy-0.3.1 -- $PYTHON_PREFIX/bin/python3.4 | ||||
|     platform linux -- Python 3.4.3, pytest-2.8.5, py-1.4.31, pluggy-0.3.1 -- $PYTHON_PREFIX/bin/python3.4 | ||||
|     cachedir: .cache | ||||
|     rootdir: $REGENDOC_TMPDIR, inifile:  | ||||
|     collecting ... collected 4 items | ||||
|  | @ -92,7 +92,7 @@ Or select multiple nodes:: | |||
| 
 | ||||
|   $ py.test -v test_server.py::TestClass test_server.py::test_send_http | ||||
|   ======= test session starts ======== | ||||
|   platform linux -- Python 3.4.3, pytest-2.8.4, py-1.4.30, pluggy-0.3.1 -- $PYTHON_PREFIX/bin/python3.4 | ||||
|   platform linux -- Python 3.4.3, pytest-2.8.5, py-1.4.31, pluggy-0.3.1 -- $PYTHON_PREFIX/bin/python3.4 | ||||
|   cachedir: .cache | ||||
|   rootdir: $REGENDOC_TMPDIR, inifile:  | ||||
|   collecting ... collected 8 items | ||||
|  | @ -130,7 +130,7 @@ select tests based on their names:: | |||
| 
 | ||||
|     $ py.test -v -k http  # running with the above defined example module | ||||
|     ======= test session starts ======== | ||||
|     platform linux -- Python 3.4.3, pytest-2.8.4, py-1.4.30, pluggy-0.3.1 -- $PYTHON_PREFIX/bin/python3.4 | ||||
|     platform linux -- Python 3.4.3, pytest-2.8.5, py-1.4.31, pluggy-0.3.1 -- $PYTHON_PREFIX/bin/python3.4 | ||||
|     cachedir: .cache | ||||
|     rootdir: $REGENDOC_TMPDIR, inifile:  | ||||
|     collecting ... collected 4 items | ||||
|  | @ -144,7 +144,7 @@ And you can also run all tests except the ones that match the keyword:: | |||
| 
 | ||||
|     $ py.test -k "not send_http" -v | ||||
|     ======= test session starts ======== | ||||
|     platform linux -- Python 3.4.3, pytest-2.8.4, py-1.4.30, pluggy-0.3.1 -- $PYTHON_PREFIX/bin/python3.4 | ||||
|     platform linux -- Python 3.4.3, pytest-2.8.5, py-1.4.31, pluggy-0.3.1 -- $PYTHON_PREFIX/bin/python3.4 | ||||
|     cachedir: .cache | ||||
|     rootdir: $REGENDOC_TMPDIR, inifile:  | ||||
|     collecting ... collected 4 items | ||||
|  | @ -160,7 +160,7 @@ Or to select "http" and "quick" tests:: | |||
| 
 | ||||
|     $ py.test -k "http or quick" -v | ||||
|     ======= test session starts ======== | ||||
|     platform linux -- Python 3.4.3, pytest-2.8.4, py-1.4.30, pluggy-0.3.1 -- $PYTHON_PREFIX/bin/python3.4 | ||||
|     platform linux -- Python 3.4.3, pytest-2.8.5, py-1.4.31, pluggy-0.3.1 -- $PYTHON_PREFIX/bin/python3.4 | ||||
|     cachedir: .cache | ||||
|     rootdir: $REGENDOC_TMPDIR, inifile:  | ||||
|     collecting ... collected 4 items | ||||
|  | @ -350,7 +350,7 @@ the test needs:: | |||
| 
 | ||||
|     $ py.test -E stage2 | ||||
|     ======= test session starts ======== | ||||
|     platform linux -- Python 3.4.3, pytest-2.8.4, py-1.4.30, pluggy-0.3.1 | ||||
|     platform linux -- Python 3.4.3, pytest-2.8.5, py-1.4.31, pluggy-0.3.1 | ||||
|     rootdir: $REGENDOC_TMPDIR, inifile:  | ||||
|     collected 1 items | ||||
|      | ||||
|  | @ -362,7 +362,7 @@ and here is one that specifies exactly the environment needed:: | |||
| 
 | ||||
|     $ py.test -E stage1 | ||||
|     ======= test session starts ======== | ||||
|     platform linux -- Python 3.4.3, pytest-2.8.4, py-1.4.30, pluggy-0.3.1 | ||||
|     platform linux -- Python 3.4.3, pytest-2.8.5, py-1.4.31, pluggy-0.3.1 | ||||
|     rootdir: $REGENDOC_TMPDIR, inifile:  | ||||
|     collected 1 items | ||||
|      | ||||
|  | @ -481,7 +481,7 @@ then you will see two test skipped and two executed tests as expected:: | |||
| 
 | ||||
|     $ py.test -rs # this option reports skip reasons | ||||
|     ======= test session starts ======== | ||||
|     platform linux -- Python 3.4.3, pytest-2.8.4, py-1.4.30, pluggy-0.3.1 | ||||
|     platform linux -- Python 3.4.3, pytest-2.8.5, py-1.4.31, pluggy-0.3.1 | ||||
|     rootdir: $REGENDOC_TMPDIR, inifile:  | ||||
|     collected 4 items | ||||
|      | ||||
|  | @ -495,7 +495,7 @@ Note that if you specify a platform via the marker-command line option like this | |||
| 
 | ||||
|     $ py.test -m linux2 | ||||
|     ======= test session starts ======== | ||||
|     platform linux -- Python 3.4.3, pytest-2.8.4, py-1.4.30, pluggy-0.3.1 | ||||
|     platform linux -- Python 3.4.3, pytest-2.8.5, py-1.4.31, pluggy-0.3.1 | ||||
|     rootdir: $REGENDOC_TMPDIR, inifile:  | ||||
|     collected 4 items | ||||
|      | ||||
|  | @ -547,7 +547,7 @@ We can now use the ``-m option`` to select one set:: | |||
| 
 | ||||
|   $ py.test -m interface --tb=short | ||||
|   ======= test session starts ======== | ||||
|   platform linux -- Python 3.4.3, pytest-2.8.4, py-1.4.30, pluggy-0.3.1 | ||||
|   platform linux -- Python 3.4.3, pytest-2.8.5, py-1.4.31, pluggy-0.3.1 | ||||
|   rootdir: $REGENDOC_TMPDIR, inifile:  | ||||
|   collected 4 items | ||||
|    | ||||
|  | @ -569,7 +569,7 @@ or to select both "event" and "interface" tests:: | |||
| 
 | ||||
|   $ py.test -m "interface or event" --tb=short | ||||
|   ======= test session starts ======== | ||||
|   platform linux -- Python 3.4.3, pytest-2.8.4, py-1.4.30, pluggy-0.3.1 | ||||
|   platform linux -- Python 3.4.3, pytest-2.8.5, py-1.4.31, pluggy-0.3.1 | ||||
|   rootdir: $REGENDOC_TMPDIR, inifile:  | ||||
|   collected 4 items | ||||
|    | ||||
|  |  | |||
|  | @ -27,11 +27,11 @@ now execute the test specification:: | |||
| 
 | ||||
|     nonpython $ py.test test_simple.yml | ||||
|     ======= test session starts ======== | ||||
|     platform linux -- Python 3.4.3, pytest-2.8.4, py-1.4.30, pluggy-0.3.1 | ||||
|     platform linux -- Python 3.4.3, pytest-2.8.5, py-1.4.31, pluggy-0.3.1 | ||||
|     rootdir: $REGENDOC_TMPDIR/nonpython, inifile:  | ||||
|     collected 2 items | ||||
|      | ||||
|     test_simple.yml .F | ||||
|     test_simple.yml F. | ||||
|      | ||||
|     ======= FAILURES ======== | ||||
|     _______ usecase: hello ________ | ||||
|  | @ -59,13 +59,13 @@ consulted when reporting in ``verbose`` mode:: | |||
| 
 | ||||
|     nonpython $ py.test -v | ||||
|     ======= test session starts ======== | ||||
|     platform linux -- Python 3.4.3, pytest-2.8.4, py-1.4.30, pluggy-0.3.1 -- $PYTHON_PREFIX/bin/python3.4 | ||||
|     platform linux -- Python 3.4.3, pytest-2.8.5, py-1.4.31, pluggy-0.3.1 -- $PYTHON_PREFIX/bin/python3.4 | ||||
|     cachedir: .cache | ||||
|     rootdir: $REGENDOC_TMPDIR/nonpython, inifile:  | ||||
|     collecting ... collected 2 items | ||||
|      | ||||
|     test_simple.yml::ok PASSED | ||||
|     test_simple.yml::hello FAILED | ||||
|     test_simple.yml::ok PASSED | ||||
|      | ||||
|     ======= FAILURES ======== | ||||
|     _______ usecase: hello ________ | ||||
|  | @ -81,11 +81,11 @@ interesting to just look at the collection tree:: | |||
| 
 | ||||
|     nonpython $ py.test --collect-only | ||||
|     ======= test session starts ======== | ||||
|     platform linux -- Python 3.4.3, pytest-2.8.4, py-1.4.30, pluggy-0.3.1 | ||||
|     platform linux -- Python 3.4.3, pytest-2.8.5, py-1.4.31, pluggy-0.3.1 | ||||
|     rootdir: $REGENDOC_TMPDIR/nonpython, inifile:  | ||||
|     collected 2 items | ||||
|     <YamlFile 'test_simple.yml'> | ||||
|       <YamlItem 'ok'> | ||||
|       <YamlItem 'hello'> | ||||
|       <YamlItem 'ok'> | ||||
|      | ||||
|     ======= no tests ran in 0.12 seconds ======== | ||||
|  |  | |||
|  | @ -130,7 +130,7 @@ objects, they are still using the default pytest representation:: | |||
| 
 | ||||
|     $ py.test test_time.py --collect-only | ||||
|     ======= test session starts ======== | ||||
|     platform linux -- Python 3.4.3, pytest-2.8.4, py-1.4.30, pluggy-0.3.1 | ||||
|     platform linux -- Python 3.4.3, pytest-2.8.5, py-1.4.31, pluggy-0.3.1 | ||||
|     rootdir: $REGENDOC_TMPDIR, inifile:  | ||||
|     collected 6 items | ||||
|     <Module 'test_time.py'> | ||||
|  | @ -181,7 +181,7 @@ this is a fully self-contained example which you can run with:: | |||
| 
 | ||||
|     $ py.test test_scenarios.py | ||||
|     ======= test session starts ======== | ||||
|     platform linux -- Python 3.4.3, pytest-2.8.4, py-1.4.30, pluggy-0.3.1 | ||||
|     platform linux -- Python 3.4.3, pytest-2.8.5, py-1.4.31, pluggy-0.3.1 | ||||
|     rootdir: $REGENDOC_TMPDIR, inifile:  | ||||
|     collected 4 items | ||||
|      | ||||
|  | @ -194,7 +194,7 @@ If you just collect tests you'll also nicely see 'advanced' and 'basic' as varia | |||
| 
 | ||||
|     $ py.test --collect-only test_scenarios.py | ||||
|     ======= test session starts ======== | ||||
|     platform linux -- Python 3.4.3, pytest-2.8.4, py-1.4.30, pluggy-0.3.1 | ||||
|     platform linux -- Python 3.4.3, pytest-2.8.5, py-1.4.31, pluggy-0.3.1 | ||||
|     rootdir: $REGENDOC_TMPDIR, inifile:  | ||||
|     collected 4 items | ||||
|     <Module 'test_scenarios.py'> | ||||
|  | @ -259,7 +259,7 @@ Let's first see how it looks like at collection time:: | |||
| 
 | ||||
|     $ py.test test_backends.py --collect-only | ||||
|     ======= test session starts ======== | ||||
|     platform linux -- Python 3.4.3, pytest-2.8.4, py-1.4.30, pluggy-0.3.1 | ||||
|     platform linux -- Python 3.4.3, pytest-2.8.5, py-1.4.31, pluggy-0.3.1 | ||||
|     rootdir: $REGENDOC_TMPDIR, inifile:  | ||||
|     collected 2 items | ||||
|     <Module 'test_backends.py'> | ||||
|  | @ -320,7 +320,7 @@ The result of this test will be successful:: | |||
| 
 | ||||
|     $ py.test test_indirect_list.py --collect-only | ||||
|     ======= test session starts ======== | ||||
|     platform linux -- Python 3.4.3, pytest-2.8.4, py-1.4.30, pluggy-0.3.1 | ||||
|     platform linux -- Python 3.4.3, pytest-2.8.5, py-1.4.31, pluggy-0.3.1 | ||||
|     rootdir: $REGENDOC_TMPDIR, inifile:  | ||||
|     collected 1 items | ||||
|     <Module 'test_indirect_list.py'> | ||||
|  | @ -448,7 +448,7 @@ If you run this with reporting for skips enabled:: | |||
| 
 | ||||
|     $ py.test -rs test_module.py | ||||
|     ======= test session starts ======== | ||||
|     platform linux -- Python 3.4.3, pytest-2.8.4, py-1.4.30, pluggy-0.3.1 | ||||
|     platform linux -- Python 3.4.3, pytest-2.8.5, py-1.4.31, pluggy-0.3.1 | ||||
|     rootdir: $REGENDOC_TMPDIR, inifile:  | ||||
|     collected 2 items | ||||
|      | ||||
|  |  | |||
|  | @ -82,7 +82,7 @@ then the test collection looks like this:: | |||
| 
 | ||||
|     $ py.test --collect-only | ||||
|     ======= test session starts ======== | ||||
|     platform linux -- Python 3.4.3, pytest-2.8.4, py-1.4.30, pluggy-0.3.1 | ||||
|     platform linux -- Python 3.4.3, pytest-2.8.5, py-1.4.31, pluggy-0.3.1 | ||||
|     rootdir: $REGENDOC_TMPDIR, inifile: setup.cfg | ||||
|     collected 2 items | ||||
|     <Module 'check_myapp.py'> | ||||
|  | @ -128,7 +128,7 @@ You can always peek at the collection tree without running tests like this:: | |||
| 
 | ||||
|     . $ py.test --collect-only pythoncollection.py | ||||
|     ======= test session starts ======== | ||||
|     platform linux -- Python 3.4.3, pytest-2.8.4, py-1.4.30, pluggy-0.3.1 | ||||
|     platform linux -- Python 3.4.3, pytest-2.8.5, py-1.4.31, pluggy-0.3.1 | ||||
|     rootdir: $REGENDOC_TMPDIR, inifile: pytest.ini | ||||
|     collected 3 items | ||||
|     <Module 'CWD/pythoncollection.py'> | ||||
|  | @ -182,7 +182,7 @@ interpreters and will leave out the setup.py file:: | |||
| 
 | ||||
|     $ py.test --collect-only | ||||
|     ======= test session starts ======== | ||||
|     platform linux -- Python 3.4.3, pytest-2.8.4, py-1.4.30, pluggy-0.3.1 | ||||
|     platform linux -- Python 3.4.3, pytest-2.8.5, py-1.4.31, pluggy-0.3.1 | ||||
|     rootdir: $REGENDOC_TMPDIR, inifile: pytest.ini | ||||
|     collected 0 items | ||||
|      | ||||
|  |  | |||
|  | @ -13,7 +13,7 @@ get on the terminal - we are working on that): | |||
| 
 | ||||
|     assertion $ py.test failure_demo.py | ||||
|     ======= test session starts ======== | ||||
|     platform linux -- Python 3.4.3, pytest-2.8.4, py-1.4.30, pluggy-0.3.1 | ||||
|     platform linux -- Python 3.4.3, pytest-2.8.5, py-1.4.31, pluggy-0.3.1 | ||||
|     rootdir: $REGENDOC_TMPDIR/assertion, inifile:  | ||||
|     collected 42 items | ||||
|      | ||||
|  |  | |||
|  | @ -108,7 +108,7 @@ directory with the above conftest.py:: | |||
| 
 | ||||
|     $ py.test | ||||
|     ======= test session starts ======== | ||||
|     platform linux -- Python 3.4.3, pytest-2.8.4, py-1.4.30, pluggy-0.3.1 | ||||
|     platform linux -- Python 3.4.3, pytest-2.8.5, py-1.4.31, pluggy-0.3.1 | ||||
|     rootdir: $REGENDOC_TMPDIR, inifile:  | ||||
|     collected 0 items | ||||
|      | ||||
|  | @ -156,7 +156,7 @@ and when running it will see a skipped "slow" test:: | |||
| 
 | ||||
|     $ py.test -rs    # "-rs" means report details on the little 's' | ||||
|     ======= test session starts ======== | ||||
|     platform linux -- Python 3.4.3, pytest-2.8.4, py-1.4.30, pluggy-0.3.1 | ||||
|     platform linux -- Python 3.4.3, pytest-2.8.5, py-1.4.31, pluggy-0.3.1 | ||||
|     rootdir: $REGENDOC_TMPDIR, inifile:  | ||||
|     collected 2 items | ||||
|      | ||||
|  | @ -170,7 +170,7 @@ Or run it including the ``slow`` marked test:: | |||
| 
 | ||||
|     $ py.test --runslow | ||||
|     ======= test session starts ======== | ||||
|     platform linux -- Python 3.4.3, pytest-2.8.4, py-1.4.30, pluggy-0.3.1 | ||||
|     platform linux -- Python 3.4.3, pytest-2.8.5, py-1.4.31, pluggy-0.3.1 | ||||
|     rootdir: $REGENDOC_TMPDIR, inifile:  | ||||
|     collected 2 items | ||||
|      | ||||
|  | @ -262,7 +262,7 @@ which will add the string to the test header accordingly:: | |||
| 
 | ||||
|     $ py.test | ||||
|     ======= test session starts ======== | ||||
|     platform linux -- Python 3.4.3, pytest-2.8.4, py-1.4.30, pluggy-0.3.1 | ||||
|     platform linux -- Python 3.4.3, pytest-2.8.5, py-1.4.31, pluggy-0.3.1 | ||||
|     project deps: mylib-1.1 | ||||
|     rootdir: $REGENDOC_TMPDIR, inifile:  | ||||
|     collected 0 items | ||||
|  | @ -286,7 +286,7 @@ which will add info only when run with "--v":: | |||
| 
 | ||||
|     $ py.test -v | ||||
|     ======= test session starts ======== | ||||
|     platform linux -- Python 3.4.3, pytest-2.8.4, py-1.4.30, pluggy-0.3.1 -- $PYTHON_PREFIX/bin/python3.4 | ||||
|     platform linux -- Python 3.4.3, pytest-2.8.5, py-1.4.31, pluggy-0.3.1 -- $PYTHON_PREFIX/bin/python3.4 | ||||
|     cachedir: .cache | ||||
|     info1: did you know that ... | ||||
|     did you? | ||||
|  | @ -299,7 +299,7 @@ and nothing when run plainly:: | |||
| 
 | ||||
|     $ py.test | ||||
|     ======= test session starts ======== | ||||
|     platform linux -- Python 3.4.3, pytest-2.8.4, py-1.4.30, pluggy-0.3.1 | ||||
|     platform linux -- Python 3.4.3, pytest-2.8.5, py-1.4.31, pluggy-0.3.1 | ||||
|     rootdir: $REGENDOC_TMPDIR, inifile:  | ||||
|     collected 0 items | ||||
|      | ||||
|  | @ -332,7 +332,7 @@ Now we can profile which test functions execute the slowest:: | |||
| 
 | ||||
|     $ py.test --durations=3 | ||||
|     ======= test session starts ======== | ||||
|     platform linux -- Python 3.4.3, pytest-2.8.4, py-1.4.30, pluggy-0.3.1 | ||||
|     platform linux -- Python 3.4.3, pytest-2.8.5, py-1.4.31, pluggy-0.3.1 | ||||
|     rootdir: $REGENDOC_TMPDIR, inifile:  | ||||
|     collected 3 items | ||||
|      | ||||
|  | @ -341,7 +341,7 @@ Now we can profile which test functions execute the slowest:: | |||
|     ======= slowest 3 test durations ======== | ||||
|     0.20s call     test_some_are_slow.py::test_funcslow2 | ||||
|     0.10s call     test_some_are_slow.py::test_funcslow1 | ||||
|     0.00s teardown test_some_are_slow.py::test_funcslow2 | ||||
|     0.00s setup    test_some_are_slow.py::test_funcslow2 | ||||
|     ======= 3 passed in 0.12 seconds ======== | ||||
| 
 | ||||
| incremental testing - test steps | ||||
|  | @ -394,7 +394,7 @@ If we run this:: | |||
| 
 | ||||
|     $ py.test -rx | ||||
|     ======= test session starts ======== | ||||
|     platform linux -- Python 3.4.3, pytest-2.8.4, py-1.4.30, pluggy-0.3.1 | ||||
|     platform linux -- Python 3.4.3, pytest-2.8.5, py-1.4.31, pluggy-0.3.1 | ||||
|     rootdir: $REGENDOC_TMPDIR, inifile:  | ||||
|     collected 4 items | ||||
|      | ||||
|  | @ -465,7 +465,7 @@ We can run this:: | |||
| 
 | ||||
|     $ py.test | ||||
|     ======= test session starts ======== | ||||
|     platform linux -- Python 3.4.3, pytest-2.8.4, py-1.4.30, pluggy-0.3.1 | ||||
|     platform linux -- Python 3.4.3, pytest-2.8.5, py-1.4.31, pluggy-0.3.1 | ||||
|     rootdir: $REGENDOC_TMPDIR, inifile:  | ||||
|     collected 7 items | ||||
|      | ||||
|  | @ -479,7 +479,7 @@ We can run this:: | |||
|     file $REGENDOC_TMPDIR/b/test_error.py, line 1 | ||||
|       def test_root(db):  # no db here, will error out | ||||
|             fixture 'db' not found | ||||
|             available fixtures: tmpdir, record_xml_property, cache, capsys, monkeypatch, recwarn, pytestconfig, tmpdir_factory, capfd | ||||
|             available fixtures: capsys, capfd, pytestconfig, tmpdir_factory, monkeypatch, record_xml_property, cache, tmpdir, recwarn | ||||
|             use 'py.test --fixtures [testpath]' for help on them. | ||||
|      | ||||
|     $REGENDOC_TMPDIR/b/test_error.py:1 | ||||
|  | @ -569,7 +569,7 @@ and run them:: | |||
| 
 | ||||
|     $ py.test test_module.py | ||||
|     ======= test session starts ======== | ||||
|     platform linux -- Python 3.4.3, pytest-2.8.4, py-1.4.30, pluggy-0.3.1 | ||||
|     platform linux -- Python 3.4.3, pytest-2.8.5, py-1.4.31, pluggy-0.3.1 | ||||
|     rootdir: $REGENDOC_TMPDIR, inifile:  | ||||
|     collected 2 items | ||||
|      | ||||
|  | @ -660,7 +660,7 @@ and run it:: | |||
| 
 | ||||
|     $ py.test -s test_module.py | ||||
|     ======= test session starts ======== | ||||
|     platform linux -- Python 3.4.3, pytest-2.8.4, py-1.4.30, pluggy-0.3.1 | ||||
|     platform linux -- Python 3.4.3, pytest-2.8.5, py-1.4.31, pluggy-0.3.1 | ||||
|     rootdir: $REGENDOC_TMPDIR, inifile:  | ||||
|     collected 3 items | ||||
|      | ||||
|  |  | |||
|  | @ -75,7 +75,7 @@ marked ``smtp`` fixture function.  Running the test looks like this:: | |||
| 
 | ||||
|     $ py.test test_smtpsimple.py | ||||
|     ======= test session starts ======== | ||||
|     platform linux -- Python 3.4.3, pytest-2.8.4, py-1.4.30, pluggy-0.3.1 | ||||
|     platform linux -- Python 3.4.3, pytest-2.8.5, py-1.4.31, pluggy-0.3.1 | ||||
|     rootdir: $REGENDOC_TMPDIR, inifile:  | ||||
|     collected 1 items | ||||
|      | ||||
|  | @ -193,7 +193,7 @@ inspect what is going on and can now run the tests:: | |||
| 
 | ||||
|     $ py.test test_module.py | ||||
|     ======= test session starts ======== | ||||
|     platform linux -- Python 3.4.3, pytest-2.8.4, py-1.4.30, pluggy-0.3.1 | ||||
|     platform linux -- Python 3.4.3, pytest-2.8.5, py-1.4.31, pluggy-0.3.1 | ||||
|     rootdir: $REGENDOC_TMPDIR, inifile:  | ||||
|     collected 2 items | ||||
|      | ||||
|  | @ -480,7 +480,7 @@ Running the above tests results in the following test IDs being used:: | |||
| 
 | ||||
|    $ py.test --collect-only | ||||
|    ======= test session starts ======== | ||||
|    platform linux -- Python 3.4.3, pytest-2.8.4, py-1.4.30, pluggy-0.3.1 | ||||
|    platform linux -- Python 3.4.3, pytest-2.8.5, py-1.4.31, pluggy-0.3.1 | ||||
|    rootdir: $REGENDOC_TMPDIR, inifile:  | ||||
|    collected 10 items | ||||
|    <Module 'test_anothersmtp.py'> | ||||
|  | @ -531,7 +531,7 @@ Here we declare an ``app`` fixture which receives the previously defined | |||
| 
 | ||||
|     $ py.test -v test_appsetup.py | ||||
|     ======= test session starts ======== | ||||
|     platform linux -- Python 3.4.3, pytest-2.8.4, py-1.4.30, pluggy-0.3.1 -- $PYTHON_PREFIX/bin/python3.4 | ||||
|     platform linux -- Python 3.4.3, pytest-2.8.5, py-1.4.31, pluggy-0.3.1 -- $PYTHON_PREFIX/bin/python3.4 | ||||
|     cachedir: .cache | ||||
|     rootdir: $REGENDOC_TMPDIR, inifile:  | ||||
|     collecting ... collected 2 items | ||||
|  | @ -597,7 +597,7 @@ Let's run the tests in verbose mode and with looking at the print-output:: | |||
| 
 | ||||
|     $ py.test -v -s test_module.py | ||||
|     ======= test session starts ======== | ||||
|     platform linux -- Python 3.4.3, pytest-2.8.4, py-1.4.30, pluggy-0.3.1 -- $PYTHON_PREFIX/bin/python3.4 | ||||
|     platform linux -- Python 3.4.3, pytest-2.8.5, py-1.4.31, pluggy-0.3.1 -- $PYTHON_PREFIX/bin/python3.4 | ||||
|     cachedir: .cache | ||||
|     rootdir: $REGENDOC_TMPDIR, inifile:  | ||||
|     collecting ... collected 8 items | ||||
|  |  | |||
|  | @ -27,7 +27,7 @@ Installation options:: | |||
| To check your installation has installed the correct version:: | ||||
| 
 | ||||
|     $ py.test --version | ||||
|     This is pytest version 2.8.4, imported from $PYTHON_PREFIX/lib/python3.4/site-packages/pytest.py | ||||
|     This is pytest version 2.8.5, imported from $PYTHON_PREFIX/lib/python3.4/site-packages/pytest.py | ||||
| 
 | ||||
| If you get an error checkout :ref:`installation issues`. | ||||
| 
 | ||||
|  | @ -49,7 +49,7 @@ That's it. You can execute the test function now:: | |||
| 
 | ||||
|     $ py.test | ||||
|     ======= test session starts ======== | ||||
|     platform linux -- Python 3.4.3, pytest-2.8.4, py-1.4.30, pluggy-0.3.1 | ||||
|     platform linux -- Python 3.4.3, pytest-2.8.5, py-1.4.31, pluggy-0.3.1 | ||||
|     rootdir: $REGENDOC_TMPDIR, inifile:  | ||||
|     collected 1 items | ||||
|      | ||||
|  |  | |||
|  | @ -55,7 +55,7 @@ them in turn:: | |||
| 
 | ||||
|     $ py.test | ||||
|     ======= test session starts ======== | ||||
|     platform linux -- Python 3.4.3, pytest-2.8.4, py-1.4.30, pluggy-0.3.1 | ||||
|     platform linux -- Python 3.4.3, pytest-2.8.5, py-1.4.31, pluggy-0.3.1 | ||||
|     rootdir: $REGENDOC_TMPDIR, inifile:  | ||||
|     collected 3 items | ||||
|      | ||||
|  | @ -103,7 +103,7 @@ Let's run this:: | |||
| 
 | ||||
|     $ py.test | ||||
|     ======= test session starts ======== | ||||
|     platform linux -- Python 3.4.3, pytest-2.8.4, py-1.4.30, pluggy-0.3.1 | ||||
|     platform linux -- Python 3.4.3, pytest-2.8.5, py-1.4.31, pluggy-0.3.1 | ||||
|     rootdir: $REGENDOC_TMPDIR, inifile:  | ||||
|     collected 3 items | ||||
|      | ||||
|  |  | |||
|  | @ -175,7 +175,7 @@ Running it with the report-on-xfail option gives this output:: | |||
| 
 | ||||
|     example $ py.test -rx xfail_demo.py | ||||
|     ======= test session starts ======== | ||||
|     platform linux -- Python 3.4.3, pytest-2.8.4, py-1.4.30, pluggy-0.3.1 | ||||
|     platform linux -- Python 3.4.3, pytest-2.8.5, py-1.4.31, pluggy-0.3.1 | ||||
|     rootdir: $REGENDOC_TMPDIR/example, inifile:  | ||||
|     collected 7 items | ||||
| 
 | ||||
|  |  | |||
|  | @ -29,7 +29,7 @@ Running this would result in a passed test except for the last | |||
| 
 | ||||
|     $ py.test test_tmpdir.py | ||||
|     ======= test session starts ======== | ||||
|     platform linux -- Python 3.4.3, pytest-2.8.4, py-1.4.30, pluggy-0.3.1 | ||||
|     platform linux -- Python 3.4.3, pytest-2.8.5, py-1.4.31, pluggy-0.3.1 | ||||
|     rootdir: $REGENDOC_TMPDIR, inifile:  | ||||
|     collected 1 items | ||||
|      | ||||
|  |  | |||
|  | @ -88,7 +88,7 @@ the ``self.db`` values in the traceback:: | |||
| 
 | ||||
|     $ py.test test_unittest_db.py | ||||
|     ======= test session starts ======== | ||||
|     platform linux -- Python 3.4.3, pytest-2.8.4, py-1.4.30, pluggy-0.3.1 | ||||
|     platform linux -- Python 3.4.3, pytest-2.8.5, py-1.4.31, pluggy-0.3.1 | ||||
|     rootdir: $REGENDOC_TMPDIR, inifile:  | ||||
|     collected 2 items | ||||
|      | ||||
|  |  | |||
|  | @ -1076,3 +1076,26 @@ def test_dont_collect_non_function_callable(testdir): | |||
|         'WC2 *', | ||||
|         '*1 passed, 1 pytest-warnings in *', | ||||
|     ]) | ||||
| 
 | ||||
| 
 | ||||
| def test_class_injection_does_not_break_collection(testdir): | ||||
|     """Tests whether injection during collection time will terminate testing. | ||||
| 
 | ||||
|     In this case the error should not occur if the TestClass itself | ||||
|     is modified during collection time, and the original method list | ||||
|     is still used for collection. | ||||
|     """ | ||||
|     testdir.makeconftest(""" | ||||
|         from test_inject import TestClass | ||||
|         def pytest_generate_tests(metafunc): | ||||
|             TestClass.changed_var = {} | ||||
|     """) | ||||
|     testdir.makepyfile(test_inject=''' | ||||
|          class TestClass(object): | ||||
|             def test_injection(self): | ||||
|                 """Test being parametrized.""" | ||||
|                 pass | ||||
|     ''') | ||||
|     result = testdir.runpytest() | ||||
|     assert "RuntimeError: dictionary changed size during iteration" not in result.stdout.str() | ||||
|     result.stdout.fnmatch_lines(['*1 passed*']) | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue