Skip to content

Conversation

CoretexShadow
Copy link
Contributor

Summary
This PR improves the documentation and tests around the special discovery rules of pytest_generate_tests. Unlike most hooks (which must live in conftest.py or plugins), pytest_generate_tests is also discovered when defined directly inside test modules or classes. This PR clarifies that behavior in the docs and adds a minimal self-test that shows the difference.

Motivation
New users often get confused about where hooks should be placed. By explicitly pointing out that pytest_generate_tests is the only exception to the “hooks go in conftest/plugins” rule, we reduce misunderstandings and make the docs easier to follow.

Changes

  • Updated doc/en/how-to/writing_hook_functions.rst with a clear note on the exception for pytest_generate_tests.
  • Updated doc/en/how-to/parametrize.rst with a short reminder in the relevant section.
  • Added testing/test_pytest_generate_tests_discovery.py, which demonstrates that pytest_generate_tests inside a test module works, while pytest_terminal_summary does not.

Tests

  • Confirms pytest_generate_tests in a test module parametrizes correctly.
  • Confirms another hook (pytest_terminal_summary) inside a test module is ignored.

Docs
Only minimal “Note:” additions with cross-links, written for clarity and easy review.

Notes
No behavior changes — purely docs and tests. Pre-commit, mypy, and docs build all pass locally.

Related Issue
Closes #13577

- Document that pytest_generate_tests is also discovered in test modules/classes.
- Clarify other hooks must live in conftest.py or plugins; add cross-links.
- Add a tiny pytester test demonstrating the behavior.
- Pure docs/tests; no behavior change.
@psf-chronographer psf-chronographer bot added the bot:chronographer:provided (automation) changelog entry is part of PR label Aug 28, 2025
Copy link
Member

@RonnyPfannschmidt RonnyPfannschmidt left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Nice enhancement, thanks

Copy link
Member

@The-Compiler The-Compiler left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The doc improvements make a lot of sense, but not a fan of having an entire new test file just for a single test.

Also the test seems redundant to me: That pytest_generate_tests can be invoked on a class is already covered in testing/python/metafunc.py in test_generate_tests_in_class, and that other hooks don't work there is somewhat covered by test_runtest_in_module_ordering in testing/test_runner.py (see the xfail and the comment above).

Thus I'd propose to delete the new test file and only keep the doc adjustments.

@CoretexShadow
Copy link
Contributor Author

CoretexShadow commented Aug 29, 2025

Nice enhancement, thanks

Thanks 🙏

Just FYI: after separate feedback from The-Compiler I dropped the extra test and kept this as a docs-only PR.
If you’d like a different placement/wording for the note, I’m happy to tweak.

@CoretexShadow
Copy link
Contributor Author

The doc improvements make a lot of sense, but not a fan of having an entire new test file just for a single test.

Also the test seems redundant to me: That pytest_generate_tests can be invoked on a class is already covered in testing/python/metafunc.py in test_generate_tests_in_class, and that other hooks don't work there is somewhat covered by test_runtest_in_module_ordering in testing/test_runner.py (see the xfail and the comment above).

Thus I'd propose to delete the new test file and only keep the doc adjustments.

Thanks for the detailed review — agreed.

I verified the existing coverage you pointed to:

  • class case: testing/python/metafunc.py::test_generate_tests_in_class
  • “other hooks don’t run from test modules”: testing/test_runner.py::test_runtest_in_module_ordering (saw the xfail + explanatory comment)

I’ve dropped the redundant test file:

  • removed testing/test_pytest_generate_tests_discovery.py

and kept this PR docs-only to clarify the special discovery rules of pytest_generate_tests:

  • doc/en/how-to/writing_hook_functions.rst (short note + cross-links)
  • doc/en/how-to/parametrize.rst (concise reminder near the basic example)

Local checks re-run and passing (pre-commit / pytest / docs build).
Happy to tweak wording/placement if you prefer.

@The-Compiler
Copy link
Member

Thanks!

@The-Compiler The-Compiler merged commit 12bde8a into pytest-dev:main Aug 29, 2025
36 checks passed
@The-Compiler The-Compiler added the backport 8.4.x apply to PRs at any point; backports the changes to the 8.4.x branch label Aug 29, 2025
Copy link

patchback bot commented Aug 29, 2025

Backport to 8.4.x: 💚 backport PR created

✅ Backport PR branch: patchback/backports/8.4.x/12bde8af6dda3e7104f840209c199d151258b462/pr-13685

Backported as #13686

🤖 @patchback
I'm built with octomachinery and
my source is open — https://github.com/sanitizers/patchback-github-app.

patchback bot pushed a commit that referenced this pull request Aug 29, 2025
…-tests

Docs+Tests: clarify special discovery of pytest_generate_tests

(cherry picked from commit 12bde8a)
The-Compiler added a commit that referenced this pull request Aug 29, 2025
…2bde8af6dda3e7104f840209c199d151258b462/pr-13685

[PR #13685/12bde8af backport][8.4.x] Docs+Tests: clarify special discovery of pytest_generate_tests
@glasser
Copy link

glasser commented Aug 30, 2025

Thanks!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
backport 8.4.x apply to PRs at any point; backports the changes to the 8.4.x branch bot:chronographer:provided (automation) changelog entry is part of PR
Projects
None yet
Development

Successfully merging this pull request may close these issues.

Docs don't explain that pytest_generate_tests is discovered differently than every other hook
4 participants