Merge branch 'main' into ptk/approx-nested-fix
This commit is contained in:
commit
6a9dc37cf1
|
@ -23,6 +23,13 @@ afc607cfd81458d4e4f3b1f3cf8cc931b933907e
|
||||||
5f95dce95602921a70bfbc7d8de2f7712c5e4505
|
5f95dce95602921a70bfbc7d8de2f7712c5e4505
|
||||||
# ran pyupgrade-docs again
|
# ran pyupgrade-docs again
|
||||||
75d0b899bbb56d6849e9d69d83a9426ed3f43f8b
|
75d0b899bbb56d6849e9d69d83a9426ed3f43f8b
|
||||||
|
|
||||||
# move argument parser to own file
|
# move argument parser to own file
|
||||||
c9df77cbd6a365dcb73c39618e4842711817e871
|
c9df77cbd6a365dcb73c39618e4842711817e871
|
||||||
|
# Replace reorder-python-imports by isort due to black incompatibility (#11896)
|
||||||
|
8b54596639f41dfac070030ef20394b9001fe63c
|
||||||
|
# Run blacken-docs with black's 2024's style
|
||||||
|
4546d5445aaefe6a03957db028c263521dfb5c4b
|
||||||
|
# Migration to ruff / ruff format
|
||||||
|
4588653b2497ed25976b7aaff225b889fb476756
|
||||||
|
# Use format specifiers instead of percent format
|
||||||
|
4788165e69d08e10fc6b9c0124083fb358e2e9b0
|
|
@ -0,0 +1,20 @@
|
||||||
|
---
|
||||||
|
|
||||||
|
branch-protection-check-name: Changelog entry
|
||||||
|
action-hints:
|
||||||
|
check-title-prefix: "Chronographer: "
|
||||||
|
external-docs-url: >-
|
||||||
|
https://docs.pytest.org/en/latest/contributing.html#preparing-pull-requests
|
||||||
|
inline-markdown: >-
|
||||||
|
See
|
||||||
|
https://docs.pytest.org/en/latest/contributing.html#preparing-pull-requests
|
||||||
|
for details.
|
||||||
|
enforce-name:
|
||||||
|
suffix: .rst
|
||||||
|
exclude:
|
||||||
|
humans:
|
||||||
|
- pyup-bot
|
||||||
|
labels:
|
||||||
|
skip-changelog: skip news
|
||||||
|
|
||||||
|
...
|
|
@ -9,3 +9,9 @@ updates:
|
||||||
allow:
|
allow:
|
||||||
- dependency-type: direct
|
- dependency-type: direct
|
||||||
- dependency-type: indirect
|
- dependency-type: indirect
|
||||||
|
- package-ecosystem: github-actions
|
||||||
|
directory: /
|
||||||
|
schedule:
|
||||||
|
interval: weekly
|
||||||
|
time: "03:00"
|
||||||
|
open-pull-requests-limit: 10
|
||||||
|
|
|
@ -0,0 +1,7 @@
|
||||||
|
---
|
||||||
|
|
||||||
|
backport_branch_prefix: patchback/backports/
|
||||||
|
backport_label_prefix: 'backport ' # IMPORTANT: the labels are space-delimited
|
||||||
|
# target_branch_prefix: '' # The project's backport branches are non-prefixed
|
||||||
|
|
||||||
|
...
|
|
@ -1,51 +0,0 @@
|
||||||
name: backport
|
|
||||||
|
|
||||||
on:
|
|
||||||
# Note that `pull_request_target` has security implications:
|
|
||||||
# https://securitylab.github.com/research/github-actions-preventing-pwn-requests/
|
|
||||||
# In particular:
|
|
||||||
# - Only allow triggers that can be used only be trusted users
|
|
||||||
# - Don't execute any code from the target branch
|
|
||||||
# - Don't use cache
|
|
||||||
pull_request_target:
|
|
||||||
types: [labeled]
|
|
||||||
|
|
||||||
# Set permissions at the job level.
|
|
||||||
permissions: {}
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
backport:
|
|
||||||
if: startsWith(github.event.label.name, 'backport ') && github.event.pull_request.merged
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
permissions:
|
|
||||||
contents: write
|
|
||||||
pull-requests: write
|
|
||||||
|
|
||||||
steps:
|
|
||||||
- uses: actions/checkout@v2
|
|
||||||
with:
|
|
||||||
fetch-depth: 0
|
|
||||||
persist-credentials: true
|
|
||||||
|
|
||||||
- name: Create backport PR
|
|
||||||
run: |
|
|
||||||
set -eux
|
|
||||||
|
|
||||||
git config --global user.name "pytest bot"
|
|
||||||
git config --global user.email "pytestbot@gmail.com"
|
|
||||||
|
|
||||||
label='${{ github.event.label.name }}'
|
|
||||||
target_branch="${label#backport }"
|
|
||||||
backport_branch=backport-${{ github.event.number }}-to-"${target_branch}"
|
|
||||||
subject="[$target_branch] $(gh pr view --json title -q .title ${{ github.event.number }})"
|
|
||||||
|
|
||||||
git checkout origin/"${target_branch}" -b "${backport_branch}"
|
|
||||||
git cherry-pick -x --mainline 1 ${{ github.event.pull_request.merge_commit_sha }}
|
|
||||||
git commit --amend --message "$subject"
|
|
||||||
git push --set-upstream origin --force-with-lease "${backport_branch}"
|
|
||||||
gh pr create \
|
|
||||||
--base "${target_branch}" \
|
|
||||||
--title "${subject}" \
|
|
||||||
--body "Backport of PR #${{ github.event.number }} to $target_branch branch. PR created by backport workflow."
|
|
||||||
env:
|
|
||||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
|
|
@ -1,56 +1,108 @@
|
||||||
name: deploy
|
name: deploy
|
||||||
|
|
||||||
on:
|
on:
|
||||||
push:
|
workflow_dispatch:
|
||||||
tags:
|
inputs:
|
||||||
# These tags are protected, see:
|
version:
|
||||||
# https://github.com/pytest-dev/pytest/settings/tag_protection
|
description: 'Release version'
|
||||||
- "[0-9]+.[0-9]+.[0-9]+"
|
required: true
|
||||||
- "[0-9]+.[0-9]+.[0-9]+rc[0-9]+"
|
default: '1.2.3'
|
||||||
|
|
||||||
|
|
||||||
# Set permissions at the job level.
|
# Set permissions at the job level.
|
||||||
permissions: {}
|
permissions: {}
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
|
package:
|
||||||
deploy:
|
|
||||||
if: github.repository == 'pytest-dev/pytest'
|
|
||||||
|
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
timeout-minutes: 30
|
env:
|
||||||
|
SETUPTOOLS_SCM_PRETEND_VERSION: ${{ github.event.inputs.version }}
|
||||||
|
timeout-minutes: 10
|
||||||
|
|
||||||
|
# Required by attest-build-provenance-github.
|
||||||
permissions:
|
permissions:
|
||||||
contents: write
|
id-token: write
|
||||||
|
attestations: write
|
||||||
|
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v2
|
- uses: actions/checkout@v4
|
||||||
with:
|
with:
|
||||||
fetch-depth: 0
|
fetch-depth: 0
|
||||||
persist-credentials: false
|
persist-credentials: false
|
||||||
|
|
||||||
- name: Set up Python
|
- name: Build and Check Package
|
||||||
uses: actions/setup-python@v2
|
uses: hynek/build-and-inspect-python-package@v2.6.0
|
||||||
with:
|
with:
|
||||||
python-version: "3.7"
|
attest-build-provenance-github: 'true'
|
||||||
|
|
||||||
- name: Install dependencies
|
deploy:
|
||||||
run: |
|
if: github.repository == 'pytest-dev/pytest'
|
||||||
python -m pip install --upgrade pip
|
needs: [package]
|
||||||
pip install --upgrade build tox
|
runs-on: ubuntu-latest
|
||||||
|
environment: deploy
|
||||||
|
timeout-minutes: 30
|
||||||
|
permissions:
|
||||||
|
id-token: write
|
||||||
|
contents: write
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v4
|
||||||
|
|
||||||
- name: Build package
|
- name: Download Package
|
||||||
run: |
|
uses: actions/download-artifact@v4
|
||||||
python -m build
|
with:
|
||||||
|
name: Packages
|
||||||
|
path: dist
|
||||||
|
|
||||||
- name: Publish package to PyPI
|
- name: Publish package to PyPI
|
||||||
uses: pypa/gh-action-pypi-publish@master
|
uses: pypa/gh-action-pypi-publish@v1.9.0
|
||||||
with:
|
|
||||||
user: __token__
|
|
||||||
password: ${{ secrets.pypi_token }}
|
|
||||||
|
|
||||||
- name: Publish GitHub release notes
|
- name: Push tag
|
||||||
env:
|
run: |
|
||||||
GH_RELEASE_NOTES_TOKEN: ${{ github.token }}
|
git config user.name "pytest bot"
|
||||||
|
git config user.email "pytestbot@gmail.com"
|
||||||
|
git tag --annotate --message=v${{ github.event.inputs.version }} ${{ github.event.inputs.version }} ${{ github.sha }}
|
||||||
|
git push origin ${{ github.event.inputs.version }}
|
||||||
|
|
||||||
|
release-notes:
|
||||||
|
|
||||||
|
# todo: generate the content in the build job
|
||||||
|
# the goal being of using a github action script to push the release data
|
||||||
|
# after success instead of creating a complete python/tox env
|
||||||
|
needs: [deploy]
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
timeout-minutes: 30
|
||||||
|
permissions:
|
||||||
|
contents: write
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v4
|
||||||
|
with:
|
||||||
|
fetch-depth: 0
|
||||||
|
persist-credentials: false
|
||||||
|
|
||||||
|
- name: Download Package
|
||||||
|
uses: actions/download-artifact@v4
|
||||||
|
with:
|
||||||
|
name: Packages
|
||||||
|
path: dist
|
||||||
|
|
||||||
|
- name: Set up Python
|
||||||
|
uses: actions/setup-python@v5
|
||||||
|
with:
|
||||||
|
python-version: "3.11"
|
||||||
|
|
||||||
|
- name: Install tox
|
||||||
|
run: |
|
||||||
|
python -m pip install --upgrade pip
|
||||||
|
pip install --upgrade tox
|
||||||
|
|
||||||
|
- name: Generate release notes
|
||||||
run: |
|
run: |
|
||||||
sudo apt-get install pandoc
|
sudo apt-get install pandoc
|
||||||
tox -e publish-gh-release-notes
|
tox -e generate-gh-release-notes -- ${{ github.event.inputs.version }} scripts/latest-release-notes.md
|
||||||
|
|
||||||
|
- name: Publish GitHub Release
|
||||||
|
uses: softprops/action-gh-release@v2
|
||||||
|
with:
|
||||||
|
body_path: scripts/latest-release-notes.md
|
||||||
|
files: dist/*
|
||||||
|
tag_name: ${{ github.event.inputs.version }}
|
||||||
|
|
|
@ -27,12 +27,12 @@ jobs:
|
||||||
pull-requests: write
|
pull-requests: write
|
||||||
|
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v2
|
- uses: actions/checkout@v4
|
||||||
with:
|
with:
|
||||||
fetch-depth: 0
|
fetch-depth: 0
|
||||||
|
|
||||||
- name: Set up Python
|
- name: Set up Python
|
||||||
uses: actions/setup-python@v2
|
uses: actions/setup-python@v5
|
||||||
with:
|
with:
|
||||||
python-version: "3.8"
|
python-version: "3.8"
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,23 @@
|
||||||
|
name: close needs-information issues
|
||||||
|
on:
|
||||||
|
schedule:
|
||||||
|
- cron: "30 1 * * *"
|
||||||
|
workflow_dispatch:
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
close-issues:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
permissions:
|
||||||
|
issues: write
|
||||||
|
steps:
|
||||||
|
- uses: actions/stale@v9
|
||||||
|
with:
|
||||||
|
debug-only: false
|
||||||
|
days-before-issue-stale: 14
|
||||||
|
days-before-issue-close: 7
|
||||||
|
only-labels: "status: needs information"
|
||||||
|
stale-issue-label: "stale"
|
||||||
|
stale-issue-message: "This issue is stale because it has the `status: needs information` label and requested follow-up information was not provided for 14 days."
|
||||||
|
close-issue-message: "This issue was closed because it has the `status: needs information` label and follow-up information has not been provided for 7 days since being marked as stale."
|
||||||
|
days-before-pr-stale: -1
|
||||||
|
days-before-pr-close: -1
|
|
@ -18,11 +18,28 @@ on:
|
||||||
env:
|
env:
|
||||||
PYTEST_ADDOPTS: "--color=yes"
|
PYTEST_ADDOPTS: "--color=yes"
|
||||||
|
|
||||||
|
# Cancel running jobs for the same workflow and branch.
|
||||||
|
concurrency:
|
||||||
|
group: ${{ github.workflow }}-${{ github.ref }}
|
||||||
|
cancel-in-progress: true
|
||||||
|
|
||||||
# Set permissions at the job level.
|
# Set permissions at the job level.
|
||||||
permissions: {}
|
permissions: {}
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
|
package:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v4
|
||||||
|
with:
|
||||||
|
fetch-depth: 0
|
||||||
|
persist-credentials: false
|
||||||
|
- name: Build and Check Package
|
||||||
|
uses: hynek/build-and-inspect-python-package@v2.6.0
|
||||||
|
|
||||||
build:
|
build:
|
||||||
|
needs: [package]
|
||||||
|
|
||||||
runs-on: ${{ matrix.os }}
|
runs-on: ${{ matrix.os }}
|
||||||
timeout-minutes: 45
|
timeout-minutes: 45
|
||||||
permissions:
|
permissions:
|
||||||
|
@ -32,46 +49,44 @@ jobs:
|
||||||
fail-fast: false
|
fail-fast: false
|
||||||
matrix:
|
matrix:
|
||||||
name: [
|
name: [
|
||||||
"windows-py37",
|
|
||||||
"windows-py37-pluggy",
|
|
||||||
"windows-py38",
|
"windows-py38",
|
||||||
|
"windows-py38-pluggy",
|
||||||
"windows-py39",
|
"windows-py39",
|
||||||
"windows-py310",
|
"windows-py310",
|
||||||
"windows-py311",
|
"windows-py311",
|
||||||
|
"windows-py312",
|
||||||
|
"windows-py313",
|
||||||
|
|
||||||
"ubuntu-py37",
|
|
||||||
"ubuntu-py37-pluggy",
|
|
||||||
"ubuntu-py37-freeze",
|
|
||||||
"ubuntu-py38",
|
"ubuntu-py38",
|
||||||
|
"ubuntu-py38-pluggy",
|
||||||
|
"ubuntu-py38-freeze",
|
||||||
"ubuntu-py39",
|
"ubuntu-py39",
|
||||||
"ubuntu-py310",
|
"ubuntu-py310",
|
||||||
"ubuntu-py311",
|
"ubuntu-py311",
|
||||||
|
"ubuntu-py312",
|
||||||
|
"ubuntu-py313",
|
||||||
"ubuntu-pypy3",
|
"ubuntu-pypy3",
|
||||||
|
|
||||||
"macos-py37",
|
|
||||||
"macos-py38",
|
"macos-py38",
|
||||||
"macos-py39",
|
"macos-py39",
|
||||||
"macos-py310",
|
"macos-py310",
|
||||||
|
"macos-py312",
|
||||||
|
"macos-py313",
|
||||||
|
|
||||||
"docs",
|
|
||||||
"doctesting",
|
"doctesting",
|
||||||
"plugins",
|
"plugins",
|
||||||
]
|
]
|
||||||
|
|
||||||
include:
|
include:
|
||||||
- name: "windows-py37"
|
|
||||||
python: "3.7"
|
|
||||||
os: windows-latest
|
|
||||||
tox_env: "py37-numpy"
|
|
||||||
- name: "windows-py37-pluggy"
|
|
||||||
python: "3.7"
|
|
||||||
os: windows-latest
|
|
||||||
tox_env: "py37-pluggymain-xdist"
|
|
||||||
- name: "windows-py38"
|
- name: "windows-py38"
|
||||||
python: "3.8"
|
python: "3.8"
|
||||||
os: windows-latest
|
os: windows-latest
|
||||||
tox_env: "py38-unittestextras"
|
tox_env: "py38-unittestextras"
|
||||||
use_coverage: true
|
use_coverage: true
|
||||||
|
- name: "windows-py38-pluggy"
|
||||||
|
python: "3.8"
|
||||||
|
os: windows-latest
|
||||||
|
tox_env: "py38-pluggymain-pylib-xdist"
|
||||||
- name: "windows-py39"
|
- name: "windows-py39"
|
||||||
python: "3.9"
|
python: "3.9"
|
||||||
os: windows-latest
|
os: windows-latest
|
||||||
|
@ -81,27 +96,31 @@ jobs:
|
||||||
os: windows-latest
|
os: windows-latest
|
||||||
tox_env: "py310-xdist"
|
tox_env: "py310-xdist"
|
||||||
- name: "windows-py311"
|
- name: "windows-py311"
|
||||||
python: "3.11-dev"
|
python: "3.11"
|
||||||
os: windows-latest
|
os: windows-latest
|
||||||
tox_env: "py311"
|
tox_env: "py311"
|
||||||
|
- name: "windows-py312"
|
||||||
|
python: "3.12"
|
||||||
|
os: windows-latest
|
||||||
|
tox_env: "py312"
|
||||||
|
- name: "windows-py313"
|
||||||
|
python: "3.13-dev"
|
||||||
|
os: windows-latest
|
||||||
|
tox_env: "py313"
|
||||||
|
|
||||||
- name: "ubuntu-py37"
|
|
||||||
python: "3.7"
|
|
||||||
os: ubuntu-latest
|
|
||||||
tox_env: "py37-lsof-numpy-pexpect"
|
|
||||||
use_coverage: true
|
|
||||||
- name: "ubuntu-py37-pluggy"
|
|
||||||
python: "3.7"
|
|
||||||
os: ubuntu-latest
|
|
||||||
tox_env: "py37-pluggymain-xdist"
|
|
||||||
- name: "ubuntu-py37-freeze"
|
|
||||||
python: "3.7"
|
|
||||||
os: ubuntu-latest
|
|
||||||
tox_env: "py37-freeze"
|
|
||||||
- name: "ubuntu-py38"
|
- name: "ubuntu-py38"
|
||||||
python: "3.8"
|
python: "3.8"
|
||||||
os: ubuntu-latest
|
os: ubuntu-latest
|
||||||
tox_env: "py38-xdist"
|
tox_env: "py38-lsof-numpy-pexpect"
|
||||||
|
use_coverage: true
|
||||||
|
- name: "ubuntu-py38-pluggy"
|
||||||
|
python: "3.8"
|
||||||
|
os: ubuntu-latest
|
||||||
|
tox_env: "py38-pluggymain-pylib-xdist"
|
||||||
|
- name: "ubuntu-py38-freeze"
|
||||||
|
python: "3.8"
|
||||||
|
os: ubuntu-latest
|
||||||
|
tox_env: "py38-freeze"
|
||||||
- name: "ubuntu-py39"
|
- name: "ubuntu-py39"
|
||||||
python: "3.9"
|
python: "3.9"
|
||||||
os: ubuntu-latest
|
os: ubuntu-latest
|
||||||
|
@ -111,57 +130,95 @@ jobs:
|
||||||
os: ubuntu-latest
|
os: ubuntu-latest
|
||||||
tox_env: "py310-xdist"
|
tox_env: "py310-xdist"
|
||||||
- name: "ubuntu-py311"
|
- name: "ubuntu-py311"
|
||||||
python: "3.11-dev"
|
python: "3.11"
|
||||||
os: ubuntu-latest
|
os: ubuntu-latest
|
||||||
tox_env: "py311"
|
tox_env: "py311"
|
||||||
|
use_coverage: true
|
||||||
|
- name: "ubuntu-py312"
|
||||||
|
python: "3.12"
|
||||||
|
os: ubuntu-latest
|
||||||
|
tox_env: "py312"
|
||||||
|
use_coverage: true
|
||||||
|
- name: "ubuntu-py313"
|
||||||
|
python: "3.13-dev"
|
||||||
|
os: ubuntu-latest
|
||||||
|
tox_env: "py313"
|
||||||
|
use_coverage: true
|
||||||
- name: "ubuntu-pypy3"
|
- name: "ubuntu-pypy3"
|
||||||
python: "pypy-3.7"
|
python: "pypy-3.8"
|
||||||
os: ubuntu-latest
|
os: ubuntu-latest
|
||||||
tox_env: "pypy3-xdist"
|
tox_env: "pypy3-xdist"
|
||||||
|
|
||||||
- name: "macos-py37"
|
|
||||||
python: "3.7"
|
|
||||||
os: macos-latest
|
|
||||||
tox_env: "py37-xdist"
|
|
||||||
- name: "macos-py38"
|
- name: "macos-py38"
|
||||||
python: "3.8"
|
python: "3.8"
|
||||||
os: macos-latest
|
os: macos-latest
|
||||||
tox_env: "py38-xdist"
|
tox_env: "py38-xdist"
|
||||||
use_coverage: true
|
|
||||||
- name: "macos-py39"
|
- name: "macos-py39"
|
||||||
python: "3.9"
|
python: "3.9"
|
||||||
os: macos-latest
|
os: macos-latest
|
||||||
tox_env: "py39-xdist"
|
tox_env: "py39-xdist"
|
||||||
|
use_coverage: true
|
||||||
- name: "macos-py310"
|
- name: "macos-py310"
|
||||||
python: "3.10"
|
python: "3.10"
|
||||||
os: macos-latest
|
os: macos-latest
|
||||||
tox_env: "py310-xdist"
|
tox_env: "py310-xdist"
|
||||||
|
- name: "macos-py312"
|
||||||
|
python: "3.12"
|
||||||
|
os: macos-latest
|
||||||
|
tox_env: "py312-xdist"
|
||||||
|
- name: "macos-py313"
|
||||||
|
python: "3.13-dev"
|
||||||
|
os: macos-latest
|
||||||
|
tox_env: "py313-xdist"
|
||||||
|
|
||||||
- name: "plugins"
|
- name: "plugins"
|
||||||
python: "3.9"
|
python: "3.12"
|
||||||
os: ubuntu-latest
|
os: ubuntu-latest
|
||||||
tox_env: "plugins"
|
tox_env: "plugins"
|
||||||
|
|
||||||
- name: "docs"
|
|
||||||
python: "3.7"
|
|
||||||
os: ubuntu-latest
|
|
||||||
tox_env: "docs"
|
|
||||||
- name: "doctesting"
|
- name: "doctesting"
|
||||||
python: "3.7"
|
python: "3.8"
|
||||||
os: ubuntu-latest
|
os: ubuntu-latest
|
||||||
tox_env: "doctesting"
|
tox_env: "doctesting"
|
||||||
use_coverage: true
|
use_coverage: true
|
||||||
|
|
||||||
|
continue-on-error: >-
|
||||||
|
${{
|
||||||
|
contains(
|
||||||
|
fromJSON(
|
||||||
|
'[
|
||||||
|
"windows-py38-pluggy",
|
||||||
|
"windows-py313",
|
||||||
|
"ubuntu-py38-pluggy",
|
||||||
|
"ubuntu-py38-freeze",
|
||||||
|
"ubuntu-py313",
|
||||||
|
"macos-py38",
|
||||||
|
"macos-py313"
|
||||||
|
]'
|
||||||
|
),
|
||||||
|
matrix.name
|
||||||
|
)
|
||||||
|
&& true
|
||||||
|
|| false
|
||||||
|
}}
|
||||||
|
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v2
|
- uses: actions/checkout@v4
|
||||||
with:
|
with:
|
||||||
fetch-depth: 0
|
fetch-depth: 0
|
||||||
persist-credentials: false
|
persist-credentials: false
|
||||||
|
|
||||||
|
- name: Download Package
|
||||||
|
uses: actions/download-artifact@v4
|
||||||
|
with:
|
||||||
|
name: Packages
|
||||||
|
path: dist
|
||||||
|
|
||||||
- name: Set up Python ${{ matrix.python }}
|
- name: Set up Python ${{ matrix.python }}
|
||||||
uses: actions/setup-python@v2
|
uses: actions/setup-python@v5
|
||||||
with:
|
with:
|
||||||
python-version: ${{ matrix.python }}
|
python-version: ${{ matrix.python }}
|
||||||
|
check-latest: ${{ endsWith(matrix.python, '-dev') }}
|
||||||
|
|
||||||
- name: Install dependencies
|
- name: Install dependencies
|
||||||
run: |
|
run: |
|
||||||
|
@ -170,11 +227,13 @@ jobs:
|
||||||
|
|
||||||
- name: Test without coverage
|
- name: Test without coverage
|
||||||
if: "! matrix.use_coverage"
|
if: "! matrix.use_coverage"
|
||||||
run: "tox -e ${{ matrix.tox_env }}"
|
shell: bash
|
||||||
|
run: tox run -e ${{ matrix.tox_env }} --installpkg `find dist/*.tar.gz`
|
||||||
|
|
||||||
- name: Test with coverage
|
- name: Test with coverage
|
||||||
if: "matrix.use_coverage"
|
if: "matrix.use_coverage"
|
||||||
run: "tox -e ${{ matrix.tox_env }}-coverage"
|
shell: bash
|
||||||
|
run: tox run -e ${{ matrix.tox_env }}-coverage --installpkg `find dist/*.tar.gz`
|
||||||
|
|
||||||
- name: Generate coverage report
|
- name: Generate coverage report
|
||||||
if: "matrix.use_coverage"
|
if: "matrix.use_coverage"
|
||||||
|
@ -182,8 +241,23 @@ jobs:
|
||||||
|
|
||||||
- name: Upload coverage to Codecov
|
- name: Upload coverage to Codecov
|
||||||
if: "matrix.use_coverage"
|
if: "matrix.use_coverage"
|
||||||
uses: codecov/codecov-action@v2
|
uses: codecov/codecov-action@v4
|
||||||
|
continue-on-error: true
|
||||||
with:
|
with:
|
||||||
fail_ci_if_error: true
|
fail_ci_if_error: true
|
||||||
files: ./coverage.xml
|
files: ./coverage.xml
|
||||||
verbose: true
|
verbose: true
|
||||||
|
|
||||||
|
check: # This job does nothing and is only used for the branch protection
|
||||||
|
if: always()
|
||||||
|
|
||||||
|
needs:
|
||||||
|
- build
|
||||||
|
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- name: Decide whether the needed jobs succeeded or failed
|
||||||
|
uses: re-actors/alls-green@198badcb65a1a44528f27d5da555c4be9f12eac6
|
||||||
|
with:
|
||||||
|
jobs: ${{ toJSON(needs) }}
|
||||||
|
|
|
@ -11,7 +11,7 @@ on:
|
||||||
permissions: {}
|
permissions: {}
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
createPullRequest:
|
update-plugin-list:
|
||||||
if: github.repository_owner == 'pytest-dev'
|
if: github.repository_owner == 'pytest-dev'
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
permissions:
|
permissions:
|
||||||
|
@ -20,25 +20,33 @@ jobs:
|
||||||
|
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout
|
- name: Checkout
|
||||||
uses: actions/checkout@v2
|
uses: actions/checkout@v4
|
||||||
with:
|
with:
|
||||||
fetch-depth: 0
|
fetch-depth: 0
|
||||||
|
|
||||||
- name: Setup Python
|
- name: Setup Python
|
||||||
uses: actions/setup-python@v2
|
uses: actions/setup-python@v5
|
||||||
with:
|
with:
|
||||||
python-version: 3.8
|
python-version: "3.11"
|
||||||
|
cache: pip
|
||||||
|
- name: requests-cache
|
||||||
|
uses: actions/cache@v4
|
||||||
|
with:
|
||||||
|
path: ~/.cache/pytest-plugin-list/
|
||||||
|
key: plugins-http-cache-${{ github.run_id }} # Can use time based key as well
|
||||||
|
restore-keys: plugins-http-cache-
|
||||||
|
|
||||||
- name: Install dependencies
|
- name: Install dependencies
|
||||||
run: |
|
run: |
|
||||||
python -m pip install --upgrade pip
|
python -m pip install --upgrade pip
|
||||||
pip install packaging requests tabulate[widechars] tqdm
|
pip install packaging requests tabulate[widechars] tqdm requests-cache platformdirs
|
||||||
|
|
||||||
|
|
||||||
- name: Update Plugin List
|
- name: Update Plugin List
|
||||||
run: python scripts/update-plugin-list.py
|
run: python scripts/update-plugin-list.py
|
||||||
|
|
||||||
- name: Create Pull Request
|
- name: Create Pull Request
|
||||||
uses: peter-evans/create-pull-request@2455e1596942c2902952003bbb574afbbe2ab2e6
|
uses: peter-evans/create-pull-request@6d6857d36972b65feb161a90e484f2984215f83e
|
||||||
with:
|
with:
|
||||||
commit-message: '[automated] Update plugin list'
|
commit-message: '[automated] Update plugin list'
|
||||||
author: 'pytest bot <pytestbot@users.noreply.github.com>'
|
author: 'pytest bot <pytestbot@users.noreply.github.com>'
|
||||||
|
|
|
@ -25,7 +25,6 @@ src/_pytest/_version.py
|
||||||
|
|
||||||
doc/*/_build
|
doc/*/_build
|
||||||
doc/*/.doctrees
|
doc/*/.doctrees
|
||||||
doc/*/_changelog_towncrier_draft.rst
|
|
||||||
build/
|
build/
|
||||||
dist/
|
dist/
|
||||||
*.egg-info
|
*.egg-info
|
||||||
|
@ -50,6 +49,8 @@ coverage.xml
|
||||||
.project
|
.project
|
||||||
.settings
|
.settings
|
||||||
.vscode
|
.vscode
|
||||||
|
__pycache__/
|
||||||
|
.python-version
|
||||||
|
|
||||||
# generated by pip
|
# generated by pip
|
||||||
pip-wheel-metadata/
|
pip-wheel-metadata/
|
||||||
|
|
|
@ -1,75 +1,62 @@
|
||||||
repos:
|
repos:
|
||||||
- repo: https://github.com/psf/black
|
- repo: https://github.com/astral-sh/ruff-pre-commit
|
||||||
rev: 22.6.0
|
rev: "v0.4.9"
|
||||||
hooks:
|
hooks:
|
||||||
- id: black
|
- id: ruff
|
||||||
args: [--safe, --quiet]
|
args: ["--fix"]
|
||||||
- repo: https://github.com/asottile/blacken-docs
|
- id: ruff-format
|
||||||
rev: v1.12.1
|
|
||||||
hooks:
|
|
||||||
- id: blacken-docs
|
|
||||||
additional_dependencies: [black==20.8b1]
|
|
||||||
- repo: https://github.com/pre-commit/pre-commit-hooks
|
- repo: https://github.com/pre-commit/pre-commit-hooks
|
||||||
rev: v4.3.0
|
rev: v4.6.0
|
||||||
hooks:
|
hooks:
|
||||||
- id: trailing-whitespace
|
- id: trailing-whitespace
|
||||||
- id: end-of-file-fixer
|
- id: end-of-file-fixer
|
||||||
- id: fix-encoding-pragma
|
|
||||||
args: [--remove]
|
|
||||||
- id: check-yaml
|
- id: check-yaml
|
||||||
- id: debug-statements
|
- repo: https://github.com/adamchainz/blacken-docs
|
||||||
exclude: _pytest/(debugging|hookspec).py
|
rev: 1.16.0
|
||||||
language_version: python3
|
|
||||||
- repo: https://github.com/myint/autoflake
|
|
||||||
rev: v1.4
|
|
||||||
hooks:
|
hooks:
|
||||||
- id: autoflake
|
- id: blacken-docs
|
||||||
name: autoflake
|
additional_dependencies: [black==24.1.1]
|
||||||
args: ["--in-place", "--remove-unused-variables", "--remove-all-unused-imports"]
|
|
||||||
language: python
|
|
||||||
files: \.py$
|
|
||||||
- repo: https://github.com/PyCQA/flake8
|
|
||||||
rev: 4.0.1
|
|
||||||
hooks:
|
|
||||||
- id: flake8
|
|
||||||
language_version: python3
|
|
||||||
additional_dependencies:
|
|
||||||
- flake8-typing-imports==1.12.0
|
|
||||||
- flake8-docstrings==1.5.0
|
|
||||||
- repo: https://github.com/asottile/reorder_python_imports
|
|
||||||
rev: v3.8.2
|
|
||||||
hooks:
|
|
||||||
- id: reorder-python-imports
|
|
||||||
args: ['--application-directories=.:src', --py37-plus]
|
|
||||||
- repo: https://github.com/asottile/pyupgrade
|
|
||||||
rev: v2.37.2
|
|
||||||
hooks:
|
|
||||||
- id: pyupgrade
|
|
||||||
args: [--py37-plus]
|
|
||||||
- repo: https://github.com/asottile/setup-cfg-fmt
|
|
||||||
rev: v1.20.2
|
|
||||||
hooks:
|
|
||||||
- id: setup-cfg-fmt
|
|
||||||
args: [--max-py-version=3.10]
|
|
||||||
- repo: https://github.com/pre-commit/pygrep-hooks
|
- repo: https://github.com/pre-commit/pygrep-hooks
|
||||||
rev: v1.9.0
|
rev: v1.10.0
|
||||||
hooks:
|
hooks:
|
||||||
- id: python-use-type-annotations
|
- id: python-use-type-annotations
|
||||||
- repo: https://github.com/pre-commit/mirrors-mypy
|
- repo: https://github.com/pre-commit/mirrors-mypy
|
||||||
rev: v0.971
|
rev: v1.10.0
|
||||||
hooks:
|
hooks:
|
||||||
- id: mypy
|
- id: mypy
|
||||||
files: ^(src/|testing/)
|
files: ^(src/|testing/|scripts/)
|
||||||
args: []
|
args: []
|
||||||
additional_dependencies:
|
additional_dependencies:
|
||||||
- iniconfig>=1.1.0
|
- iniconfig>=1.1.0
|
||||||
- py>=1.8.2
|
|
||||||
- attrs>=19.2.0
|
- attrs>=19.2.0
|
||||||
|
- pluggy>=1.5.0
|
||||||
- packaging
|
- packaging
|
||||||
- tomli
|
- tomli
|
||||||
- types-pkg_resources
|
- types-pkg_resources
|
||||||
|
- types-tabulate
|
||||||
|
# for mypy running on python>=3.11 since exceptiongroup is only a dependency
|
||||||
|
# on <3.11
|
||||||
|
- exceptiongroup>=1.0.0rc8
|
||||||
|
- repo: https://github.com/tox-dev/pyproject-fmt
|
||||||
|
rev: "2.1.3"
|
||||||
|
hooks:
|
||||||
|
- id: pyproject-fmt
|
||||||
|
# https://pyproject-fmt.readthedocs.io/en/latest/#calculating-max-supported-python-version
|
||||||
|
additional_dependencies: ["tox>=4.9"]
|
||||||
|
- repo: https://github.com/asottile/pyupgrade
|
||||||
|
rev: v3.16.0
|
||||||
|
hooks:
|
||||||
|
- id: pyupgrade
|
||||||
|
stages: [manual]
|
||||||
- repo: local
|
- repo: local
|
||||||
hooks:
|
hooks:
|
||||||
|
- id: pylint
|
||||||
|
name: pylint
|
||||||
|
entry: pylint
|
||||||
|
language: system
|
||||||
|
types: [python]
|
||||||
|
args: ["-rn", "-sn", "--fail-on=I"]
|
||||||
|
stages: [manual]
|
||||||
- id: rst
|
- id: rst
|
||||||
name: rst
|
name: rst
|
||||||
entry: rst-lint --encoding utf-8
|
entry: rst-lint --encoding utf-8
|
||||||
|
|
|
@ -0,0 +1,31 @@
|
||||||
|
version: 2
|
||||||
|
|
||||||
|
python:
|
||||||
|
install:
|
||||||
|
# Install pytest first, then doc/en/requirements.txt.
|
||||||
|
# This order is important to honor any pins in doc/en/requirements.txt
|
||||||
|
# when the pinned library is also a dependency of pytest.
|
||||||
|
- method: pip
|
||||||
|
path: .
|
||||||
|
- requirements: doc/en/requirements.txt
|
||||||
|
|
||||||
|
sphinx:
|
||||||
|
configuration: doc/en/conf.py
|
||||||
|
fail_on_warning: true
|
||||||
|
|
||||||
|
build:
|
||||||
|
os: ubuntu-24.04
|
||||||
|
tools:
|
||||||
|
python: >-
|
||||||
|
3.12
|
||||||
|
apt_packages:
|
||||||
|
- inkscape
|
||||||
|
jobs:
|
||||||
|
post_checkout:
|
||||||
|
- git fetch --unshallow || true
|
||||||
|
- git fetch --tags || true
|
||||||
|
|
||||||
|
formats:
|
||||||
|
- epub
|
||||||
|
- pdf
|
||||||
|
- htmlzip
|
|
@ -1,19 +0,0 @@
|
||||||
version: 2
|
|
||||||
|
|
||||||
python:
|
|
||||||
install:
|
|
||||||
- requirements: doc/en/requirements.txt
|
|
||||||
- method: pip
|
|
||||||
path: .
|
|
||||||
|
|
||||||
build:
|
|
||||||
os: ubuntu-20.04
|
|
||||||
tools:
|
|
||||||
python: "3.9"
|
|
||||||
apt_packages:
|
|
||||||
- inkscape
|
|
||||||
|
|
||||||
formats:
|
|
||||||
- epub
|
|
||||||
- pdf
|
|
||||||
- htmlzip
|
|
89
AUTHORS
89
AUTHORS
|
@ -8,10 +8,15 @@ Abdeali JK
|
||||||
Abdelrahman Elbehery
|
Abdelrahman Elbehery
|
||||||
Abhijeet Kasurde
|
Abhijeet Kasurde
|
||||||
Adam Johnson
|
Adam Johnson
|
||||||
|
Adam Stewart
|
||||||
Adam Uhlir
|
Adam Uhlir
|
||||||
Ahn Ki-Wook
|
Ahn Ki-Wook
|
||||||
|
Akhilesh Ramakrishnan
|
||||||
Akiomi Kamakura
|
Akiomi Kamakura
|
||||||
Alan Velasco
|
Alan Velasco
|
||||||
|
Alessio Izzo
|
||||||
|
Alex Jones
|
||||||
|
Alex Lambson
|
||||||
Alexander Johnson
|
Alexander Johnson
|
||||||
Alexander King
|
Alexander King
|
||||||
Alexei Kozlenok
|
Alexei Kozlenok
|
||||||
|
@ -31,6 +36,7 @@ Andrey Paramonov
|
||||||
Andrzej Klajnert
|
Andrzej Klajnert
|
||||||
Andrzej Ostrowski
|
Andrzej Ostrowski
|
||||||
Andy Freeland
|
Andy Freeland
|
||||||
|
Anita Hammer
|
||||||
Anthon van der Neut
|
Anthon van der Neut
|
||||||
Anthony Shaw
|
Anthony Shaw
|
||||||
Anthony Sottile
|
Anthony Sottile
|
||||||
|
@ -43,20 +49,28 @@ Ariel Pillemer
|
||||||
Armin Rigo
|
Armin Rigo
|
||||||
Aron Coyle
|
Aron Coyle
|
||||||
Aron Curzon
|
Aron Curzon
|
||||||
|
Arthur Richard
|
||||||
|
Ashish Kurmi
|
||||||
Aviral Verma
|
Aviral Verma
|
||||||
Aviv Palivoda
|
Aviv Palivoda
|
||||||
Babak Keyvani
|
Babak Keyvani
|
||||||
Barney Gale
|
Barney Gale
|
||||||
|
Ben Brown
|
||||||
Ben Gartner
|
Ben Gartner
|
||||||
|
Ben Leith
|
||||||
Ben Webb
|
Ben Webb
|
||||||
Benjamin Peterson
|
Benjamin Peterson
|
||||||
|
Benjamin Schubert
|
||||||
Bernard Pratz
|
Bernard Pratz
|
||||||
|
Bo Wu
|
||||||
Bob Ippolito
|
Bob Ippolito
|
||||||
Brian Dorsey
|
Brian Dorsey
|
||||||
|
Brian Larsen
|
||||||
Brian Maissy
|
Brian Maissy
|
||||||
Brian Okken
|
Brian Okken
|
||||||
Brianna Laugher
|
Brianna Laugher
|
||||||
Bruno Oliveira
|
Bruno Oliveira
|
||||||
|
Cal Jacobson
|
||||||
Cal Leeming
|
Cal Leeming
|
||||||
Carl Friedrich Bolz
|
Carl Friedrich Bolz
|
||||||
Carlos Jenkins
|
Carlos Jenkins
|
||||||
|
@ -65,6 +79,7 @@ Charles Cloud
|
||||||
Charles Machalow
|
Charles Machalow
|
||||||
Charnjit SiNGH (CCSJ)
|
Charnjit SiNGH (CCSJ)
|
||||||
Cheuk Ting Ho
|
Cheuk Ting Ho
|
||||||
|
Chris Mahoney
|
||||||
Chris Lamb
|
Chris Lamb
|
||||||
Chris NeJame
|
Chris NeJame
|
||||||
Chris Rose
|
Chris Rose
|
||||||
|
@ -80,14 +95,17 @@ Christopher Dignam
|
||||||
Christopher Gilling
|
Christopher Gilling
|
||||||
Claire Cecil
|
Claire Cecil
|
||||||
Claudio Madotto
|
Claudio Madotto
|
||||||
|
Clément M.T. Robert
|
||||||
CrazyMerlyn
|
CrazyMerlyn
|
||||||
Cristian Vera
|
Cristian Vera
|
||||||
Cyrus Maden
|
Cyrus Maden
|
||||||
Damian Skrzypczak
|
Damian Skrzypczak
|
||||||
Daniel Grana
|
Daniel Grana
|
||||||
Daniel Hahler
|
Daniel Hahler
|
||||||
|
Daniel Miller
|
||||||
Daniel Nuri
|
Daniel Nuri
|
||||||
Daniel Sánchez Castelló
|
Daniel Sánchez Castelló
|
||||||
|
Daniel Valenzuela Zenteno
|
||||||
Daniel Wandschneider
|
Daniel Wandschneider
|
||||||
Daniele Procida
|
Daniele Procida
|
||||||
Danielle Jenkins
|
Danielle Jenkins
|
||||||
|
@ -102,6 +120,7 @@ Daw-Ran Liou
|
||||||
Debi Mishra
|
Debi Mishra
|
||||||
Denis Kirisov
|
Denis Kirisov
|
||||||
Denivy Braiam Rück
|
Denivy Braiam Rück
|
||||||
|
Dheeraj C K
|
||||||
Dhiren Serai
|
Dhiren Serai
|
||||||
Diego Russo
|
Diego Russo
|
||||||
Dmitry Dygalo
|
Dmitry Dygalo
|
||||||
|
@ -112,6 +131,8 @@ Edison Gustavo Muenz
|
||||||
Edoardo Batini
|
Edoardo Batini
|
||||||
Edson Tadeu M. Manoel
|
Edson Tadeu M. Manoel
|
||||||
Eduardo Schettino
|
Eduardo Schettino
|
||||||
|
Edward Haigh
|
||||||
|
Eero Vaher
|
||||||
Eli Boyarski
|
Eli Boyarski
|
||||||
Elizaveta Shashkova
|
Elizaveta Shashkova
|
||||||
Éloi Rivard
|
Éloi Rivard
|
||||||
|
@ -119,16 +140,24 @@ Endre Galaczi
|
||||||
Eric Hunsberger
|
Eric Hunsberger
|
||||||
Eric Liu
|
Eric Liu
|
||||||
Eric Siegerman
|
Eric Siegerman
|
||||||
|
Eric Yuan
|
||||||
Erik Aronesty
|
Erik Aronesty
|
||||||
|
Erik Hasse
|
||||||
Erik M. Bray
|
Erik M. Bray
|
||||||
Evan Kepner
|
Evan Kepner
|
||||||
|
Evgeny Seliverstov
|
||||||
|
Fabian Sturm
|
||||||
Fabien Zarifian
|
Fabien Zarifian
|
||||||
Fabio Zadrozny
|
Fabio Zadrozny
|
||||||
|
faph
|
||||||
|
Felix Hofstätter
|
||||||
Felix Nieuwenhuizen
|
Felix Nieuwenhuizen
|
||||||
Feng Ma
|
Feng Ma
|
||||||
Florian Bruhin
|
Florian Bruhin
|
||||||
Florian Dahlitz
|
Florian Dahlitz
|
||||||
Floris Bruynooghe
|
Floris Bruynooghe
|
||||||
|
Fraser Stark
|
||||||
|
Gabriel Landau
|
||||||
Gabriel Reis
|
Gabriel Reis
|
||||||
Garvit Shubham
|
Garvit Shubham
|
||||||
Gene Wood
|
Gene Wood
|
||||||
|
@ -154,11 +183,16 @@ Ian Bicking
|
||||||
Ian Lesperance
|
Ian Lesperance
|
||||||
Ilya Konstantinov
|
Ilya Konstantinov
|
||||||
Ionuț Turturică
|
Ionuț Turturică
|
||||||
|
Isaac Virshup
|
||||||
|
Israel Fruchter
|
||||||
|
Itxaso Aizpurua
|
||||||
Iwan Briquemont
|
Iwan Briquemont
|
||||||
Jaap Broekhuizen
|
Jaap Broekhuizen
|
||||||
|
Jake VanderPlas
|
||||||
Jakob van Santen
|
Jakob van Santen
|
||||||
Jakub Mitoraj
|
Jakub Mitoraj
|
||||||
James Bourbeau
|
James Bourbeau
|
||||||
|
James Frost
|
||||||
Jan Balster
|
Jan Balster
|
||||||
Janne Vanhala
|
Janne Vanhala
|
||||||
Jason R. Coombs
|
Jason R. Coombs
|
||||||
|
@ -167,7 +201,9 @@ Javier Romero
|
||||||
Jeff Rackauckas
|
Jeff Rackauckas
|
||||||
Jeff Widman
|
Jeff Widman
|
||||||
Jenni Rinker
|
Jenni Rinker
|
||||||
|
Jens Tröger
|
||||||
John Eddie Ayson
|
John Eddie Ayson
|
||||||
|
John Litborn
|
||||||
John Towler
|
John Towler
|
||||||
Jon Parise
|
Jon Parise
|
||||||
Jon Sonesen
|
Jon Sonesen
|
||||||
|
@ -179,10 +215,11 @@ Joseph Hunkeler
|
||||||
Josh Karpel
|
Josh Karpel
|
||||||
Joshua Bronson
|
Joshua Bronson
|
||||||
Jurko Gospodnetić
|
Jurko Gospodnetić
|
||||||
Justyna Janczyszyn
|
|
||||||
Justice Ndou
|
Justice Ndou
|
||||||
|
Justyna Janczyszyn
|
||||||
Kale Kundert
|
Kale Kundert
|
||||||
Kamran Ahmad
|
Kamran Ahmad
|
||||||
|
Kenny Y
|
||||||
Karl O. Pinc
|
Karl O. Pinc
|
||||||
Karthikeyan Singaravelan
|
Karthikeyan Singaravelan
|
||||||
Katarzyna Jachim
|
Katarzyna Jachim
|
||||||
|
@ -203,6 +240,7 @@ Kyle Altendorf
|
||||||
Lawrence Mitchell
|
Lawrence Mitchell
|
||||||
Lee Kamentsky
|
Lee Kamentsky
|
||||||
Lev Maximov
|
Lev Maximov
|
||||||
|
Levon Saldamli
|
||||||
Lewis Cowles
|
Lewis Cowles
|
||||||
Llandy Riveron Del Risco
|
Llandy Riveron Del Risco
|
||||||
Loic Esteve
|
Loic Esteve
|
||||||
|
@ -213,12 +251,16 @@ Maho
|
||||||
Maik Figura
|
Maik Figura
|
||||||
Mandeep Bhutani
|
Mandeep Bhutani
|
||||||
Manuel Krebber
|
Manuel Krebber
|
||||||
|
Marc Mueller
|
||||||
Marc Schlaich
|
Marc Schlaich
|
||||||
Marcelo Duarte Trevisani
|
Marcelo Duarte Trevisani
|
||||||
Marcin Bachry
|
Marcin Bachry
|
||||||
|
Marc Bresson
|
||||||
Marco Gorelli
|
Marco Gorelli
|
||||||
Mark Abramowitz
|
Mark Abramowitz
|
||||||
Mark Dickinson
|
Mark Dickinson
|
||||||
|
Mark Vong
|
||||||
|
Marko Pacak
|
||||||
Markus Unterwaditzer
|
Markus Unterwaditzer
|
||||||
Martijn Faassen
|
Martijn Faassen
|
||||||
Martin Altmayer
|
Martin Altmayer
|
||||||
|
@ -232,32 +274,40 @@ Matthias Hafner
|
||||||
Maxim Filipenko
|
Maxim Filipenko
|
||||||
Maximilian Cosmo Sitter
|
Maximilian Cosmo Sitter
|
||||||
mbyt
|
mbyt
|
||||||
Mickey Pashov
|
|
||||||
Michael Aquilina
|
Michael Aquilina
|
||||||
Michael Birtwell
|
Michael Birtwell
|
||||||
Michael Droettboom
|
Michael Droettboom
|
||||||
Michael Goerz
|
Michael Goerz
|
||||||
Michael Krebs
|
Michael Krebs
|
||||||
Michael Seifert
|
Michael Seifert
|
||||||
|
Michael Vogt
|
||||||
Michal Wajszczuk
|
Michal Wajszczuk
|
||||||
|
Michał Górny
|
||||||
Michał Zięba
|
Michał Zięba
|
||||||
|
Mickey Pashov
|
||||||
Mihai Capotă
|
Mihai Capotă
|
||||||
|
Mihail Milushev
|
||||||
Mike Hoyle (hoylemd)
|
Mike Hoyle (hoylemd)
|
||||||
Mike Lundy
|
Mike Lundy
|
||||||
|
Milan Lesnek
|
||||||
Miro Hrončok
|
Miro Hrončok
|
||||||
|
mrbean-bremen
|
||||||
|
Nathan Goldbaum
|
||||||
Nathaniel Compton
|
Nathaniel Compton
|
||||||
Nathaniel Waisbrot
|
Nathaniel Waisbrot
|
||||||
Ned Batchelder
|
Ned Batchelder
|
||||||
|
Neil Martin
|
||||||
Neven Mundar
|
Neven Mundar
|
||||||
Nicholas Devenish
|
Nicholas Devenish
|
||||||
Nicholas Murphy
|
Nicholas Murphy
|
||||||
Niclas Olofsson
|
Niclas Olofsson
|
||||||
Nicolas Delaby
|
Nicolas Delaby
|
||||||
|
Nico Vidal
|
||||||
Nikolay Kondratyev
|
Nikolay Kondratyev
|
||||||
Nipunn Koorapati
|
Nipunn Koorapati
|
||||||
Olga Matoula
|
|
||||||
Oleg Pidsadnyi
|
Oleg Pidsadnyi
|
||||||
Oleg Sushchenko
|
Oleg Sushchenko
|
||||||
|
Olga Matoula
|
||||||
Oliver Bestwalter
|
Oliver Bestwalter
|
||||||
Omar Kohl
|
Omar Kohl
|
||||||
Omer Hadari
|
Omer Hadari
|
||||||
|
@ -266,6 +316,7 @@ Oscar Benjamin
|
||||||
Parth Patel
|
Parth Patel
|
||||||
Patrick Hayes
|
Patrick Hayes
|
||||||
Patrick Kenny
|
Patrick Kenny
|
||||||
|
Patrick Lannigan
|
||||||
Paul Müller
|
Paul Müller
|
||||||
Paul Reece
|
Paul Reece
|
||||||
Pauli Virtanen
|
Pauli Virtanen
|
||||||
|
@ -274,24 +325,30 @@ Paweł Adamczak
|
||||||
Pedro Algarvio
|
Pedro Algarvio
|
||||||
Petter Strandmark
|
Petter Strandmark
|
||||||
Philipp Loose
|
Philipp Loose
|
||||||
|
Pierre Sassoulas
|
||||||
Pieter Mulder
|
Pieter Mulder
|
||||||
Piotr Banaszkiewicz
|
Piotr Banaszkiewicz
|
||||||
Piotr Helm
|
Piotr Helm
|
||||||
|
Poulami Sau
|
||||||
Prakhar Gurunani
|
Prakhar Gurunani
|
||||||
Prashant Anand
|
Prashant Anand
|
||||||
Prashant Sharma
|
Prashant Sharma
|
||||||
Pulkit Goyal
|
Pulkit Goyal
|
||||||
Punyashloka Biswal
|
Punyashloka Biswal
|
||||||
Quentin Pradet
|
Quentin Pradet
|
||||||
|
q0w
|
||||||
Ralf Schmitt
|
Ralf Schmitt
|
||||||
Ram Rachum
|
|
||||||
Ralph Giles
|
Ralph Giles
|
||||||
|
Ram Rachum
|
||||||
Ran Benita
|
Ran Benita
|
||||||
Raphael Castaneda
|
Raphael Castaneda
|
||||||
Raphael Pierzina
|
Raphael Pierzina
|
||||||
|
Rafal Semik
|
||||||
Raquel Alegre
|
Raquel Alegre
|
||||||
Ravi Chandra
|
Ravi Chandra
|
||||||
|
Reagan Lee
|
||||||
Robert Holt
|
Robert Holt
|
||||||
|
Roberto Aldera
|
||||||
Roberto Polli
|
Roberto Polli
|
||||||
Roland Puntaier
|
Roland Puntaier
|
||||||
Romain Dorgueil
|
Romain Dorgueil
|
||||||
|
@ -300,36 +357,49 @@ Ronny Pfannschmidt
|
||||||
Ross Lawley
|
Ross Lawley
|
||||||
Ruaridh Williamson
|
Ruaridh Williamson
|
||||||
Russel Winder
|
Russel Winder
|
||||||
|
Russell Martin
|
||||||
|
Ryan Puddephatt
|
||||||
Ryan Wooden
|
Ryan Wooden
|
||||||
|
Sadra Barikbin
|
||||||
Saiprasad Kale
|
Saiprasad Kale
|
||||||
Samuel Colvin
|
Samuel Colvin
|
||||||
Samuel Dion-Girardeau
|
Samuel Dion-Girardeau
|
||||||
|
Samuel Jirovec
|
||||||
Samuel Searles-Bryant
|
Samuel Searles-Bryant
|
||||||
|
Samuel Therrien (Avasam)
|
||||||
Samuele Pedroni
|
Samuele Pedroni
|
||||||
Sanket Duthade
|
Sanket Duthade
|
||||||
Sankt Petersbug
|
Sankt Petersbug
|
||||||
|
Saravanan Padmanaban
|
||||||
|
Sean Malloy
|
||||||
Segev Finer
|
Segev Finer
|
||||||
Serhii Mozghovyi
|
Serhii Mozghovyi
|
||||||
Seth Junot
|
Seth Junot
|
||||||
Shantanu Jain
|
Shantanu Jain
|
||||||
|
Sharad Nair
|
||||||
Shubham Adep
|
Shubham Adep
|
||||||
|
Simon Blanchard
|
||||||
Simon Gomizelj
|
Simon Gomizelj
|
||||||
Simon Holesch
|
Simon Holesch
|
||||||
Simon Kerr
|
Simon Kerr
|
||||||
Skylar Downes
|
Skylar Downes
|
||||||
Srinivas Reddy Thatiparthy
|
Srinivas Reddy Thatiparthy
|
||||||
|
Stefaan Lippens
|
||||||
Stefan Farmbauer
|
Stefan Farmbauer
|
||||||
Stefan Scherfke
|
Stefan Scherfke
|
||||||
Stefan Zimmermann
|
Stefan Zimmermann
|
||||||
|
Stefanie Molin
|
||||||
Stefano Taschini
|
Stefano Taschini
|
||||||
Steffen Allner
|
Steffen Allner
|
||||||
Stephan Obermann
|
Stephan Obermann
|
||||||
Sven-Hendrik Haase
|
Sven-Hendrik Haase
|
||||||
|
Sviatoslav Sydorenko
|
||||||
Sylvain Marié
|
Sylvain Marié
|
||||||
Tadek Teleżyński
|
Tadek Teleżyński
|
||||||
Takafumi Arakaki
|
Takafumi Arakaki
|
||||||
Taneli Hukkinen
|
Taneli Hukkinen
|
||||||
Tanvi Mehta
|
Tanvi Mehta
|
||||||
|
Tanya Agarwal
|
||||||
Tarcisio Fischer
|
Tarcisio Fischer
|
||||||
Tareq Alayan
|
Tareq Alayan
|
||||||
Tatiana Ovary
|
Tatiana Ovary
|
||||||
|
@ -339,6 +409,7 @@ Thomas Grainger
|
||||||
Thomas Hisch
|
Thomas Hisch
|
||||||
Tim Hoffmann
|
Tim Hoffmann
|
||||||
Tim Strazny
|
Tim Strazny
|
||||||
|
TJ Bruno
|
||||||
Tobias Diez
|
Tobias Diez
|
||||||
Tom Dalton
|
Tom Dalton
|
||||||
Tom Viner
|
Tom Viner
|
||||||
|
@ -347,18 +418,23 @@ Tomer Keren
|
||||||
Tony Narlock
|
Tony Narlock
|
||||||
Tor Colvin
|
Tor Colvin
|
||||||
Trevor Bekolay
|
Trevor Bekolay
|
||||||
|
Tushar Sadhwani
|
||||||
Tyler Goodlet
|
Tyler Goodlet
|
||||||
|
Tyler Smart
|
||||||
Tzu-ping Chung
|
Tzu-ping Chung
|
||||||
Vasily Kuznetsov
|
Vasily Kuznetsov
|
||||||
Victor Maryama
|
Victor Maryama
|
||||||
Victor Rodriguez
|
Victor Rodriguez
|
||||||
Victor Uriarte
|
Victor Uriarte
|
||||||
Vidar T. Fauske
|
Vidar T. Fauske
|
||||||
|
Vijay Arora
|
||||||
Virgil Dupras
|
Virgil Dupras
|
||||||
Vitaly Lashmanov
|
Vitaly Lashmanov
|
||||||
|
Vivaan Verma
|
||||||
Vlad Dragos
|
Vlad Dragos
|
||||||
Vlad Radziuk
|
Vlad Radziuk
|
||||||
Vladyslav Rachek
|
Vladyslav Rachek
|
||||||
|
Volodymyr Kochetkov
|
||||||
Volodymyr Piskun
|
Volodymyr Piskun
|
||||||
Wei Lin
|
Wei Lin
|
||||||
Wil Cooley
|
Wil Cooley
|
||||||
|
@ -368,7 +444,12 @@ Wouter van Ackooy
|
||||||
Xixi Zhao
|
Xixi Zhao
|
||||||
Xuan Luong
|
Xuan Luong
|
||||||
Xuecong Liao
|
Xuecong Liao
|
||||||
|
Yannick Péroux
|
||||||
|
Yao Xiao
|
||||||
Yoav Caspi
|
Yoav Caspi
|
||||||
|
Yuliang Shao
|
||||||
|
Yusuke Kadowaki
|
||||||
|
Yutian Li
|
||||||
Yuval Shimon
|
Yuval Shimon
|
||||||
Zac Hatfield-Dodds
|
Zac Hatfield-Dodds
|
||||||
Zachary Kneupper
|
Zachary Kneupper
|
||||||
|
|
|
@ -1,14 +1,10 @@
|
||||||
============================
|
============================
|
||||||
Contribution getting started
|
Contributing
|
||||||
============================
|
============================
|
||||||
|
|
||||||
Contributions are highly welcomed and appreciated. Every little bit of help counts,
|
Contributions are highly welcomed and appreciated. Every little bit of help counts,
|
||||||
so do not hesitate!
|
so do not hesitate!
|
||||||
|
|
||||||
.. contents::
|
|
||||||
:depth: 2
|
|
||||||
:backlinks: none
|
|
||||||
|
|
||||||
|
|
||||||
.. _submitfeedback:
|
.. _submitfeedback:
|
||||||
|
|
||||||
|
@ -50,7 +46,7 @@ Fix bugs
|
||||||
--------
|
--------
|
||||||
|
|
||||||
Look through the `GitHub issues for bugs <https://github.com/pytest-dev/pytest/labels/type:%20bug>`_.
|
Look through the `GitHub issues for bugs <https://github.com/pytest-dev/pytest/labels/type:%20bug>`_.
|
||||||
See also the `"status: easy" issues <https://github.com/pytest-dev/pytest/labels/status%3A%20easy>`_
|
See also the `"good first issue" issues <https://github.com/pytest-dev/pytest/labels/good%20first%20issue>`_
|
||||||
that are friendly to new contributors.
|
that are friendly to new contributors.
|
||||||
|
|
||||||
:ref:`Talk <contact>` to developers to find out how you can fix specific bugs. To indicate that you are going
|
:ref:`Talk <contact>` to developers to find out how you can fix specific bugs. To indicate that you are going
|
||||||
|
@ -128,7 +124,7 @@ For example:
|
||||||
Submitting Plugins to pytest-dev
|
Submitting Plugins to pytest-dev
|
||||||
--------------------------------
|
--------------------------------
|
||||||
|
|
||||||
Pytest development of the core, some plugins and support code happens
|
Development of the pytest core, support code, and some plugins happens
|
||||||
in repositories living under the ``pytest-dev`` organisations:
|
in repositories living under the ``pytest-dev`` organisations:
|
||||||
|
|
||||||
- `pytest-dev on GitHub <https://github.com/pytest-dev>`_
|
- `pytest-dev on GitHub <https://github.com/pytest-dev>`_
|
||||||
|
@ -197,11 +193,12 @@ Short version
|
||||||
~~~~~~~~~~~~~
|
~~~~~~~~~~~~~
|
||||||
|
|
||||||
#. Fork the repository.
|
#. Fork the repository.
|
||||||
|
#. Fetch tags from upstream if necessary (if you cloned only main `git fetch --tags https://github.com/pytest-dev/pytest`).
|
||||||
#. Enable and install `pre-commit <https://pre-commit.com>`_ to ensure style-guides and code checks are followed.
|
#. Enable and install `pre-commit <https://pre-commit.com>`_ to ensure style-guides and code checks are followed.
|
||||||
#. Follow **PEP-8** for naming and `black <https://github.com/psf/black>`_ for formatting.
|
#. Follow `PEP-8 <https://www.python.org/dev/peps/pep-0008/>`_ for naming.
|
||||||
#. Tests are run using ``tox``::
|
#. Tests are run using ``tox``::
|
||||||
|
|
||||||
tox -e linting,py37
|
tox -e linting,py39
|
||||||
|
|
||||||
The test environments above are usually enough to cover most cases locally.
|
The test environments above are usually enough to cover most cases locally.
|
||||||
|
|
||||||
|
@ -223,7 +220,7 @@ changes you want to review and merge. Pull requests are stored on
|
||||||
Once you send a pull request, we can discuss its potential modifications and
|
Once you send a pull request, we can discuss its potential modifications and
|
||||||
even add more commits to it later on. There's an excellent tutorial on how Pull
|
even add more commits to it later on. There's an excellent tutorial on how Pull
|
||||||
Requests work in the
|
Requests work in the
|
||||||
`GitHub Help Center <https://help.github.com/articles/using-pull-requests/>`_.
|
`GitHub Help Center <https://docs.github.com/en/pull-requests/collaborating-with-pull-requests/proposing-changes-to-your-work-with-pull-requests/about-pull-requests>`_.
|
||||||
|
|
||||||
Here is a simple overview, with pytest-specific bits:
|
Here is a simple overview, with pytest-specific bits:
|
||||||
|
|
||||||
|
@ -236,6 +233,7 @@ Here is a simple overview, with pytest-specific bits:
|
||||||
|
|
||||||
$ git clone git@github.com:YOUR_GITHUB_USERNAME/pytest.git
|
$ git clone git@github.com:YOUR_GITHUB_USERNAME/pytest.git
|
||||||
$ cd pytest
|
$ cd pytest
|
||||||
|
$ git fetch --tags https://github.com/pytest-dev/pytest
|
||||||
# now, create your own branch off "main":
|
# now, create your own branch off "main":
|
||||||
|
|
||||||
$ git checkout -b your-bugfix-branch-name main
|
$ git checkout -b your-bugfix-branch-name main
|
||||||
|
@ -244,6 +242,11 @@ Here is a simple overview, with pytest-specific bits:
|
||||||
be released in micro releases whereas features will be released in
|
be released in micro releases whereas features will be released in
|
||||||
minor releases and incompatible changes in major releases.
|
minor releases and incompatible changes in major releases.
|
||||||
|
|
||||||
|
You will need the tags to test locally, so be sure you have the tags from the main repository. If you suspect you don't, set the main repository as upstream and fetch the tags::
|
||||||
|
|
||||||
|
$ git remote add upstream https://github.com/pytest-dev/pytest
|
||||||
|
$ git fetch upstream --tags
|
||||||
|
|
||||||
If you need some help with Git, follow this quick start
|
If you need some help with Git, follow this quick start
|
||||||
guide: https://git.wiki.kernel.org/index.php/QuickStart
|
guide: https://git.wiki.kernel.org/index.php/QuickStart
|
||||||
|
|
||||||
|
@ -267,35 +270,35 @@ Here is a simple overview, with pytest-specific bits:
|
||||||
|
|
||||||
#. Run all the tests
|
#. Run all the tests
|
||||||
|
|
||||||
You need to have Python 3.7 available in your system. Now
|
You need to have Python 3.8 or later available in your system. Now
|
||||||
running tests is as simple as issuing this command::
|
running tests is as simple as issuing this command::
|
||||||
|
|
||||||
$ tox -e linting,py37
|
$ tox -e linting,py39
|
||||||
|
|
||||||
This command will run tests via the "tox" tool against Python 3.7
|
This command will run tests via the "tox" tool against Python 3.9
|
||||||
and also perform "lint" coding-style checks.
|
and also perform "lint" coding-style checks.
|
||||||
|
|
||||||
#. You can now edit your local working copy and run the tests again as necessary. Please follow PEP-8 for naming.
|
#. You can now edit your local working copy and run the tests again as necessary. Please follow `PEP-8 <https://www.python.org/dev/peps/pep-0008/>`_ for naming.
|
||||||
|
|
||||||
You can pass different options to ``tox``. For example, to run tests on Python 3.7 and pass options to pytest
|
You can pass different options to ``tox``. For example, to run tests on Python 3.9 and pass options to pytest
|
||||||
(e.g. enter pdb on failure) to pytest you can do::
|
(e.g. enter pdb on failure) to pytest you can do::
|
||||||
|
|
||||||
$ tox -e py37 -- --pdb
|
$ tox -e py39 -- --pdb
|
||||||
|
|
||||||
Or to only run tests in a particular test module on Python 3.7::
|
Or to only run tests in a particular test module on Python 3.9::
|
||||||
|
|
||||||
$ tox -e py37 -- testing/test_config.py
|
$ tox -e py39 -- testing/test_config.py
|
||||||
|
|
||||||
|
|
||||||
When committing, ``pre-commit`` will re-format the files if necessary.
|
When committing, ``pre-commit`` will re-format the files if necessary.
|
||||||
|
|
||||||
#. If instead of using ``tox`` you prefer to run the tests directly, then we suggest to create a virtual environment and use
|
#. If instead of using ``tox`` you prefer to run the tests directly, then we suggest to create a virtual environment and use
|
||||||
an editable install with the ``testing`` extra::
|
an editable install with the ``dev`` extra::
|
||||||
|
|
||||||
$ python3 -m venv .venv
|
$ python3 -m venv .venv
|
||||||
$ source .venv/bin/activate # Linux
|
$ source .venv/bin/activate # Linux
|
||||||
$ .venv/Scripts/activate.bat # Windows
|
$ .venv/Scripts/activate.bat # Windows
|
||||||
$ pip install -e ".[testing]"
|
$ pip install -e ".[dev]"
|
||||||
|
|
||||||
Afterwards, you can edit the files and run pytest normally::
|
Afterwards, you can edit the files and run pytest normally::
|
||||||
|
|
||||||
|
@ -380,7 +383,7 @@ them.
|
||||||
Backporting bug fixes for the next patch release
|
Backporting bug fixes for the next patch release
|
||||||
------------------------------------------------
|
------------------------------------------------
|
||||||
|
|
||||||
Pytest makes feature release every few weeks or months. In between, patch releases
|
Pytest makes a feature release every few weeks or months. In between, patch releases
|
||||||
are made to the previous feature release, containing bug fixes only. The bug fixes
|
are made to the previous feature release, containing bug fixes only. The bug fixes
|
||||||
usually fix regressions, but may be any change that should reach users before the
|
usually fix regressions, but may be any change that should reach users before the
|
||||||
next feature release.
|
next feature release.
|
||||||
|
@ -389,7 +392,7 @@ Suppose for example that the latest release was 1.2.3, and you want to include
|
||||||
a bug fix in 1.2.4 (check https://github.com/pytest-dev/pytest/releases for the
|
a bug fix in 1.2.4 (check https://github.com/pytest-dev/pytest/releases for the
|
||||||
actual latest release). The procedure for this is:
|
actual latest release). The procedure for this is:
|
||||||
|
|
||||||
#. First, make sure the bug is fixed the ``main`` branch, with a regular pull
|
#. First, make sure the bug is fixed in the ``main`` branch, with a regular pull
|
||||||
request, as described above. An exception to this is if the bug fix is not
|
request, as described above. An exception to this is if the bug fix is not
|
||||||
applicable to ``main`` anymore.
|
applicable to ``main`` anymore.
|
||||||
|
|
||||||
|
|
13
README.rst
13
README.rst
|
@ -20,16 +20,13 @@
|
||||||
:target: https://codecov.io/gh/pytest-dev/pytest
|
:target: https://codecov.io/gh/pytest-dev/pytest
|
||||||
:alt: Code coverage Status
|
:alt: Code coverage Status
|
||||||
|
|
||||||
.. image:: https://github.com/pytest-dev/pytest/workflows/test/badge.svg
|
.. image:: https://github.com/pytest-dev/pytest/actions/workflows/test.yml/badge.svg
|
||||||
:target: https://github.com/pytest-dev/pytest/actions?query=workflow%3Atest
|
:target: https://github.com/pytest-dev/pytest/actions?query=workflow%3Atest
|
||||||
|
|
||||||
.. image:: https://results.pre-commit.ci/badge/github/pytest-dev/pytest/main.svg
|
.. image:: https://results.pre-commit.ci/badge/github/pytest-dev/pytest/main.svg
|
||||||
:target: https://results.pre-commit.ci/latest/github/pytest-dev/pytest/main
|
:target: https://results.pre-commit.ci/latest/github/pytest-dev/pytest/main
|
||||||
:alt: pre-commit.ci status
|
:alt: pre-commit.ci status
|
||||||
|
|
||||||
.. image:: https://img.shields.io/badge/code%20style-black-000000.svg
|
|
||||||
:target: https://github.com/psf/black
|
|
||||||
|
|
||||||
.. image:: https://www.codetriage.com/pytest-dev/pytest/badges/users.svg
|
.. image:: https://www.codetriage.com/pytest-dev/pytest/badges/users.svg
|
||||||
:target: https://www.codetriage.com/pytest-dev/pytest
|
:target: https://www.codetriage.com/pytest-dev/pytest
|
||||||
|
|
||||||
|
@ -97,12 +94,12 @@ Features
|
||||||
- `Modular fixtures <https://docs.pytest.org/en/stable/explanation/fixtures.html>`_ for
|
- `Modular fixtures <https://docs.pytest.org/en/stable/explanation/fixtures.html>`_ for
|
||||||
managing small or parametrized long-lived test resources
|
managing small or parametrized long-lived test resources
|
||||||
|
|
||||||
- Can run `unittest <https://docs.pytest.org/en/stable/how-to/unittest.html>`_ (or trial),
|
- Can run `unittest <https://docs.pytest.org/en/stable/how-to/unittest.html>`_ (or trial)
|
||||||
`nose <https://docs.pytest.org/en/stable/how-to/nose.html>`_ test suites out of the box
|
test suites out of the box
|
||||||
|
|
||||||
- Python 3.7+ or PyPy3
|
- Python 3.8+ or PyPy3
|
||||||
|
|
||||||
- Rich plugin architecture, with over 850+ `external plugins <https://docs.pytest.org/en/latest/reference/plugin_list.html>`_ and thriving community
|
- Rich plugin architecture, with over 1300+ `external plugins <https://docs.pytest.org/en/latest/reference/plugin_list.html>`_ and thriving community
|
||||||
|
|
||||||
|
|
||||||
Documentation
|
Documentation
|
||||||
|
|
|
@ -133,14 +133,12 @@ Releasing
|
||||||
|
|
||||||
Both automatic and manual processes described above follow the same steps from this point onward.
|
Both automatic and manual processes described above follow the same steps from this point onward.
|
||||||
|
|
||||||
#. After all tests pass and the PR has been approved, tag the release commit
|
#. After all tests pass and the PR has been approved, trigger the ``deploy`` job
|
||||||
in the ``release-MAJOR.MINOR.PATCH`` branch and push it. This will publish to PyPI::
|
in https://github.com/pytest-dev/pytest/actions/workflows/deploy.yml, using the ``release-MAJOR.MINOR.PATCH`` branch
|
||||||
|
as source.
|
||||||
|
|
||||||
git fetch upstream
|
This job will require approval from ``pytest-dev/core``, after which it will publish to PyPI
|
||||||
git tag MAJOR.MINOR.PATCH upstream/release-MAJOR.MINOR.PATCH
|
and tag the repository.
|
||||||
git push upstream MAJOR.MINOR.PATCH
|
|
||||||
|
|
||||||
Wait for the deploy to complete, then make sure it is `available on PyPI <https://pypi.org/project/pytest>`_.
|
|
||||||
|
|
||||||
#. Merge the PR. **Make sure it's not squash-merged**, so that the tagged commit ends up in the main branch.
|
#. Merge the PR. **Make sure it's not squash-merged**, so that the tagged commit ends up in the main branch.
|
||||||
|
|
||||||
|
|
|
@ -23,9 +23,9 @@ members of the `contributors team`_ interested in receiving funding.
|
||||||
|
|
||||||
The current list of contributors receiving funding are:
|
The current list of contributors receiving funding are:
|
||||||
|
|
||||||
* `@asottile`_
|
|
||||||
* `@nicoddemus`_
|
* `@nicoddemus`_
|
||||||
* `@The-Compiler`_
|
* `@The-Compiler`_
|
||||||
|
* `@RonnyPfannschmidt`_
|
||||||
|
|
||||||
Contributors interested in receiving a part of the funds just need to submit a PR adding their
|
Contributors interested in receiving a part of the funds just need to submit a PR adding their
|
||||||
name to the list. Contributors that want to stop receiving the funds should also submit a PR
|
name to the list. Contributors that want to stop receiving the funds should also submit a PR
|
||||||
|
@ -55,6 +55,6 @@ funds. Just drop a line to one of the `@pytest-dev/tidelift-admins`_ or use the
|
||||||
.. _`@pytest-dev/tidelift-admins`: https://github.com/orgs/pytest-dev/teams/tidelift-admins/members
|
.. _`@pytest-dev/tidelift-admins`: https://github.com/orgs/pytest-dev/teams/tidelift-admins/members
|
||||||
.. _`agreement`: https://tidelift.com/docs/lifting/agreement
|
.. _`agreement`: https://tidelift.com/docs/lifting/agreement
|
||||||
|
|
||||||
.. _`@asottile`: https://github.com/asottile
|
|
||||||
.. _`@nicoddemus`: https://github.com/nicoddemus
|
.. _`@nicoddemus`: https://github.com/nicoddemus
|
||||||
.. _`@The-Compiler`: https://github.com/The-Compiler
|
.. _`@The-Compiler`: https://github.com/The-Compiler
|
||||||
|
.. _`@RonnyPfannschmidt`: https://github.com/RonnyPfannschmidt
|
||||||
|
|
|
@ -1,12 +1,14 @@
|
||||||
import sys
|
import sys
|
||||||
|
|
||||||
|
|
||||||
if __name__ == "__main__":
|
if __name__ == "__main__":
|
||||||
import cProfile
|
import cProfile
|
||||||
import pytest # NOQA
|
|
||||||
import pstats
|
import pstats
|
||||||
|
|
||||||
|
import pytest # noqa: F401
|
||||||
|
|
||||||
script = sys.argv[1:] if len(sys.argv) > 1 else ["empty.py"]
|
script = sys.argv[1:] if len(sys.argv) > 1 else ["empty.py"]
|
||||||
cProfile.run("pytest.cmdline.main(%r)" % script, "prof")
|
cProfile.run(f"pytest.cmdline.main({script!r})", "prof")
|
||||||
p = pstats.Stats("prof")
|
p = pstats.Stats("prof")
|
||||||
p.strip_dirs()
|
p.strip_dirs()
|
||||||
p.sort_stats("cumulative")
|
p.sort_stats("cumulative")
|
||||||
|
|
|
@ -4,6 +4,7 @@
|
||||||
# FastFilesCompleter 0.7383 1.0760
|
# FastFilesCompleter 0.7383 1.0760
|
||||||
import timeit
|
import timeit
|
||||||
|
|
||||||
|
|
||||||
imports = [
|
imports = [
|
||||||
"from argcomplete.completers import FilesCompleter as completer",
|
"from argcomplete.completers import FilesCompleter as completer",
|
||||||
"from _pytest._argcomplete import FastFilesCompleter as completer",
|
"from _pytest._argcomplete import FastFilesCompleter as completer",
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
import pytest
|
import pytest
|
||||||
|
|
||||||
|
|
||||||
SKIP = True
|
SKIP = True
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
from unittest import TestCase # noqa: F401
|
from unittest import TestCase # noqa: F401
|
||||||
|
|
||||||
|
|
||||||
for i in range(15000):
|
for i in range(15000):
|
||||||
exec(
|
exec(
|
||||||
f"""
|
f"""
|
||||||
|
|
|
@ -1 +0,0 @@
|
||||||
Update :class:`pytest.PytestUnhandledCoroutineWarning` to a deprecation; it will raise an error in pytest 8.
|
|
|
@ -1 +0,0 @@
|
||||||
When running with ``--pdb``, ``TestCase.tearDown`` is no longer called for tests when the *class* has been skipped via ``unittest.skip`` or ``pytest.mark.skip``.
|
|
|
@ -1 +0,0 @@
|
||||||
Replace `atomicwrites <https://github.com/untitaker/python-atomicwrites>`__ dependency on windows with `os.replace`.
|
|
|
@ -1 +0,0 @@
|
||||||
:data:`sys.stdin` now contains all expected methods of a file-like object when capture is enabled.
|
|
|
@ -1 +0,0 @@
|
||||||
Invalid XML characters in setup or teardown error messages are now properly escaped for JUnit XML reports.
|
|
|
@ -0,0 +1,4 @@
|
||||||
|
Fix reporting of teardown errors in higher-scoped fixtures when using `--maxfail` or `--stepwise`.
|
||||||
|
|
||||||
|
Originally added in pytest 8.0.0, but reverted in 8.0.2 due to a regression in pytest-xdist.
|
||||||
|
This regression was fixed in pytest-xdist 3.6.1.
|
|
@ -0,0 +1 @@
|
||||||
|
:func:`pytest.approx` now correctly handles :class:`Sequence <collections.abc.Sequence>`-like objects.
|
|
@ -0,0 +1 @@
|
||||||
|
Documented using :envvar:`PYTEST_VERSION` to detect if code is running from within a pytest run.
|
|
@ -0,0 +1,7 @@
|
||||||
|
Fix a regression in pytest 8.0 where tracebacks get longer and longer when multiple tests fail due to a shared higher-scope fixture which raised.
|
||||||
|
|
||||||
|
Also fix a similar regression in pytest 5.4 for collectors which raise during setup.
|
||||||
|
|
||||||
|
The fix necessitated internal changes which may affect some plugins:
|
||||||
|
- ``FixtureDef.cached_result[2]`` is now a tuple ``(exc, tb)`` instead of ``exc``.
|
||||||
|
- ``SetupState.stack`` failures are now a tuple ``(exc, tb)`` instead of ``exc``.
|
|
@ -0,0 +1,11 @@
|
||||||
|
Added `--xfail-tb` flag, which turns on traceback output for XFAIL results.
|
||||||
|
|
||||||
|
* If the `--xfail-tb` flag is not sent, tracebacks for XFAIL results are NOT shown.
|
||||||
|
* The style of traceback for XFAIL is set with `--tb`, and can be `auto|long|short|line|native|no`.
|
||||||
|
* Note: Even if you have `--xfail-tb` set, you won't see them if `--tb=no`.
|
||||||
|
|
||||||
|
Some history:
|
||||||
|
|
||||||
|
With pytest 8.0, `-rx` or `-ra` would not only turn on summary reports for xfail, but also report the tracebacks for xfail results. This caused issues with some projects that utilize xfail, but don't want to see all of the xfail tracebacks.
|
||||||
|
|
||||||
|
This change detaches xfail tracebacks from `-rx`, and now we turn on xfail tracebacks with `--xfail-tb`. With this, the default `-rx`/ `-ra` behavior is identical to pre-8.0 with respect to xfail tracebacks. While this is a behavior change, it brings default behavior back to pre-8.0.0 behavior, which ultimately was considered the better course of action.
|
|
@ -0,0 +1 @@
|
||||||
|
Fix collection error upon encountering an :mod:`abstract <abc>` class, including abstract `unittest.TestCase` subclasses.
|
|
@ -0,0 +1 @@
|
||||||
|
Fix a regression in pytest 8.0.0 where package-scoped parameterized items were not correctly reordered to minimize setups/teardowns in some cases.
|
|
@ -0,0 +1 @@
|
||||||
|
Fix crash with `assert testcase is not None` assertion failure when re-running unittest tests using plugins like pytest-rerunfailures. Regressed in 8.2.2.
|
|
@ -0,0 +1,6 @@
|
||||||
|
The external plugin mentions in the documentation now avoid mentioning
|
||||||
|
:std:doc:`setuptools entry-points <setuptools:index>` as the concept is
|
||||||
|
much more generic nowadays. Instead, the terminology of "external",
|
||||||
|
"installed", or "third-party" plugins (or packages) replaces that.
|
||||||
|
|
||||||
|
-- by :user:`webknjaz`
|
|
@ -0,0 +1,4 @@
|
||||||
|
The console output now uses the "third-party plugins" terminology,
|
||||||
|
replacing the previously established but confusing and outdated
|
||||||
|
reference to :std:doc:`setuptools <setuptools:index>`
|
||||||
|
-- by :user:`webknjaz`.
|
|
@ -0,0 +1 @@
|
||||||
|
Do not truncate arguments to functions in output when running with `-vvv`.
|
|
@ -1 +0,0 @@
|
||||||
Doctests now respect the ``--import-mode`` flag.
|
|
|
@ -0,0 +1 @@
|
||||||
|
Fixed progress percentages (the ``[ 87%]`` at the edge of the screen) sometimes not aligning correctly when running with pytest-xdist ``-n``.
|
|
@ -1 +0,0 @@
|
||||||
A warning is now emitted if a test function returns something other than `None`. This prevents a common mistake among beginners that expect that returning a `bool` (for example `return foo(a, b) == result`) would cause a test to pass or fail, instead of using `assert`.
|
|
|
@ -1,2 +0,0 @@
|
||||||
Introduce multiline display for warning matching via :py:func:`pytest.warns` and
|
|
||||||
enhance match comparison for :py:func:`_pytest._code.ExceptionInfo.match` as returned by :py:func:`pytest.raises`.
|
|
|
@ -1,2 +0,0 @@
|
||||||
Improve :py:func:`pytest.raises`. Previously passing an empty tuple would give a confusing
|
|
||||||
error. We now raise immediately with a more helpful message.
|
|
|
@ -1 +0,0 @@
|
||||||
Type-annotate ``FixtureRequest.param`` as ``Any`` as a stop gap measure until :issue:`8073` is fixed.
|
|
|
@ -1,3 +0,0 @@
|
||||||
On Python 3.11, use the standard library's :mod:`tomllib` to parse TOML.
|
|
||||||
|
|
||||||
:mod:`tomli`` is no longer a dependency on Python 3.11.
|
|
|
@ -1 +0,0 @@
|
||||||
Display assertion message without escaped newline characters with ``-vv``.
|
|
|
@ -1 +0,0 @@
|
||||||
Fixed a path handling code in ``rewrite.py`` that seems to work fine, but was incorrect and fails in some systems.
|
|
|
@ -1 +0,0 @@
|
||||||
Improved error message that is shown when no collector is found for a given file.
|
|
|
@ -1 +0,0 @@
|
||||||
Some coloring has been added to the short test summary.
|
|
|
@ -1 +0,0 @@
|
||||||
Ensure ``caplog.get_records(when)`` returns current/correct data after invoking ``caplog.clear()``.
|
|
|
@ -1 +0,0 @@
|
||||||
Normalize the help description of all command-line options.
|
|
|
@ -1 +0,0 @@
|
||||||
Added shell-style wildcard support to ``testpaths``.
|
|
|
@ -1 +0,0 @@
|
||||||
Made ``_pytest.compat`` re-export ``importlib_metadata`` in the eyes of type checkers.
|
|
|
@ -1 +0,0 @@
|
||||||
Fix default encoding warning (``EncodingWarning``) in ``cacheprovider``
|
|
|
@ -1 +0,0 @@
|
||||||
Fixed string representation for :func:`pytest.approx` when used to compare tuples.
|
|
|
@ -1 +0,0 @@
|
||||||
Display full crash messages in ``short test summary info``, when runng in a CI environment.
|
|
|
@ -1 +0,0 @@
|
||||||
Explicit note that :fixture:`tmpdir` fixture is discouraged in favour of :fixture:`tmp_path`.
|
|
|
@ -1,4 +0,0 @@
|
||||||
Improve the error message when we attempt to access a fixture that has been
|
|
||||||
torn down.
|
|
||||||
Add an additional sentence to the docstring explaining when it's not a good
|
|
||||||
idea to call getfixturevalue.
|
|
|
@ -1 +0,0 @@
|
||||||
Added support for hidden configuration file by allowing ``.pytest.ini`` as an alternative to ``pytest.ini``.
|
|
|
@ -14,7 +14,7 @@ Each file should be named like ``<ISSUE>.<TYPE>.rst``, where
|
||||||
``<ISSUE>`` is an issue number, and ``<TYPE>`` is one of:
|
``<ISSUE>`` is an issue number, and ``<TYPE>`` is one of:
|
||||||
|
|
||||||
* ``feature``: new user facing features, like new command-line options and new behavior.
|
* ``feature``: new user facing features, like new command-line options and new behavior.
|
||||||
* ``improvement``: improvement of existing functionality, usually without requiring user intervention (for example, new fields being written in ``--junitxml``, improved colors in terminal, etc).
|
* ``improvement``: improvement of existing functionality, usually without requiring user intervention (for example, new fields being written in ``--junit-xml``, improved colors in terminal, etc).
|
||||||
* ``bugfix``: fixes a bug.
|
* ``bugfix``: fixes a bug.
|
||||||
* ``doc``: documentation improvement, like rewording an entire session or adding missing docs.
|
* ``doc``: documentation improvement, like rewording an entire session or adding missing docs.
|
||||||
* ``deprecation``: feature deprecation.
|
* ``deprecation``: feature deprecation.
|
||||||
|
|
Before Width: | Height: | Size: 40 KiB After Width: | Height: | Size: 40 KiB |
|
@ -0,0 +1,7 @@
|
||||||
|
<style>
|
||||||
|
.logo {text-align: center;}
|
||||||
|
</style>
|
||||||
|
|
||||||
|
<a class="logo" href="{{ pathto('contents') }}">
|
||||||
|
<img src="{{ pathto('_static/pytest1.png', 1) }}" width="70%" height="70%" text="Pytest Logo"/>
|
||||||
|
</a>
|
|
@ -1,15 +0,0 @@
|
||||||
{#
|
|
||||||
basic/searchbox.html with heading removed.
|
|
||||||
#}
|
|
||||||
{%- if pagename != "search" and builder != "singlehtml" %}
|
|
||||||
<div id="searchbox" style="display: none" role="search">
|
|
||||||
<div class="searchformwrapper">
|
|
||||||
<form class="search" action="{{ pathto('search') }}" method="get">
|
|
||||||
<input type="text" name="q" aria-labelledby="searchlabel"
|
|
||||||
placeholder="Search"/>
|
|
||||||
<input type="submit" value="{{ _('Go') }}" />
|
|
||||||
</form>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<script type="text/javascript">$('#searchbox').show(0);</script>
|
|
||||||
{%- endif %}
|
|
|
@ -0,0 +1,7 @@
|
||||||
|
<style>
|
||||||
|
ul {list-style: none;}
|
||||||
|
li {margin: 0.4em 0;}
|
||||||
|
@media (min-width: 46em) {
|
||||||
|
#features {width: 50%;}
|
||||||
|
}
|
||||||
|
</style>
|
|
@ -44,7 +44,7 @@ Partner projects, sign up here! (by 22 March)
|
||||||
What does it mean to "adopt pytest"?
|
What does it mean to "adopt pytest"?
|
||||||
-----------------------------------------
|
-----------------------------------------
|
||||||
|
|
||||||
There can be many different definitions of "success". Pytest can run many nose_ and unittest_ tests by default, so using pytest as your testrunner may be possible from day 1. Job done, right?
|
There can be many different definitions of "success". Pytest can run many unittest_ tests by default, so using pytest as your testrunner may be possible from day 1. Job done, right?
|
||||||
|
|
||||||
Progressive success might look like:
|
Progressive success might look like:
|
||||||
|
|
||||||
|
@ -62,7 +62,6 @@ Progressive success might look like:
|
||||||
|
|
||||||
It may be after the month is up, the partner project decides that pytest is not right for it. That's okay - hopefully the pytest team will also learn something about its weaknesses or deficiencies.
|
It may be after the month is up, the partner project decides that pytest is not right for it. That's okay - hopefully the pytest team will also learn something about its weaknesses or deficiencies.
|
||||||
|
|
||||||
.. _nose: nose.html
|
|
||||||
.. _unittest: unittest.html
|
.. _unittest: unittest.html
|
||||||
.. _assert: assert.html
|
.. _assert: assert.html
|
||||||
.. _pycmd: https://bitbucket.org/hpk42/pycmd/overview
|
.. _pycmd: https://bitbucket.org/hpk42/pycmd/overview
|
||||||
|
|
|
@ -6,6 +6,29 @@ Release announcements
|
||||||
:maxdepth: 2
|
:maxdepth: 2
|
||||||
|
|
||||||
|
|
||||||
|
release-8.2.2
|
||||||
|
release-8.2.1
|
||||||
|
release-8.2.0
|
||||||
|
release-8.1.2
|
||||||
|
release-8.1.1
|
||||||
|
release-8.1.0
|
||||||
|
release-8.0.2
|
||||||
|
release-8.0.1
|
||||||
|
release-8.0.0
|
||||||
|
release-8.0.0rc2
|
||||||
|
release-8.0.0rc1
|
||||||
|
release-7.4.4
|
||||||
|
release-7.4.3
|
||||||
|
release-7.4.2
|
||||||
|
release-7.4.1
|
||||||
|
release-7.4.0
|
||||||
|
release-7.3.2
|
||||||
|
release-7.3.1
|
||||||
|
release-7.3.0
|
||||||
|
release-7.2.2
|
||||||
|
release-7.2.1
|
||||||
|
release-7.2.0
|
||||||
|
release-7.1.3
|
||||||
release-7.1.2
|
release-7.1.2
|
||||||
release-7.1.1
|
release-7.1.1
|
||||||
release-7.1.0
|
release-7.1.0
|
||||||
|
|
|
@ -62,7 +62,7 @@ New Features
|
||||||
- new "-q" option which decreases verbosity and prints a more
|
- new "-q" option which decreases verbosity and prints a more
|
||||||
nose/unittest-style "dot" output.
|
nose/unittest-style "dot" output.
|
||||||
|
|
||||||
- many many more detailed improvements details
|
- many, many, more detailed improvements details
|
||||||
|
|
||||||
Fixes
|
Fixes
|
||||||
-----------------------
|
-----------------------
|
||||||
|
@ -109,7 +109,7 @@ Important Notes
|
||||||
in conftest.py files. They will cause nothing special.
|
in conftest.py files. They will cause nothing special.
|
||||||
- removed support for calling the pre-1.0 collection API of "run()" and "join"
|
- removed support for calling the pre-1.0 collection API of "run()" and "join"
|
||||||
- removed reading option values from conftest.py files or env variables.
|
- removed reading option values from conftest.py files or env variables.
|
||||||
This can now be done much much better and easier through the ini-file
|
This can now be done much, much, better and easier through the ini-file
|
||||||
mechanism and the "addopts" entry in particular.
|
mechanism and the "addopts" entry in particular.
|
||||||
- removed the "disabled" attribute in test classes. Use the skipping
|
- removed the "disabled" attribute in test classes. Use the skipping
|
||||||
and pytestmark mechanism to skip or xfail a test class.
|
and pytestmark mechanism to skip or xfail a test class.
|
||||||
|
|
|
@ -4,7 +4,7 @@ pytest-2.2.2: bug fixes
|
||||||
pytest-2.2.2 (updated to 2.2.3 to fix packaging issues) is a minor
|
pytest-2.2.2 (updated to 2.2.3 to fix packaging issues) is a minor
|
||||||
backward-compatible release of the versatile py.test testing tool. It
|
backward-compatible release of the versatile py.test testing tool. It
|
||||||
contains bug fixes and a few refinements particularly to reporting with
|
contains bug fixes and a few refinements particularly to reporting with
|
||||||
"--collectonly", see below for betails.
|
"--collectonly", see below for details.
|
||||||
|
|
||||||
For general information see here:
|
For general information see here:
|
||||||
|
|
||||||
|
|
|
@ -181,7 +181,7 @@ Bug fixes:
|
||||||
partially failed (finalizers would not always be called before)
|
partially failed (finalizers would not always be called before)
|
||||||
|
|
||||||
- fix issue320 - fix class scope for fixtures when mixed with
|
- fix issue320 - fix class scope for fixtures when mixed with
|
||||||
module-level functions. Thanks Anatloy Bubenkoff.
|
module-level functions. Thanks Anatoly Bubenkoff.
|
||||||
|
|
||||||
- you can specify "-q" or "-qq" to get different levels of "quieter"
|
- you can specify "-q" or "-qq" to get different levels of "quieter"
|
||||||
reporting (thanks Katarzyna Jachim)
|
reporting (thanks Katarzyna Jachim)
|
||||||
|
|
|
@ -83,7 +83,7 @@ holger krekel
|
||||||
Thanks Ralph Schmitt for the precise failure example.
|
Thanks Ralph Schmitt for the precise failure example.
|
||||||
|
|
||||||
- fix issue244 by implementing special index for parameters to only use
|
- fix issue244 by implementing special index for parameters to only use
|
||||||
indices for paramentrized test ids
|
indices for parametrized test ids
|
||||||
|
|
||||||
- fix issue287 by running all finalizers but saving the exception
|
- fix issue287 by running all finalizers but saving the exception
|
||||||
from the first failing finalizer and re-raising it so teardown will
|
from the first failing finalizer and re-raising it so teardown will
|
||||||
|
|
|
@ -73,7 +73,7 @@ holger krekel
|
||||||
- cleanup setup.py a bit and specify supported versions. Thanks Jurko
|
- cleanup setup.py a bit and specify supported versions. Thanks Jurko
|
||||||
Gospodnetic for the PR.
|
Gospodnetic for the PR.
|
||||||
|
|
||||||
- change XPASS colour to yellow rather then red when tests are run
|
- change XPASS colour to yellow rather than red when tests are run
|
||||||
with -v.
|
with -v.
|
||||||
|
|
||||||
- fix issue473: work around mock putting an unbound method into a class
|
- fix issue473: work around mock putting an unbound method into a class
|
||||||
|
|
|
@ -55,7 +55,7 @@ holger krekel
|
||||||
github. See https://pytest.org/en/stable/contributing.html .
|
github. See https://pytest.org/en/stable/contributing.html .
|
||||||
Thanks to Anatoly for pushing and initial work on this.
|
Thanks to Anatoly for pushing and initial work on this.
|
||||||
|
|
||||||
- fix issue650: new option ``--docttest-ignore-import-errors`` which
|
- fix issue650: new option ``--doctest-ignore-import-errors`` which
|
||||||
will turn import errors in doctests into skips. Thanks Charles Cloud
|
will turn import errors in doctests into skips. Thanks Charles Cloud
|
||||||
for the complete PR.
|
for the complete PR.
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,28 @@
|
||||||
|
pytest-7.1.3
|
||||||
|
=======================================
|
||||||
|
|
||||||
|
pytest 7.1.3 has just been released to PyPI.
|
||||||
|
|
||||||
|
This is a bug-fix release, being a drop-in replacement. To upgrade::
|
||||||
|
|
||||||
|
pip install --upgrade pytest
|
||||||
|
|
||||||
|
The full changelog is available at https://docs.pytest.org/en/stable/changelog.html.
|
||||||
|
|
||||||
|
Thanks to all of the contributors to this release:
|
||||||
|
|
||||||
|
* Anthony Sottile
|
||||||
|
* Bruno Oliveira
|
||||||
|
* Gergely Kalmár
|
||||||
|
* Nipunn Koorapati
|
||||||
|
* Pax
|
||||||
|
* Sviatoslav Sydorenko
|
||||||
|
* Tim Hoffmann
|
||||||
|
* Tony Narlock
|
||||||
|
* Wolfremium
|
||||||
|
* Zach OBrien
|
||||||
|
* aizpurua23a
|
||||||
|
|
||||||
|
|
||||||
|
Happy testing,
|
||||||
|
The pytest Development Team
|
|
@ -0,0 +1,93 @@
|
||||||
|
pytest-7.2.0
|
||||||
|
=======================================
|
||||||
|
|
||||||
|
The pytest team is proud to announce the 7.2.0 release!
|
||||||
|
|
||||||
|
This release contains new features, improvements, and bug fixes,
|
||||||
|
the full list of changes is available in the changelog:
|
||||||
|
|
||||||
|
https://docs.pytest.org/en/stable/changelog.html
|
||||||
|
|
||||||
|
For complete documentation, please visit:
|
||||||
|
|
||||||
|
https://docs.pytest.org/en/stable/
|
||||||
|
|
||||||
|
As usual, you can upgrade from PyPI via:
|
||||||
|
|
||||||
|
pip install -U pytest
|
||||||
|
|
||||||
|
Thanks to all of the contributors to this release:
|
||||||
|
|
||||||
|
* Aaron Berdy
|
||||||
|
* Adam Turner
|
||||||
|
* Albert Villanova del Moral
|
||||||
|
* Alice Purcell
|
||||||
|
* Anthony Sottile
|
||||||
|
* Anton Yakutovich
|
||||||
|
* Babak Keyvani
|
||||||
|
* Brandon Chinn
|
||||||
|
* Bruno Oliveira
|
||||||
|
* Chanvin Xiao
|
||||||
|
* Cheuk Ting Ho
|
||||||
|
* Chris Wheeler
|
||||||
|
* EmptyRabbit
|
||||||
|
* Ezio Melotti
|
||||||
|
* Florian Best
|
||||||
|
* Florian Bruhin
|
||||||
|
* Fredrik Berndtsson
|
||||||
|
* Gabriel Landau
|
||||||
|
* Gergely Kalmár
|
||||||
|
* Hugo van Kemenade
|
||||||
|
* James Gerity
|
||||||
|
* John Litborn
|
||||||
|
* Jon Parise
|
||||||
|
* Kevin C
|
||||||
|
* Kian Eliasi
|
||||||
|
* MatthewFlamm
|
||||||
|
* Miro Hrončok
|
||||||
|
* Nate Meyvis
|
||||||
|
* Neil Girdhar
|
||||||
|
* Nhieuvu1802
|
||||||
|
* Nipunn Koorapati
|
||||||
|
* Ofek Lev
|
||||||
|
* Paul Müller
|
||||||
|
* Paul Reece
|
||||||
|
* Pax
|
||||||
|
* Pete Baughman
|
||||||
|
* Peyman Salehi
|
||||||
|
* Philipp A
|
||||||
|
* Ran Benita
|
||||||
|
* Robert O'Shea
|
||||||
|
* Ronny Pfannschmidt
|
||||||
|
* Rowin
|
||||||
|
* Ruth Comer
|
||||||
|
* Samuel Colvin
|
||||||
|
* Samuel Gaist
|
||||||
|
* Sandro Tosi
|
||||||
|
* Shantanu
|
||||||
|
* Simon K
|
||||||
|
* Stephen Rosen
|
||||||
|
* Sviatoslav Sydorenko
|
||||||
|
* Tatiana Ovary
|
||||||
|
* Thierry Moisan
|
||||||
|
* Thomas Grainger
|
||||||
|
* Tim Hoffmann
|
||||||
|
* Tobias Diez
|
||||||
|
* Tony Narlock
|
||||||
|
* Vivaan Verma
|
||||||
|
* Wolfremium
|
||||||
|
* Zac Hatfield-Dodds
|
||||||
|
* Zach OBrien
|
||||||
|
* aizpurua23a
|
||||||
|
* gresm
|
||||||
|
* holesch
|
||||||
|
* itxasos23
|
||||||
|
* johnkangw
|
||||||
|
* skhomuti
|
||||||
|
* sommersoft
|
||||||
|
* wodny
|
||||||
|
* zx.qiu
|
||||||
|
|
||||||
|
|
||||||
|
Happy testing,
|
||||||
|
The pytest Development Team
|
|
@ -0,0 +1,25 @@
|
||||||
|
pytest-7.2.1
|
||||||
|
=======================================
|
||||||
|
|
||||||
|
pytest 7.2.1 has just been released to PyPI.
|
||||||
|
|
||||||
|
This is a bug-fix release, being a drop-in replacement. To upgrade::
|
||||||
|
|
||||||
|
pip install --upgrade pytest
|
||||||
|
|
||||||
|
The full changelog is available at https://docs.pytest.org/en/stable/changelog.html.
|
||||||
|
|
||||||
|
Thanks to all of the contributors to this release:
|
||||||
|
|
||||||
|
* Anthony Sottile
|
||||||
|
* Bruno Oliveira
|
||||||
|
* Daniel Valenzuela
|
||||||
|
* Kadino
|
||||||
|
* Prerak Patel
|
||||||
|
* Ronny Pfannschmidt
|
||||||
|
* Santiago Castro
|
||||||
|
* s-padmanaban
|
||||||
|
|
||||||
|
|
||||||
|
Happy testing,
|
||||||
|
The pytest Development Team
|
|
@ -0,0 +1,25 @@
|
||||||
|
pytest-7.2.2
|
||||||
|
=======================================
|
||||||
|
|
||||||
|
pytest 7.2.2 has just been released to PyPI.
|
||||||
|
|
||||||
|
This is a bug-fix release, being a drop-in replacement. To upgrade::
|
||||||
|
|
||||||
|
pip install --upgrade pytest
|
||||||
|
|
||||||
|
The full changelog is available at https://docs.pytest.org/en/stable/changelog.html.
|
||||||
|
|
||||||
|
Thanks to all of the contributors to this release:
|
||||||
|
|
||||||
|
* Bruno Oliveira
|
||||||
|
* Garvit Shubham
|
||||||
|
* Mahesh Vashishtha
|
||||||
|
* Ramsey
|
||||||
|
* Ronny Pfannschmidt
|
||||||
|
* Teejay
|
||||||
|
* q0w
|
||||||
|
* vin01
|
||||||
|
|
||||||
|
|
||||||
|
Happy testing,
|
||||||
|
The pytest Development Team
|
|
@ -0,0 +1,130 @@
|
||||||
|
pytest-7.3.0
|
||||||
|
=======================================
|
||||||
|
|
||||||
|
The pytest team is proud to announce the 7.3.0 release!
|
||||||
|
|
||||||
|
This release contains new features, improvements, and bug fixes,
|
||||||
|
the full list of changes is available in the changelog:
|
||||||
|
|
||||||
|
https://docs.pytest.org/en/stable/changelog.html
|
||||||
|
|
||||||
|
For complete documentation, please visit:
|
||||||
|
|
||||||
|
https://docs.pytest.org/en/stable/
|
||||||
|
|
||||||
|
As usual, you can upgrade from PyPI via:
|
||||||
|
|
||||||
|
pip install -U pytest
|
||||||
|
|
||||||
|
Thanks to all of the contributors to this release:
|
||||||
|
|
||||||
|
* Aaron Berdy
|
||||||
|
* Adam Turner
|
||||||
|
* Albert Villanova del Moral
|
||||||
|
* Alessio Izzo
|
||||||
|
* Alex Hadley
|
||||||
|
* Alice Purcell
|
||||||
|
* Anthony Sottile
|
||||||
|
* Anton Yakutovich
|
||||||
|
* Ashish Kurmi
|
||||||
|
* Babak Keyvani
|
||||||
|
* Billy
|
||||||
|
* Brandon Chinn
|
||||||
|
* Bruno Oliveira
|
||||||
|
* Cal Jacobson
|
||||||
|
* Chanvin Xiao
|
||||||
|
* Cheuk Ting Ho
|
||||||
|
* Chris Wheeler
|
||||||
|
* Daniel Garcia Moreno
|
||||||
|
* Daniel Scheffler
|
||||||
|
* Daniel Valenzuela
|
||||||
|
* EmptyRabbit
|
||||||
|
* Ezio Melotti
|
||||||
|
* Felix Hofstätter
|
||||||
|
* Florian Best
|
||||||
|
* Florian Bruhin
|
||||||
|
* Fredrik Berndtsson
|
||||||
|
* Gabriel Landau
|
||||||
|
* Garvit Shubham
|
||||||
|
* Gergely Kalmár
|
||||||
|
* HTRafal
|
||||||
|
* Hugo van Kemenade
|
||||||
|
* Ilya Konstantinov
|
||||||
|
* Itxaso Aizpurua
|
||||||
|
* James Gerity
|
||||||
|
* Jay
|
||||||
|
* John Litborn
|
||||||
|
* Jon Parise
|
||||||
|
* Jouke Witteveen
|
||||||
|
* Kadino
|
||||||
|
* Kevin C
|
||||||
|
* Kian Eliasi
|
||||||
|
* Klaus Rettinghaus
|
||||||
|
* Kodi Arfer
|
||||||
|
* Mahesh Vashishtha
|
||||||
|
* Manuel Jacob
|
||||||
|
* Marko Pacak
|
||||||
|
* MatthewFlamm
|
||||||
|
* Miro Hrončok
|
||||||
|
* Nate Meyvis
|
||||||
|
* Neil Girdhar
|
||||||
|
* Nhieuvu1802
|
||||||
|
* Nipunn Koorapati
|
||||||
|
* Ofek Lev
|
||||||
|
* Paul Kehrer
|
||||||
|
* Paul Müller
|
||||||
|
* Paul Reece
|
||||||
|
* Pax
|
||||||
|
* Pete Baughman
|
||||||
|
* Peyman Salehi
|
||||||
|
* Philipp A
|
||||||
|
* Pierre Sassoulas
|
||||||
|
* Prerak Patel
|
||||||
|
* Ramsey
|
||||||
|
* Ran Benita
|
||||||
|
* Robert O'Shea
|
||||||
|
* Ronny Pfannschmidt
|
||||||
|
* Rowin
|
||||||
|
* Ruth Comer
|
||||||
|
* Samuel Colvin
|
||||||
|
* Samuel Gaist
|
||||||
|
* Sandro Tosi
|
||||||
|
* Santiago Castro
|
||||||
|
* Shantanu
|
||||||
|
* Simon K
|
||||||
|
* Stefanie Molin
|
||||||
|
* Stephen Rosen
|
||||||
|
* Sviatoslav Sydorenko
|
||||||
|
* Tatiana Ovary
|
||||||
|
* Teejay
|
||||||
|
* Thierry Moisan
|
||||||
|
* Thomas Grainger
|
||||||
|
* Tim Hoffmann
|
||||||
|
* Tobias Diez
|
||||||
|
* Tony Narlock
|
||||||
|
* Vivaan Verma
|
||||||
|
* Wolfremium
|
||||||
|
* Yannick PÉROUX
|
||||||
|
* Yusuke Kadowaki
|
||||||
|
* Zac Hatfield-Dodds
|
||||||
|
* Zach OBrien
|
||||||
|
* aizpurua23a
|
||||||
|
* bitzge
|
||||||
|
* bluthej
|
||||||
|
* gresm
|
||||||
|
* holesch
|
||||||
|
* itxasos23
|
||||||
|
* johnkangw
|
||||||
|
* q0w
|
||||||
|
* rdb
|
||||||
|
* s-padmanaban
|
||||||
|
* skhomuti
|
||||||
|
* sommersoft
|
||||||
|
* vin01
|
||||||
|
* wim glenn
|
||||||
|
* wodny
|
||||||
|
* zx.qiu
|
||||||
|
|
||||||
|
|
||||||
|
Happy testing,
|
||||||
|
The pytest Development Team
|
|
@ -0,0 +1,18 @@
|
||||||
|
pytest-7.3.1
|
||||||
|
=======================================
|
||||||
|
|
||||||
|
pytest 7.3.1 has just been released to PyPI.
|
||||||
|
|
||||||
|
This is a bug-fix release, being a drop-in replacement. To upgrade::
|
||||||
|
|
||||||
|
pip install --upgrade pytest
|
||||||
|
|
||||||
|
The full changelog is available at https://docs.pytest.org/en/stable/changelog.html.
|
||||||
|
|
||||||
|
Thanks to all of the contributors to this release:
|
||||||
|
|
||||||
|
* Ran Benita
|
||||||
|
|
||||||
|
|
||||||
|
Happy testing,
|
||||||
|
The pytest Development Team
|
|
@ -0,0 +1,21 @@
|
||||||
|
pytest-7.3.2
|
||||||
|
=======================================
|
||||||
|
|
||||||
|
pytest 7.3.2 has just been released to PyPI.
|
||||||
|
|
||||||
|
This is a bug-fix release, being a drop-in replacement. To upgrade::
|
||||||
|
|
||||||
|
pip install --upgrade pytest
|
||||||
|
|
||||||
|
The full changelog is available at https://docs.pytest.org/en/stable/changelog.html.
|
||||||
|
|
||||||
|
Thanks to all of the contributors to this release:
|
||||||
|
|
||||||
|
* Adam J. Stewart
|
||||||
|
* Alessio Izzo
|
||||||
|
* Bruno Oliveira
|
||||||
|
* Ran Benita
|
||||||
|
|
||||||
|
|
||||||
|
Happy testing,
|
||||||
|
The pytest Development Team
|
|
@ -0,0 +1,49 @@
|
||||||
|
pytest-7.4.0
|
||||||
|
=======================================
|
||||||
|
|
||||||
|
The pytest team is proud to announce the 7.4.0 release!
|
||||||
|
|
||||||
|
This release contains new features, improvements, and bug fixes,
|
||||||
|
the full list of changes is available in the changelog:
|
||||||
|
|
||||||
|
https://docs.pytest.org/en/stable/changelog.html
|
||||||
|
|
||||||
|
For complete documentation, please visit:
|
||||||
|
|
||||||
|
https://docs.pytest.org/en/stable/
|
||||||
|
|
||||||
|
As usual, you can upgrade from PyPI via:
|
||||||
|
|
||||||
|
pip install -U pytest
|
||||||
|
|
||||||
|
Thanks to all of the contributors to this release:
|
||||||
|
|
||||||
|
* Adam J. Stewart
|
||||||
|
* Alessio Izzo
|
||||||
|
* Alex
|
||||||
|
* Alex Lambson
|
||||||
|
* Brian Larsen
|
||||||
|
* Bruno Oliveira
|
||||||
|
* Bryan Ricker
|
||||||
|
* Chris Mahoney
|
||||||
|
* Facundo Batista
|
||||||
|
* Florian Bruhin
|
||||||
|
* Jarrett Keifer
|
||||||
|
* Kenny Y
|
||||||
|
* Miro Hrončok
|
||||||
|
* Ran Benita
|
||||||
|
* Roberto Aldera
|
||||||
|
* Ronny Pfannschmidt
|
||||||
|
* Sergey Kim
|
||||||
|
* Stefanie Molin
|
||||||
|
* Vijay Arora
|
||||||
|
* Ville Skyttä
|
||||||
|
* Zac Hatfield-Dodds
|
||||||
|
* bzoracler
|
||||||
|
* leeyueh
|
||||||
|
* nondescryptid
|
||||||
|
* theirix
|
||||||
|
|
||||||
|
|
||||||
|
Happy testing,
|
||||||
|
The pytest Development Team
|
|
@ -0,0 +1,20 @@
|
||||||
|
pytest-7.4.1
|
||||||
|
=======================================
|
||||||
|
|
||||||
|
pytest 7.4.1 has just been released to PyPI.
|
||||||
|
|
||||||
|
This is a bug-fix release, being a drop-in replacement. To upgrade::
|
||||||
|
|
||||||
|
pip install --upgrade pytest
|
||||||
|
|
||||||
|
The full changelog is available at https://docs.pytest.org/en/stable/changelog.html.
|
||||||
|
|
||||||
|
Thanks to all of the contributors to this release:
|
||||||
|
|
||||||
|
* Bruno Oliveira
|
||||||
|
* Florian Bruhin
|
||||||
|
* Ran Benita
|
||||||
|
|
||||||
|
|
||||||
|
Happy testing,
|
||||||
|
The pytest Development Team
|
|
@ -0,0 +1,18 @@
|
||||||
|
pytest-7.4.2
|
||||||
|
=======================================
|
||||||
|
|
||||||
|
pytest 7.4.2 has just been released to PyPI.
|
||||||
|
|
||||||
|
This is a bug-fix release, being a drop-in replacement. To upgrade::
|
||||||
|
|
||||||
|
pip install --upgrade pytest
|
||||||
|
|
||||||
|
The full changelog is available at https://docs.pytest.org/en/stable/changelog.html.
|
||||||
|
|
||||||
|
Thanks to all of the contributors to this release:
|
||||||
|
|
||||||
|
* Bruno Oliveira
|
||||||
|
|
||||||
|
|
||||||
|
Happy testing,
|
||||||
|
The pytest Development Team
|
|
@ -0,0 +1,19 @@
|
||||||
|
pytest-7.4.3
|
||||||
|
=======================================
|
||||||
|
|
||||||
|
pytest 7.4.3 has just been released to PyPI.
|
||||||
|
|
||||||
|
This is a bug-fix release, being a drop-in replacement. To upgrade::
|
||||||
|
|
||||||
|
pip install --upgrade pytest
|
||||||
|
|
||||||
|
The full changelog is available at https://docs.pytest.org/en/stable/changelog.html.
|
||||||
|
|
||||||
|
Thanks to all of the contributors to this release:
|
||||||
|
|
||||||
|
* Bruno Oliveira
|
||||||
|
* Marc Mueller
|
||||||
|
|
||||||
|
|
||||||
|
Happy testing,
|
||||||
|
The pytest Development Team
|
|
@ -0,0 +1,20 @@
|
||||||
|
pytest-7.4.4
|
||||||
|
=======================================
|
||||||
|
|
||||||
|
pytest 7.4.4 has just been released to PyPI.
|
||||||
|
|
||||||
|
This is a bug-fix release, being a drop-in replacement. To upgrade::
|
||||||
|
|
||||||
|
pip install --upgrade pytest
|
||||||
|
|
||||||
|
The full changelog is available at https://docs.pytest.org/en/stable/changelog.html.
|
||||||
|
|
||||||
|
Thanks to all of the contributors to this release:
|
||||||
|
|
||||||
|
* Bruno Oliveira
|
||||||
|
* Ran Benita
|
||||||
|
* Zac Hatfield-Dodds
|
||||||
|
|
||||||
|
|
||||||
|
Happy testing,
|
||||||
|
The pytest Development Team
|
|
@ -0,0 +1,26 @@
|
||||||
|
pytest-8.0.0
|
||||||
|
=======================================
|
||||||
|
|
||||||
|
The pytest team is proud to announce the 8.0.0 release!
|
||||||
|
|
||||||
|
This release contains new features, improvements, bug fixes, and breaking changes, so users
|
||||||
|
are encouraged to take a look at the CHANGELOG carefully:
|
||||||
|
|
||||||
|
https://docs.pytest.org/en/stable/changelog.html
|
||||||
|
|
||||||
|
For complete documentation, please visit:
|
||||||
|
|
||||||
|
https://docs.pytest.org/en/stable/
|
||||||
|
|
||||||
|
As usual, you can upgrade from PyPI via:
|
||||||
|
|
||||||
|
pip install -U pytest
|
||||||
|
|
||||||
|
Thanks to all of the contributors to this release:
|
||||||
|
|
||||||
|
* Bruno Oliveira
|
||||||
|
* Ran Benita
|
||||||
|
|
||||||
|
|
||||||
|
Happy testing,
|
||||||
|
The pytest Development Team
|
|
@ -0,0 +1,82 @@
|
||||||
|
pytest-8.0.0rc1
|
||||||
|
=======================================
|
||||||
|
|
||||||
|
The pytest team is proud to announce the 8.0.0rc1 release!
|
||||||
|
|
||||||
|
This release contains new features, improvements, bug fixes, and breaking changes, so users
|
||||||
|
are encouraged to take a look at the CHANGELOG carefully:
|
||||||
|
|
||||||
|
https://docs.pytest.org/en/stable/changelog.html
|
||||||
|
|
||||||
|
For complete documentation, please visit:
|
||||||
|
|
||||||
|
https://docs.pytest.org/en/stable/
|
||||||
|
|
||||||
|
As usual, you can upgrade from PyPI via:
|
||||||
|
|
||||||
|
pip install -U pytest
|
||||||
|
|
||||||
|
Thanks to all of the contributors to this release:
|
||||||
|
|
||||||
|
* Akhilesh Ramakrishnan
|
||||||
|
* Aleksandr Brodin
|
||||||
|
* Anthony Sottile
|
||||||
|
* Arthur Richard
|
||||||
|
* Avasam
|
||||||
|
* Benjamin Schubert
|
||||||
|
* Bruno Oliveira
|
||||||
|
* Carsten Grohmann
|
||||||
|
* Cheukting
|
||||||
|
* Chris Mahoney
|
||||||
|
* Christoph Anton Mitterer
|
||||||
|
* DetachHead
|
||||||
|
* Erik Hasse
|
||||||
|
* Florian Bruhin
|
||||||
|
* Fraser Stark
|
||||||
|
* Ha Pam
|
||||||
|
* Hugo van Kemenade
|
||||||
|
* Isaac Virshup
|
||||||
|
* Israel Fruchter
|
||||||
|
* Jens Tröger
|
||||||
|
* Jon Parise
|
||||||
|
* Kenny Y
|
||||||
|
* Lesnek
|
||||||
|
* Marc Mueller
|
||||||
|
* Michał Górny
|
||||||
|
* Mihail Milushev
|
||||||
|
* Milan Lesnek
|
||||||
|
* Miro Hrončok
|
||||||
|
* Patrick Lannigan
|
||||||
|
* Ran Benita
|
||||||
|
* Reagan Lee
|
||||||
|
* Ronny Pfannschmidt
|
||||||
|
* Sadra Barikbin
|
||||||
|
* Sean Malloy
|
||||||
|
* Sean Patrick Malloy
|
||||||
|
* Sharad Nair
|
||||||
|
* Simon Blanchard
|
||||||
|
* Sourabh Beniwal
|
||||||
|
* Stefaan Lippens
|
||||||
|
* Tanya Agarwal
|
||||||
|
* Thomas Grainger
|
||||||
|
* Tom Mortimer-Jones
|
||||||
|
* Tushar Sadhwani
|
||||||
|
* Tyler Smart
|
||||||
|
* Uday Kumar
|
||||||
|
* Warren Markham
|
||||||
|
* WarrenTheRabbit
|
||||||
|
* Zac Hatfield-Dodds
|
||||||
|
* Ziad Kermadi
|
||||||
|
* akhilramkee
|
||||||
|
* antosikv
|
||||||
|
* bowugit
|
||||||
|
* mickeypash
|
||||||
|
* neilmartin2000
|
||||||
|
* pomponchik
|
||||||
|
* ryanpudd
|
||||||
|
* touilleWoman
|
||||||
|
* ubaumann
|
||||||
|
|
||||||
|
|
||||||
|
Happy testing,
|
||||||
|
The pytest Development Team
|
|
@ -0,0 +1,32 @@
|
||||||
|
pytest-8.0.0rc2
|
||||||
|
=======================================
|
||||||
|
|
||||||
|
The pytest team is proud to announce the 8.0.0rc2 prerelease!
|
||||||
|
|
||||||
|
This is a prerelease, not intended for production use, but to test the upcoming features and improvements
|
||||||
|
in order to catch any major problems before the final version is released to the major public.
|
||||||
|
|
||||||
|
We appreciate your help testing this out before the final release, making sure to report any
|
||||||
|
regressions to our issue tracker:
|
||||||
|
|
||||||
|
https://github.com/pytest-dev/pytest/issues
|
||||||
|
|
||||||
|
When doing so, please include the string ``[prerelease]`` in the title.
|
||||||
|
|
||||||
|
You can upgrade from PyPI via:
|
||||||
|
|
||||||
|
pip install pytest==8.0.0rc2
|
||||||
|
|
||||||
|
Users are encouraged to take a look at the CHANGELOG carefully:
|
||||||
|
|
||||||
|
https://docs.pytest.org/en/release-8.0.0rc2/changelog.html
|
||||||
|
|
||||||
|
Thanks to all the contributors to this release:
|
||||||
|
|
||||||
|
* Ben Brown
|
||||||
|
* Bruno Oliveira
|
||||||
|
* Ran Benita
|
||||||
|
|
||||||
|
|
||||||
|
Happy testing,
|
||||||
|
The pytest Development Team
|
|
@ -0,0 +1,21 @@
|
||||||
|
pytest-8.0.1
|
||||||
|
=======================================
|
||||||
|
|
||||||
|
pytest 8.0.1 has just been released to PyPI.
|
||||||
|
|
||||||
|
This is a bug-fix release, being a drop-in replacement. To upgrade::
|
||||||
|
|
||||||
|
pip install --upgrade pytest
|
||||||
|
|
||||||
|
The full changelog is available at https://docs.pytest.org/en/stable/changelog.html.
|
||||||
|
|
||||||
|
Thanks to all of the contributors to this release:
|
||||||
|
|
||||||
|
* Bruno Oliveira
|
||||||
|
* Clément Robert
|
||||||
|
* Pierre Sassoulas
|
||||||
|
* Ran Benita
|
||||||
|
|
||||||
|
|
||||||
|
Happy testing,
|
||||||
|
The pytest Development Team
|
|
@ -0,0 +1,18 @@
|
||||||
|
pytest-8.0.2
|
||||||
|
=======================================
|
||||||
|
|
||||||
|
pytest 8.0.2 has just been released to PyPI.
|
||||||
|
|
||||||
|
This is a bug-fix release, being a drop-in replacement. To upgrade::
|
||||||
|
|
||||||
|
pip install --upgrade pytest
|
||||||
|
|
||||||
|
The full changelog is available at https://docs.pytest.org/en/stable/changelog.html.
|
||||||
|
|
||||||
|
Thanks to all of the contributors to this release:
|
||||||
|
|
||||||
|
* Ran Benita
|
||||||
|
|
||||||
|
|
||||||
|
Happy testing,
|
||||||
|
The pytest Development Team
|
|
@ -0,0 +1,54 @@
|
||||||
|
pytest-8.1.0
|
||||||
|
=======================================
|
||||||
|
|
||||||
|
The pytest team is proud to announce the 8.1.0 release!
|
||||||
|
|
||||||
|
This release contains new features, improvements, and bug fixes,
|
||||||
|
the full list of changes is available in the changelog:
|
||||||
|
|
||||||
|
https://docs.pytest.org/en/stable/changelog.html
|
||||||
|
|
||||||
|
For complete documentation, please visit:
|
||||||
|
|
||||||
|
https://docs.pytest.org/en/stable/
|
||||||
|
|
||||||
|
As usual, you can upgrade from PyPI via:
|
||||||
|
|
||||||
|
pip install -U pytest
|
||||||
|
|
||||||
|
Thanks to all of the contributors to this release:
|
||||||
|
|
||||||
|
* Ben Brown
|
||||||
|
* Ben Leith
|
||||||
|
* Bruno Oliveira
|
||||||
|
* Clément Robert
|
||||||
|
* Dave Hall
|
||||||
|
* Dương Quốc Khánh
|
||||||
|
* Eero Vaher
|
||||||
|
* Eric Larson
|
||||||
|
* Fabian Sturm
|
||||||
|
* Faisal Fawad
|
||||||
|
* Florian Bruhin
|
||||||
|
* Franck Charras
|
||||||
|
* Joachim B Haga
|
||||||
|
* John Litborn
|
||||||
|
* Loïc Estève
|
||||||
|
* Marc Bresson
|
||||||
|
* Patrick Lannigan
|
||||||
|
* Pierre Sassoulas
|
||||||
|
* Ran Benita
|
||||||
|
* Reagan Lee
|
||||||
|
* Ronny Pfannschmidt
|
||||||
|
* Russell Martin
|
||||||
|
* clee2000
|
||||||
|
* donghui
|
||||||
|
* faph
|
||||||
|
* jakkdl
|
||||||
|
* mrbean-bremen
|
||||||
|
* robotherapist
|
||||||
|
* whysage
|
||||||
|
* woutdenolf
|
||||||
|
|
||||||
|
|
||||||
|
Happy testing,
|
||||||
|
The pytest Development Team
|
|
@ -0,0 +1,18 @@
|
||||||
|
pytest-8.1.1
|
||||||
|
=======================================
|
||||||
|
|
||||||
|
pytest 8.1.1 has just been released to PyPI.
|
||||||
|
|
||||||
|
This is a bug-fix release, being a drop-in replacement. To upgrade::
|
||||||
|
|
||||||
|
pip install --upgrade pytest
|
||||||
|
|
||||||
|
The full changelog is available at https://docs.pytest.org/en/stable/changelog.html.
|
||||||
|
|
||||||
|
Thanks to all of the contributors to this release:
|
||||||
|
|
||||||
|
* Ran Benita
|
||||||
|
|
||||||
|
|
||||||
|
Happy testing,
|
||||||
|
The pytest Development Team
|
|
@ -0,0 +1,18 @@
|
||||||
|
pytest-8.1.2
|
||||||
|
=======================================
|
||||||
|
|
||||||
|
pytest 8.1.2 has just been released to PyPI.
|
||||||
|
|
||||||
|
This is a bug-fix release, being a drop-in replacement. To upgrade::
|
||||||
|
|
||||||
|
pip install --upgrade pytest
|
||||||
|
|
||||||
|
The full changelog is available at https://docs.pytest.org/en/stable/changelog.html.
|
||||||
|
|
||||||
|
Thanks to all of the contributors to this release:
|
||||||
|
|
||||||
|
* Bruno Oliveira
|
||||||
|
|
||||||
|
|
||||||
|
Happy testing,
|
||||||
|
The pytest Development Team
|
|
@ -0,0 +1,43 @@
|
||||||
|
pytest-8.2.0
|
||||||
|
=======================================
|
||||||
|
|
||||||
|
The pytest team is proud to announce the 8.2.0 release!
|
||||||
|
|
||||||
|
This release contains new features, improvements, and bug fixes,
|
||||||
|
the full list of changes is available in the changelog:
|
||||||
|
|
||||||
|
https://docs.pytest.org/en/stable/changelog.html
|
||||||
|
|
||||||
|
For complete documentation, please visit:
|
||||||
|
|
||||||
|
https://docs.pytest.org/en/stable/
|
||||||
|
|
||||||
|
As usual, you can upgrade from PyPI via:
|
||||||
|
|
||||||
|
pip install -U pytest
|
||||||
|
|
||||||
|
Thanks to all of the contributors to this release:
|
||||||
|
|
||||||
|
* Bruno Oliveira
|
||||||
|
* Daniel Miller
|
||||||
|
* Florian Bruhin
|
||||||
|
* HolyMagician03-UMich
|
||||||
|
* John Litborn
|
||||||
|
* Levon Saldamli
|
||||||
|
* Linghao Zhang
|
||||||
|
* Manuel López-Ibáñez
|
||||||
|
* Pierre Sassoulas
|
||||||
|
* Ran Benita
|
||||||
|
* Ronny Pfannschmidt
|
||||||
|
* Sebastian Meyer
|
||||||
|
* Shekhar verma
|
||||||
|
* Tamir Duberstein
|
||||||
|
* Tobias Stoeckmann
|
||||||
|
* dj
|
||||||
|
* jakkdl
|
||||||
|
* poulami-sau
|
||||||
|
* tserg
|
||||||
|
|
||||||
|
|
||||||
|
Happy testing,
|
||||||
|
The pytest Development Team
|
|
@ -0,0 +1,19 @@
|
||||||
|
pytest-8.2.1
|
||||||
|
=======================================
|
||||||
|
|
||||||
|
pytest 8.2.1 has just been released to PyPI.
|
||||||
|
|
||||||
|
This is a bug-fix release, being a drop-in replacement. To upgrade::
|
||||||
|
|
||||||
|
pip install --upgrade pytest
|
||||||
|
|
||||||
|
The full changelog is available at https://docs.pytest.org/en/stable/changelog.html.
|
||||||
|
|
||||||
|
Thanks to all of the contributors to this release:
|
||||||
|
|
||||||
|
* Bruno Oliveira
|
||||||
|
* Ran Benita
|
||||||
|
|
||||||
|
|
||||||
|
Happy testing,
|
||||||
|
The pytest Development Team
|
|
@ -0,0 +1,19 @@
|
||||||
|
pytest-8.2.2
|
||||||
|
=======================================
|
||||||
|
|
||||||
|
pytest 8.2.2 has just been released to PyPI.
|
||||||
|
|
||||||
|
This is a bug-fix release, being a drop-in replacement. To upgrade::
|
||||||
|
|
||||||
|
pip install --upgrade pytest
|
||||||
|
|
||||||
|
The full changelog is available at https://docs.pytest.org/en/stable/changelog.html.
|
||||||
|
|
||||||
|
Thanks to all of the contributors to this release:
|
||||||
|
|
||||||
|
* Bruno Oliveira
|
||||||
|
* Ran Benita
|
||||||
|
|
||||||
|
|
||||||
|
Happy testing,
|
||||||
|
The pytest Development Team
|
|
@ -49,7 +49,7 @@ place on 20th, 21st, 22nd, 24th and 25th. On the 23rd we took a break
|
||||||
day for some hot hiking in the Black Forest.
|
day for some hot hiking in the Black Forest.
|
||||||
|
|
||||||
Sprint activity was organised heavily around pairing, with plenty of group
|
Sprint activity was organised heavily around pairing, with plenty of group
|
||||||
discusssions to take advantage of the high bandwidth, and lightning talks
|
discussions to take advantage of the high bandwidth, and lightning talks
|
||||||
as well.
|
as well.
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -5,30 +5,26 @@ Backwards Compatibility Policy
|
||||||
|
|
||||||
.. versionadded: 6.0
|
.. versionadded: 6.0
|
||||||
|
|
||||||
pytest is actively evolving and is a project that has been decades in the making,
|
Pytest is an actively evolving project that has been decades in the making.
|
||||||
we keep learning about new and better structures to express different details about testing.
|
We keep learning about new and better structures to express different details about testing.
|
||||||
|
|
||||||
While we implement those modifications we try to ensure an easy transition and don't want to impose unnecessary churn on our users and community/plugin authors.
|
While we implement those modifications, we try to ensure an easy transition and don't want to impose unnecessary churn on our users and community/plugin authors.
|
||||||
|
|
||||||
As of now, pytest considers multiple types of backward compatibility transitions:
|
As of now, pytest considers multiple types of backward compatibility transitions:
|
||||||
|
|
||||||
a) trivial: APIs which trivially translate to the new mechanism,
|
a) trivial: APIs that trivially translate to the new mechanism and do not cause problematic changes.
|
||||||
and do not cause problematic changes.
|
|
||||||
|
|
||||||
We try to support those indefinitely while encouraging users to switch to newer/better mechanisms through documentation.
|
We try to support those indefinitely while encouraging users to switch to newer or better mechanisms through documentation.
|
||||||
|
|
||||||
b) transitional: the old and new API don't conflict
|
b) transitional: the old and new APIs don't conflict, and we can help users transition by using warnings while supporting both for a prolonged period of time.
|
||||||
and we can help users transition by using warnings, while supporting both for a prolonged time.
|
|
||||||
|
|
||||||
We will only start the removal of deprecated functionality in major releases (e.g. if we deprecate something in 3.0 we will start to remove it in 4.0), and keep it around for at least two minor releases (e.g. if we deprecate something in 3.9 and 4.0 is the next release, we start to remove it in 5.0, not in 4.0).
|
We will only start the removal of deprecated functionality in major releases (e.g., if we deprecate something in 3.0, we will start to remove it in 4.0), and keep it around for at least two minor releases (e.g., if we deprecate something in 3.9 and 4.0 is the next release, we start to remove it in 5.0, not in 4.0).
|
||||||
|
|
||||||
A deprecated feature scheduled to be removed in major version X will use the warning class `PytestRemovedInXWarning` (a subclass of :class:`~pytest.PytestDeprecationwarning`).
|
A deprecated feature scheduled to be removed in major version X will use the warning class `PytestRemovedInXWarning` (a subclass of :class:`~pytest.PytestDeprecationWarning`).
|
||||||
|
|
||||||
When the deprecation expires (e.g. 4.0 is released), we won't remove the deprecated functionality immediately, but will use the standard warning filters to turn `PytestRemovedInXWarning` (e.g. `PytestRemovedIn4Warning`) into **errors** by default. This approach makes it explicit that removal is imminent, and still gives you time to turn the deprecated feature into a warning instead of an error so it can be dealt with in your own time. In the next minor release (e.g. 4.1), the feature will be effectively removed.
|
When the deprecation expires (e.g., 4.0 is released), we won't remove the deprecated functionality immediately but will use the standard warning filters to turn `PytestRemovedInXWarning` (e.g., `PytestRemovedIn4Warning`) into **errors** by default. This approach makes it explicit that removal is imminent and still gives you time to turn the deprecated feature into a warning instead of an error so it can be dealt with in your own time. In the next minor release (e.g., 4.1), the feature will be effectively removed.
|
||||||
|
|
||||||
|
c) True breakage should only be considered when a normal transition is unreasonably unsustainable and would offset important developments or features by years. In addition, they should be limited to APIs where the number of actual users is very small (for example, only impacting some plugins) and can be coordinated with the community in advance.
|
||||||
c) true breakage: should only be considered when normal transition is unreasonably unsustainable and would offset important development/features by years.
|
|
||||||
In addition, they should be limited to APIs where the number of actual users is very small (for example only impacting some plugins), and can be coordinated with the community in advance.
|
|
||||||
|
|
||||||
Examples for such upcoming changes:
|
Examples for such upcoming changes:
|
||||||
|
|
||||||
|
@ -62,11 +58,11 @@ Focus primary on smooth transition - stance (pre 6.0)
|
||||||
|
|
||||||
Keeping backwards compatibility has a very high priority in the pytest project. Although we have deprecated functionality over the years, most of it is still supported. All deprecations in pytest were done because simpler or more efficient ways of accomplishing the same tasks have emerged, making the old way of doing things unnecessary.
|
Keeping backwards compatibility has a very high priority in the pytest project. Although we have deprecated functionality over the years, most of it is still supported. All deprecations in pytest were done because simpler or more efficient ways of accomplishing the same tasks have emerged, making the old way of doing things unnecessary.
|
||||||
|
|
||||||
With the pytest 3.0 release we introduced a clear communication scheme for when we will actually remove the old busted joint and politely ask you to use the new hotness instead, while giving you enough time to adjust your tests or raise concerns if there are valid reasons to keep deprecated functionality around.
|
With the pytest 3.0 release, we introduced a clear communication scheme for when we will actually remove the old busted joint and politely ask you to use the new hotness instead, while giving you enough time to adjust your tests or raise concerns if there are valid reasons to keep deprecated functionality around.
|
||||||
|
|
||||||
To communicate changes we issue deprecation warnings using a custom warning hierarchy (see :ref:`internal-warnings`). These warnings may be suppressed using the standard means: ``-W`` command-line flag or ``filterwarnings`` ini options (see :ref:`warnings`), but we suggest to use these sparingly and temporarily, and heed the warnings when possible.
|
To communicate changes, we issue deprecation warnings using a custom warning hierarchy (see :ref:`internal-warnings`). These warnings may be suppressed using the standard means: ``-W`` command-line flag or ``filterwarnings`` ini options (see :ref:`warnings`), but we suggest to use these sparingly and temporarily, and heed the warnings when possible.
|
||||||
|
|
||||||
We will only start the removal of deprecated functionality in major releases (e.g. if we deprecate something in 3.0 we will start to remove it in 4.0), and keep it around for at least two minor releases (e.g. if we deprecate something in 3.9 and 4.0 is the next release, we start to remove it in 5.0, not in 4.0).
|
We will only start the removal of deprecated functionality in major releases (e.g. if we deprecate something in 3.0, we will start to remove it in 4.0), and keep it around for at least two minor releases (e.g. if we deprecate something in 3.9 and 4.0 is the next release, we start to remove it in 5.0, not in 4.0).
|
||||||
|
|
||||||
When the deprecation expires (e.g. 4.0 is released), we won't remove the deprecated functionality immediately, but will use the standard warning filters to turn them into **errors** by default. This approach makes it explicit that removal is imminent, and still gives you time to turn the deprecated feature into a warning instead of an error so it can be dealt with in your own time. In the next minor release (e.g. 4.1), the feature will be effectively removed.
|
When the deprecation expires (e.g. 4.0 is released), we won't remove the deprecated functionality immediately, but will use the standard warning filters to turn them into **errors** by default. This approach makes it explicit that removal is imminent, and still gives you time to turn the deprecated feature into a warning instead of an error so it can be dealt with in your own time. In the next minor release (e.g. 4.1), the feature will be effectively removed.
|
||||||
|
|
||||||
|
@ -87,8 +83,11 @@ Released pytest versions support all Python versions that are actively maintaine
|
||||||
============== ===================
|
============== ===================
|
||||||
pytest version min. Python version
|
pytest version min. Python version
|
||||||
============== ===================
|
============== ===================
|
||||||
|
8.0+ 3.8+
|
||||||
7.1+ 3.7+
|
7.1+ 3.7+
|
||||||
6.2 - 7.0 3.6+
|
6.2 - 7.0 3.6+
|
||||||
5.0 - 6.1 3.5+
|
5.0 - 6.1 3.5+
|
||||||
3.3 - 4.6 2.7, 3.4+
|
3.3 - 4.6 2.7, 3.4+
|
||||||
============== ===================
|
============== ===================
|
||||||
|
|
||||||
|
`Status of Python Versions <https://devguide.python.org/versions/>`__.
|
||||||
|
|
|
@ -18,11 +18,11 @@ For information about fixtures, see :ref:`fixtures`. To see a complete list of a
|
||||||
|
|
||||||
$ pytest --fixtures -v
|
$ pytest --fixtures -v
|
||||||
=========================== test session starts ============================
|
=========================== test session starts ============================
|
||||||
platform linux -- Python 3.x.y, pytest-7.x.y, pluggy-1.x.y -- $PYTHON_PREFIX/bin/python
|
platform linux -- Python 3.x.y, pytest-8.x.y, pluggy-1.x.y -- $PYTHON_PREFIX/bin/python
|
||||||
cachedir: .pytest_cache
|
cachedir: .pytest_cache
|
||||||
rootdir: /home/sweet/project
|
rootdir: /home/sweet/project
|
||||||
collected 0 items
|
collected 0 items
|
||||||
cache -- .../_pytest/cacheprovider.py:510
|
cache -- .../_pytest/cacheprovider.py:560
|
||||||
Return a cache object that can persist state between testing sessions.
|
Return a cache object that can persist state between testing sessions.
|
||||||
|
|
||||||
cache.get(key, default)
|
cache.get(key, default)
|
||||||
|
@ -33,39 +33,89 @@ For information about fixtures, see :ref:`fixtures`. To see a complete list of a
|
||||||
|
|
||||||
Values can be any object handled by the json stdlib module.
|
Values can be any object handled by the json stdlib module.
|
||||||
|
|
||||||
capsys -- .../_pytest/capture.py:878
|
capsysbinary -- .../_pytest/capture.py:1003
|
||||||
Enable text capturing of writes to ``sys.stdout`` and ``sys.stderr``.
|
|
||||||
|
|
||||||
The captured output is made available via ``capsys.readouterr()`` method
|
|
||||||
calls, which return a ``(out, err)`` namedtuple.
|
|
||||||
``out`` and ``err`` will be ``text`` objects.
|
|
||||||
|
|
||||||
capsysbinary -- .../_pytest/capture.py:895
|
|
||||||
Enable bytes capturing of writes to ``sys.stdout`` and ``sys.stderr``.
|
Enable bytes capturing of writes to ``sys.stdout`` and ``sys.stderr``.
|
||||||
|
|
||||||
The captured output is made available via ``capsysbinary.readouterr()``
|
The captured output is made available via ``capsysbinary.readouterr()``
|
||||||
method calls, which return a ``(out, err)`` namedtuple.
|
method calls, which return a ``(out, err)`` namedtuple.
|
||||||
``out`` and ``err`` will be ``bytes`` objects.
|
``out`` and ``err`` will be ``bytes`` objects.
|
||||||
|
|
||||||
capfd -- .../_pytest/capture.py:912
|
Returns an instance of :class:`CaptureFixture[bytes] <pytest.CaptureFixture>`.
|
||||||
|
|
||||||
|
Example:
|
||||||
|
.. code-block:: python
|
||||||
|
|
||||||
|
def test_output(capsysbinary):
|
||||||
|
print("hello")
|
||||||
|
captured = capsysbinary.readouterr()
|
||||||
|
assert captured.out == b"hello\n"
|
||||||
|
|
||||||
|
capfd -- .../_pytest/capture.py:1030
|
||||||
Enable text capturing of writes to file descriptors ``1`` and ``2``.
|
Enable text capturing of writes to file descriptors ``1`` and ``2``.
|
||||||
|
|
||||||
The captured output is made available via ``capfd.readouterr()`` method
|
The captured output is made available via ``capfd.readouterr()`` method
|
||||||
calls, which return a ``(out, err)`` namedtuple.
|
calls, which return a ``(out, err)`` namedtuple.
|
||||||
``out`` and ``err`` will be ``text`` objects.
|
``out`` and ``err`` will be ``text`` objects.
|
||||||
|
|
||||||
capfdbinary -- .../_pytest/capture.py:929
|
Returns an instance of :class:`CaptureFixture[str] <pytest.CaptureFixture>`.
|
||||||
|
|
||||||
|
Example:
|
||||||
|
.. code-block:: python
|
||||||
|
|
||||||
|
def test_system_echo(capfd):
|
||||||
|
os.system('echo "hello"')
|
||||||
|
captured = capfd.readouterr()
|
||||||
|
assert captured.out == "hello\n"
|
||||||
|
|
||||||
|
capfdbinary -- .../_pytest/capture.py:1057
|
||||||
Enable bytes capturing of writes to file descriptors ``1`` and ``2``.
|
Enable bytes capturing of writes to file descriptors ``1`` and ``2``.
|
||||||
|
|
||||||
The captured output is made available via ``capfd.readouterr()`` method
|
The captured output is made available via ``capfd.readouterr()`` method
|
||||||
calls, which return a ``(out, err)`` namedtuple.
|
calls, which return a ``(out, err)`` namedtuple.
|
||||||
``out`` and ``err`` will be ``byte`` objects.
|
``out`` and ``err`` will be ``byte`` objects.
|
||||||
|
|
||||||
doctest_namespace [session scope] -- .../_pytest/doctest.py:731
|
Returns an instance of :class:`CaptureFixture[bytes] <pytest.CaptureFixture>`.
|
||||||
|
|
||||||
|
Example:
|
||||||
|
.. code-block:: python
|
||||||
|
|
||||||
|
def test_system_echo(capfdbinary):
|
||||||
|
os.system('echo "hello"')
|
||||||
|
captured = capfdbinary.readouterr()
|
||||||
|
assert captured.out == b"hello\n"
|
||||||
|
|
||||||
|
capsys -- .../_pytest/capture.py:976
|
||||||
|
Enable text capturing of writes to ``sys.stdout`` and ``sys.stderr``.
|
||||||
|
|
||||||
|
The captured output is made available via ``capsys.readouterr()`` method
|
||||||
|
calls, which return a ``(out, err)`` namedtuple.
|
||||||
|
``out`` and ``err`` will be ``text`` objects.
|
||||||
|
|
||||||
|
Returns an instance of :class:`CaptureFixture[str] <pytest.CaptureFixture>`.
|
||||||
|
|
||||||
|
Example:
|
||||||
|
.. code-block:: python
|
||||||
|
|
||||||
|
def test_output(capsys):
|
||||||
|
print("hello")
|
||||||
|
captured = capsys.readouterr()
|
||||||
|
assert captured.out == "hello\n"
|
||||||
|
|
||||||
|
doctest_namespace [session scope] -- .../_pytest/doctest.py:738
|
||||||
Fixture that returns a :py:class:`dict` that will be injected into the
|
Fixture that returns a :py:class:`dict` that will be injected into the
|
||||||
namespace of doctests.
|
namespace of doctests.
|
||||||
|
|
||||||
pytestconfig [session scope] -- .../_pytest/fixtures.py:1334
|
Usually this fixture is used in conjunction with another ``autouse`` fixture:
|
||||||
|
|
||||||
|
.. code-block:: python
|
||||||
|
|
||||||
|
@pytest.fixture(autouse=True)
|
||||||
|
def add_np(doctest_namespace):
|
||||||
|
doctest_namespace["np"] = numpy
|
||||||
|
|
||||||
|
For more details: :ref:`doctest_namespace`.
|
||||||
|
|
||||||
|
pytestconfig [session scope] -- .../_pytest/fixtures.py:1338
|
||||||
Session-scoped fixture that returns the session's :class:`pytest.Config`
|
Session-scoped fixture that returns the session's :class:`pytest.Config`
|
||||||
object.
|
object.
|
||||||
|
|
||||||
|
@ -75,7 +125,7 @@ For information about fixtures, see :ref:`fixtures`. To see a complete list of a
|
||||||
if pytestconfig.getoption("verbose") > 0:
|
if pytestconfig.getoption("verbose") > 0:
|
||||||
...
|
...
|
||||||
|
|
||||||
record_property -- .../_pytest/junitxml.py:282
|
record_property -- .../_pytest/junitxml.py:284
|
||||||
Add extra properties to the calling test.
|
Add extra properties to the calling test.
|
||||||
|
|
||||||
User properties become part of the test report and are available to the
|
User properties become part of the test report and are available to the
|
||||||
|
@ -89,13 +139,13 @@ For information about fixtures, see :ref:`fixtures`. To see a complete list of a
|
||||||
def test_function(record_property):
|
def test_function(record_property):
|
||||||
record_property("example_key", 1)
|
record_property("example_key", 1)
|
||||||
|
|
||||||
record_xml_attribute -- .../_pytest/junitxml.py:305
|
record_xml_attribute -- .../_pytest/junitxml.py:307
|
||||||
Add extra xml attributes to the tag for the calling test.
|
Add extra xml attributes to the tag for the calling test.
|
||||||
|
|
||||||
The fixture is callable with ``name, value``. The value is
|
The fixture is callable with ``name, value``. The value is
|
||||||
automatically XML-encoded.
|
automatically XML-encoded.
|
||||||
|
|
||||||
record_testsuite_property [session scope] -- .../_pytest/junitxml.py:343
|
record_testsuite_property [session scope] -- .../_pytest/junitxml.py:345
|
||||||
Record a new ``<property>`` tag as child of the root ``<testsuite>``.
|
Record a new ``<property>`` tag as child of the root ``<testsuite>``.
|
||||||
|
|
||||||
This is suitable to writing global information regarding the entire test
|
This is suitable to writing global information regarding the entire test
|
||||||
|
@ -109,7 +159,10 @@ For information about fixtures, see :ref:`fixtures`. To see a complete list of a
|
||||||
record_testsuite_property("ARCH", "PPC")
|
record_testsuite_property("ARCH", "PPC")
|
||||||
record_testsuite_property("STORAGE_TYPE", "CEPH")
|
record_testsuite_property("STORAGE_TYPE", "CEPH")
|
||||||
|
|
||||||
``name`` must be a string, ``value`` will be converted to a string and properly xml-escaped.
|
:param name:
|
||||||
|
The property name.
|
||||||
|
:param value:
|
||||||
|
The property value. Will be converted to a string.
|
||||||
|
|
||||||
.. warning::
|
.. warning::
|
||||||
|
|
||||||
|
@ -117,24 +170,29 @@ For information about fixtures, see :ref:`fixtures`. To see a complete list of a
|
||||||
`pytest-xdist <https://github.com/pytest-dev/pytest-xdist>`__ plugin. See
|
`pytest-xdist <https://github.com/pytest-dev/pytest-xdist>`__ plugin. See
|
||||||
:issue:`7767` for details.
|
:issue:`7767` for details.
|
||||||
|
|
||||||
tmpdir_factory [session scope] -- .../_pytest/legacypath.py:295
|
tmpdir_factory [session scope] -- .../_pytest/legacypath.py:303
|
||||||
Return a :class:`pytest.TempdirFactory` instance for the test session.
|
Return a :class:`pytest.TempdirFactory` instance for the test session.
|
||||||
|
|
||||||
tmpdir -- .../_pytest/legacypath.py:302
|
tmpdir -- .../_pytest/legacypath.py:310
|
||||||
Return a temporary directory path object which is unique to each test
|
Return a temporary directory path object which is unique to each test
|
||||||
function invocation, created as a sub directory of the base temporary
|
function invocation, created as a sub directory of the base temporary
|
||||||
directory.
|
directory.
|
||||||
|
|
||||||
By default, a new base temporary directory is created each test session,
|
By default, a new base temporary directory is created each test session,
|
||||||
and old bases are removed after 3 sessions, to aid in debugging. If
|
and old bases are removed after 3 sessions, to aid in debugging. If
|
||||||
``--basetemp`` is used then it is cleared each session. See :ref:`base
|
``--basetemp`` is used then it is cleared each session. See
|
||||||
temporary directory`.
|
:ref:`temporary directory location and retention`.
|
||||||
|
|
||||||
The returned object is a `legacy_path`_ object.
|
The returned object is a `legacy_path`_ object.
|
||||||
|
|
||||||
|
.. note::
|
||||||
|
These days, it is preferred to use ``tmp_path``.
|
||||||
|
|
||||||
|
:ref:`About the tmpdir and tmpdir_factory fixtures<tmpdir and tmpdir_factory>`.
|
||||||
|
|
||||||
.. _legacy_path: https://py.readthedocs.io/en/latest/path.html
|
.. _legacy_path: https://py.readthedocs.io/en/latest/path.html
|
||||||
|
|
||||||
caplog -- .../_pytest/logging.py:487
|
caplog -- .../_pytest/logging.py:602
|
||||||
Access and control log capturing.
|
Access and control log capturing.
|
||||||
|
|
||||||
Captured logs are available through the following properties/methods::
|
Captured logs are available through the following properties/methods::
|
||||||
|
@ -145,43 +203,50 @@ For information about fixtures, see :ref:`fixtures`. To see a complete list of a
|
||||||
* caplog.record_tuples -> list of (logger_name, level, message) tuples
|
* caplog.record_tuples -> list of (logger_name, level, message) tuples
|
||||||
* caplog.clear() -> clear captured records and formatted log output string
|
* caplog.clear() -> clear captured records and formatted log output string
|
||||||
|
|
||||||
monkeypatch -- .../_pytest/monkeypatch.py:29
|
monkeypatch -- .../_pytest/monkeypatch.py:33
|
||||||
A convenient fixture for monkey-patching.
|
A convenient fixture for monkey-patching.
|
||||||
|
|
||||||
The fixture provides these methods to modify objects, dictionaries or
|
The fixture provides these methods to modify objects, dictionaries, or
|
||||||
os.environ::
|
:data:`os.environ`:
|
||||||
|
|
||||||
monkeypatch.setattr(obj, name, value, raising=True)
|
* :meth:`monkeypatch.setattr(obj, name, value, raising=True) <pytest.MonkeyPatch.setattr>`
|
||||||
monkeypatch.delattr(obj, name, raising=True)
|
* :meth:`monkeypatch.delattr(obj, name, raising=True) <pytest.MonkeyPatch.delattr>`
|
||||||
monkeypatch.setitem(mapping, name, value)
|
* :meth:`monkeypatch.setitem(mapping, name, value) <pytest.MonkeyPatch.setitem>`
|
||||||
monkeypatch.delitem(obj, name, raising=True)
|
* :meth:`monkeypatch.delitem(obj, name, raising=True) <pytest.MonkeyPatch.delitem>`
|
||||||
monkeypatch.setenv(name, value, prepend=None)
|
* :meth:`monkeypatch.setenv(name, value, prepend=None) <pytest.MonkeyPatch.setenv>`
|
||||||
monkeypatch.delenv(name, raising=True)
|
* :meth:`monkeypatch.delenv(name, raising=True) <pytest.MonkeyPatch.delenv>`
|
||||||
monkeypatch.syspath_prepend(path)
|
* :meth:`monkeypatch.syspath_prepend(path) <pytest.MonkeyPatch.syspath_prepend>`
|
||||||
monkeypatch.chdir(path)
|
* :meth:`monkeypatch.chdir(path) <pytest.MonkeyPatch.chdir>`
|
||||||
|
* :meth:`monkeypatch.context() <pytest.MonkeyPatch.context>`
|
||||||
|
|
||||||
All modifications will be undone after the requesting test function or
|
All modifications will be undone after the requesting test function or
|
||||||
fixture has finished. The ``raising`` parameter determines if a KeyError
|
fixture has finished. The ``raising`` parameter determines if a :class:`KeyError`
|
||||||
or AttributeError will be raised if the set/deletion operation has no target.
|
or :class:`AttributeError` will be raised if the set/deletion operation does not have the
|
||||||
|
specified target.
|
||||||
|
|
||||||
recwarn -- .../_pytest/recwarn.py:29
|
To undo modifications done by the fixture in a contained scope,
|
||||||
|
use :meth:`context() <pytest.MonkeyPatch.context>`.
|
||||||
|
|
||||||
|
recwarn -- .../_pytest/recwarn.py:32
|
||||||
Return a :class:`WarningsRecorder` instance that records all warnings emitted by test functions.
|
Return a :class:`WarningsRecorder` instance that records all warnings emitted by test functions.
|
||||||
|
|
||||||
See https://docs.python.org/library/how-to/capture-warnings.html for information
|
See https://docs.pytest.org/en/latest/how-to/capture-warnings.html for information
|
||||||
on warning categories.
|
on warning categories.
|
||||||
|
|
||||||
tmp_path_factory [session scope] -- .../_pytest/tmpdir.py:184
|
tmp_path_factory [session scope] -- .../_pytest/tmpdir.py:242
|
||||||
Return a :class:`pytest.TempPathFactory` instance for the test session.
|
Return a :class:`pytest.TempPathFactory` instance for the test session.
|
||||||
|
|
||||||
tmp_path -- .../_pytest/tmpdir.py:199
|
tmp_path -- .../_pytest/tmpdir.py:257
|
||||||
Return a temporary directory path object which is unique to each test
|
Return a temporary directory path object which is unique to each test
|
||||||
function invocation, created as a sub directory of the base temporary
|
function invocation, created as a sub directory of the base temporary
|
||||||
directory.
|
directory.
|
||||||
|
|
||||||
By default, a new base temporary directory is created each test session,
|
By default, a new base temporary directory is created each test session,
|
||||||
and old bases are removed after 3 sessions, to aid in debugging. If
|
and old bases are removed after 3 sessions, to aid in debugging.
|
||||||
``--basetemp`` is used then it is cleared each session. See :ref:`base
|
This behavior can be configured with :confval:`tmp_path_retention_count` and
|
||||||
temporary directory`.
|
:confval:`tmp_path_retention_policy`.
|
||||||
|
If ``--basetemp`` is used then it is cleared each session. See
|
||||||
|
:ref:`temporary directory location and retention`.
|
||||||
|
|
||||||
The returned object is a :class:`pathlib.Path` object.
|
The returned object is a :class:`pathlib.Path` object.
|
||||||
|
|
||||||
|
|
1396
doc/en/changelog.rst
1396
doc/en/changelog.rst
File diff suppressed because it is too large
Load Diff
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue