nvda-addon-testkit
Project board — live roadmap and status for this repo's issues.
End-to-end testing for NVDA add-ons, against a real NVDA, in CI.
Your add-on's logic can be unit-tested with stubs. What cannot be stubbed is whether it installs, registers, and behaves inside NVDA itself. This kit provisions a disposable portable NVDA, installs your add-on into it, and lets pytest drive it.
def test_my_addon_announces_itself(nvda, addon_under_test):
before = nvda.speech.index()
nvda.keys.press("NVDA+shift+m")
assert "my add-on is ready" in nvda.speech.wait_for("ready", timeout=10, since=before).text
nvda.log.assert_no_errors()
Install
pip install nvda-addon-testkit
Configure
[tool.nvda-testkit]
addon-bundle = "dist/my-addon-*.nvda-addon"
nvda-channel = "stable"
Run in GitHub Actions
jobs:
e2e:
runs-on: windows-2025
steps:
- uses: actions/checkout@v5
- uses: zirekhq/nvda-addon-testkit@v1
with:
nvda-channel: stable
- run: pytest tests_e2e/ -v
The action is OS-agnostic — pick whichever Windows runner matches what
your users run. This repository's e2e test suite runs on both windows-2025
and windows-2022 (the latter for Windows 10 22H2, including builds
still on Extended Security Updates).
What you get
| Fixture | What it gives you |
|---|---|
nvda |
a connected client, reset between tests |
addon_bundle |
the path to your built .nvda-addon |
addon_under_test |
that bundle, installed and enabled, NVDA restarted |
| Namespace | Use it for |
|---|---|
nvda.speech |
what NVDA asked to say, and waiting for it |
nvda.braille |
the raw text sent to the braille display |
nvda.keys |
sending gestures through NVDA's own input pipeline |
nvda.config |
reading and writing NVDA's configuration |
nvda.log |
structured log records, and assert_no_errors() |
nvda.addons |
two-phase install, remove, and state |
Requirements
Windows to run the tests. NVDA is downloaded automatically — you do not need one installed, and nothing touches an NVDA you already have.
Tests run serially: only one NVDA can own a desktop session, so pytest-xdist with more than one worker is refused rather than silently producing nonsense.
Developing the kit itself
The host side is fully testable on Linux against a scriptable double:
pip install -e ".[dev]"
python tools/build_spy.py
pytest # host and spy unit tests, any platform
pytest tests_e2e/ -v # real NVDA, Windows only
nvda-testkit doctor # check this machine
Licence
GPL-2.0-or-later.
💝 Support This Project
If this repository saves you time and effort, please consider supporting it!
- ⭐ Star on GitHub
- 🐦 Share on Twitter
- 💖 More ways to support — Open Collective coming soon
Metadata
Release files for nvda-addon-testkit 0.1.3
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| nvda_addon_testkit-0.1.3.tar.gz | 169.4 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| nvda_addon_testkit-0.1.3-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 215.4 kB
Release files / nvda_addon_testkit-0.1.3.tar.gz
| Download URL | nvda_addon_testkit-0.1.3.tar.gz |
|---|---|
| Size | 169.4 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
475b85e7b3be94d7fc790ae7baba24747064d444dc32afb34e9498fdc92581fd
|
|
BLAKE2b-256 checksum How to use checksums |
ed827b87d41ab877d52a326367617fc6b9e970220981f32e2b98b2eb6f846a1c
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Release files / nvda_addon_testkit-0.1.3-py3-none-any.whl
| Download URL | nvda_addon_testkit-0.1.3-py3-none-any.whl |
|---|---|
| Size | 45.9 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
c7a251fc3f0e6f71c70258957442dc5e7609a96a188f3a7e6b2e2cbea3597241
|
|
BLAKE2b-256 checksum How to use checksums |
51f2cb284166035c0ac6f7ffc3e3f5adc5db6b9fa3143c80ece264438612e6fe
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|