Skip to main content

pytest-kind-ng

Tests PyPI PyPI - Python Version License CalVer

A maintained fork of pytest-kind

Test your Python Kubernetes app/operator end-to-end with kind and pytest.

pytest-kind-ng is a plugin for pytest which provides the kind_cluster fixture. The fixture will install kind 0.17.0, create a Kubernetes 1.25 cluster, and provide convenience functionality such as port forwarding.

Usage

Install pytest-kind-ng as a development dependency with uv, e.g.:

uv add --dev pytest-kind-ng

Write your pytest functions and use the provided kind_cluster fixture, e.g.:

def test_kubernetes_version(kind_cluster):
    assert kind_cluster.api.version == ('1', '25')

To load your custom Docker image and apply deployment manifests:

import requests
from pykube import Pod

def test_myapp(kind_cluster):
    kind_cluster.load_docker_image("myapp")
    kind_cluster.kubectl("apply", "-f", "deployment.yaml")
    kind_cluster.kubectl("rollout", "status", "deployment/myapp")

    # using Pykube to query pods
    for pod in Pod.objects(kind_cluster.api).filter(selector="app=myapp"):
        assert "Sucessfully started" in pod.logs()

    with kind_cluster.port_forward("service/myapp", 80) as port:
        r = requests.get(f"http://localhost:{port}/hello/world")
        r.raise_for_status()
        assert r.text == "Hello world!"

See the examples directory for sample projects and also check out kube-web-view which uses pytest-kind for its e2e tests.

KindCluster object

The kind_cluster fixture is an instance of the KindCluster class with the following methods:

  • load_docker_image(docker_image): load the specified Docker image into the kind cluster
  • kubectl(*args): run the kubectl binary against the cluster with the specified arguments. Returns the process output as string.
  • port_forward(service_or_pod_name, remote_port, *args): run "kubectl port-forward" for the given service/pod and return the (random) local port. To be used as context manager ("with" statement). Pass the namespace as additional args to kubectl via "-n", "mynamespace".

KindCluster has the following attributes:

  • name: the kind cluster name
  • kubeconfig_path: the path to the Kubeconfig file to access the cluster
  • kind_path: path to the kind binary
  • kubectl_path: path to the kubectl binary
  • api: pykube HTTPClient instance to access the cluster from Python

You can also use KindCluster directly without pytest:

from pytest_kind import KindCluster

cluster = KindCluster("myclustername")
cluster.create()
cluster.kubectl("apply", "-f", "..")
# ...
cluster.delete()

Pytest Options

The kind cluster name can be set via the --cluster-name CLI option.

The kind cluster is deleted after each pytest session, you can keep the cluster by passing --keep-cluster to pytest.

You can use the PYTEST_ADDOPTS environment variable to pass these options through the Taskipy test task:

# for test debugging: don't delete the kind cluster
PYTEST_ADDOPTS=--keep-cluster uv run task test

Releasing

Releases use CalVer in the form YY.MM.MICRO and are published from Git tags by the release workflow. The package version is derived from the tag by hatch-vcs; it is not stored in pyproject.toml.

From an up-to-date main branch, create an annotated tag with a leading v, then push the tags directly to the canonical repository:

git tag -a vYY.MM.MICRO -m "Release vYY.MM.MICRO"
git push https://github.com/kr8s-org/pytest-kind-ng.git --tags

For example, the first release in July 2026 would use v26.7.0. Pushing the tag starts the trusted-publishing workflow, which builds the package and publishes it to PyPI without a long-lived API token.

Notes

  • The kind_cluster fixture is session-scoped, i.e. the same cluster will be used across all test modules/functions.
  • The kind and kubectl binaries will be downloaded once to the local directory ./.pytest-kind/{cluster-name}/. You can use them to interact with the cluster (e.g. when --keep-cluster is used).
  • Some cluster pods might not be ready immediately (e.g. kind's CoreDNS take a moment), add wait/poll functionality as required to make your tests predictable.

Release files for pytest-kind-ng 26.7.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for pytest-kind-ng 26.7.0
File Size Uploaded
pytest_kind_ng-26.7.0.tar.gz 115.4 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for pytest-kind-ng 26.7.0
File Interpreter ABI Platform
pytest_kind_ng-26.7.0-py3-none-any.whl Python 3 none any Details

Total release size: 134.8 kB

Release files / pytest_kind_ng-26.7.0.tar.gz

Download URL pytest_kind_ng-26.7.0.tar.gz
Size 115.4 kB
Tags Source
SHA-256 checksum
How to use checksums
c2be64459093df352338d64b76f438477a88c09f08626bbe3aa1dcaf1fb553d6
BLAKE2b-256 checksum
How to use checksums
3b5509f01e65a93010e748f1df1c2c7c7fe49ba85bfdde25e32dee324c72d408
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Jul 23, 2026.

Transparency log

Release files / pytest_kind_ng-26.7.0-py3-none-any.whl

Download URL pytest_kind_ng-26.7.0-py3-none-any.whl
Size 19.4 kB
Tags Python 3
SHA-256 checksum
How to use checksums
528849db2f3875606114e38e23e9763d3d4ddc5273624540b7260517b134c980
BLAKE2b-256 checksum
How to use checksums
cc834bad86eed61e9ed9d5c171ec14a90d222213cfbd183aa7b5f3506c8f9cd8
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Jul 23, 2026.

Transparency log

Release history Release notifications | RSS feed

This release

26.7.0 This release

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page