Pytest plugin helping to test packages implementing ApiVer.
Assuming your package exposes v1
, v2
, ... ApiVer interfaces, i.e. has structure like this:
my_package/
__init__.py
v1/
__init__.py
...
_v3/
__init__.py
You can configure to run apiver-aware tests against it using pyproject.toml
:
[tool.pytest.ini_options]
target_package_name = "my_package"
Then you can write tests like this:
@pytest.mark.apiver(from_ver=2, to_ver=3)
def test_run_for_apiver_ver_2_3(apiver_module):
assert apiver_module.func()
Which will run test against my_package.v2.func()
and my_package.v3.func()
respectively.
For non-flat package structure, you can use auto-magical getter doing imports of submodules built into apiver_module
fixture, e.g.:
@pytest.mark.apiver(from_ver=2, to_ver=2)
def test_func__v2(apiver_module):
assert apiver_module.utils.func() # equivalent to my_package.v2.utils.func()
This package uses Semantic Versioning.
TL;DR you are safe to use compatible release version specifier ~=MAJOR.MINOR
in your pyproject.toml
or requirements.txt
.
Internal packages, i.e. prefixed by pytest_apiver._
do not share these guarantees and may change in a backwards-incompatible way at any time even in patch releases.
Pre-requisites:
Ideally, you should run nox -t format lint
before every commit to ensure that the code is properly formatted and linted.
Before submitting a PR, make sure that tests pass as well, you can do so using:
nox -t check # equivalent to `nox -t format lint test`
If you wish to install dependencies into .venv
so your IDE can pick them up, you can do so using:
pdm install --dev
Run nox -s make_release -- X.Y.Z
where X.Y.Z
is the version you're releasing and follow the printed instructions.