Tool News

PyTest 9.0.3 Released — What’s New for QA Engineers

PyTest 9.0.3 released — what's new for QA engineers and SDETs. Fixes, new features and what the latest version means for Python test automation in 2026.

4 min read
PyTest 9.0.3 Released — What’s New for QA Engineers
Advertisement
What You Will Learn
What's New in PyTest 9.0.3
Official Release Notes
How to Upgrade
🚀 PyTest 9.0.3 Released — What’s New for QA Engineers

What’s New in PyTest 9.0.3 PyTest version 9.0.3 was released on April 07, 2026. Here is a summary of what changed and what it means for QA engineers…

What’s New in PyTest 9.0.3

PyTest version 9.0.3 was released on April 07, 2026.
Here is a summary of what changed and what it means for QA engineers and SDETs.

Official Release Notes

# pytest 9.0.3 (2026-04-07)

## Bug fixes

- [\#12444](https://github.com/pytest-dev/pytest/issues/12444): Fixed `pytest.approx` which now correctly takes into account `~collections.abc.Mapping` keys order to compare them.

- [\#13634](https://github.com/pytest-dev/pytest/issues/13634): Blocking a `conftest.py` file using the `-p no:` option is now explicitly disallowed.

  Previously this resulted in an internal assertion failure during plugin loading.

  Pytest now raises a clear `UsageError` explaining that conftest files are not plugins and cannot be disabled via `-p`.

- [\#13734](https://github.com/pytest-dev/pytest/issues/13734): Fixed crash when a test raises an exceptiongroup with `__tracebackhide__ = True`.

- [\#14195](https://github.com/pytest-dev/pytest/issues/14195): Fixed an issue where non-string messages passed to unittest.TestCase.subTest() were not printed.

- [\#14343](https://github.com/pytest-dev/pytest/issues/14343): Fixed use of insecure temporary directory (CVE-2025-71176).

## Improved documentation

- [\#13388](https://github.com/pytest-dev/pytest/issues/13388): Clarified documentation for `-p` vs `PYTEST_PLUGINS` plugin loading and fixed an incorrect `-p` example.
- [\#13731](https://github.com/pytest-dev/pytest/issues/13731): Clarified that capture fixtures (e.g. `capsys` and `capfd`) take precedence over the `-s` / `--capture=no` command-line options in `Accessing captured output from a test function <accessing-capt...

How to Upgrade

# For Python tools
pip install pytest --upgrade

# For Node.js tools  
npm install pytest@latest

Full release notes: https://github.com/pytest-dev/pytest/releases/tag/9.0.3 👇


🚀 PyTest 9.0.3 Released — What’s New for QA Engineers

The latest release of pytest 9.0.3 is not about flashy features — it’s about something more critical:

⚙️ Accuracy, stability, and developer clarity

Let’s break down what actually matters 👇


🔑 Key Improvement 1 — More Accurate pytest.approx Comparisons

What changed:
pytest.approx now correctly respects mapping (dictionary) key order during comparisons. (GitHub)

Why this was needed:
Previously, comparisons involving dictionaries could behave inconsistently — especially in edge cases where order mattered in validation logic.

My expert take:
👉 This fix looks small… but it’s huge for data-heavy testing.

  • API response validation
  • JSON contract testing
  • Financial/data-sensitive assertions

How it helps QA engineers:

  • More trustworthy assertions
  • Reduced false positives/negatives
  • Better confidence in automated validations

🔑 Key Improvement 2 — Clearer Error Handling for Plugin Misuse

What changed:
Trying to disable conftest.py using -p no: now throws a clear UsageError instead of crashing internally. (GitHub)

Why this was needed:
Earlier behavior caused confusing internal assertion failures — hard to debug, especially for teams using custom plugins or shared configs.

My expert take:
👉 This is a developer experience win.

  • Turns silent failure → explicit guidance
  • Prevents misuse of pytest architecture

How it helps QA engineers:

  • Faster debugging
  • Cleaner CI/CD logs
  • Less time wasted on “WTF is this error?” moments

⚠️ Any Breaking Changes — What You Should Know

Good news:
👉 No major breaking changes in 9.0.3 (it’s a patch release focused on bug fixes).

But… important nuance:

  • PyTest 9.x itself is a major version line
  • Some older plugins or legacy patterns may already be incompatible

My recommendation:

  • If you’re already on 9.x → ✅ safe to upgrade immediately
  • If you’re on older versions (7.x/8.x) → ⚠️ test plugin compatibility first

🔄 Migration Notes (Real-World Advice)

Before upgrading:

  • ✅ Validate your plugins (pytest-xdist, pytest-asyncio, etc.)
  • ✅ Run tests in CI with --maxfail=1 to catch early issues
  • ✅ Check custom conftest.py logic (now stricter behavior)

👉 Treat upgrades like pipeline changes, not just dependency bumps


🧠 Final Verdict — Should You Upgrade?

✔ YES — Upgrade if:

  • You rely on data comparisons (APIs, JSON, analytics)
  • You want cleaner error handling
  • You’re already on PyTest 9.x

⏳ WAIT if:

  • Your framework depends on legacy plugins
  • You haven’t validated compatibility yet

💡 Blog Punchline (Use This 🔥)

“PyTest 9.0.3 doesn’t add features — it removes doubt.
And in testing, confidence is the real feature.


This article is part of QA Pulse by SK — your weekly signal for QA, Test Automation and AI in Software Engineering. Subscribe free.

More Relevant Articles

Frequently Asked Questions

What is the primary focus of the PyTest 9.0.3 release for QA engineers?
The PyTest 9.0.3 release focuses on crucial aspects such as accuracy, stability, and developer clarity. It is not about flashy new features but rather about making the testing framework more robust and reliable.
How does PyTest 9.0.3 improve test comparisons, especially for complex data?
PyTest 9.0.3 improves comparisons by fixing `pytest.approx` to correctly consider mapping (dictionary) key order. This enhancement is crucial for data-heavy testing, API response validation, and JSON contract testing, leading to more trustworthy assertions for QA engineers.
What significant bug fixes are included in PyTest 9.0.3 that benefit QA engineers?
PyTest 9.0.3 includes fixes such as ensuring non-string messages passed to `unittest.TestCase.subTest()` are now printed. Another important fix prevents crashes when a test raises an exceptiongroup with `__tracebackhide__ = True`, improving overall test stability.
Advertisement
Found this helpful? Clap to let Shahnawaz know — you can clap up to 50 times.