This release is a pre-release and may not be stable for production use.
aiSSEMBLE Inference Common Test Utilities
Reusable MLServer test utilities for aiSSEMBLE Inference modules and examples.
Overview
This module provides consolidated MLServer lifecycle management utilities to eliminate code duplication across test suites. It offers two primary usage patterns:
- Simple mode: For examples with static model directories
- Dynamic mode: For module tests with temporary config generation
Installation
# As a test dependency in pyproject.toml
[dependency-groups]
test = [
"aissemble-inference-common-test",
]
[tool.uv.sources]
aissemble-inference-common-test = { path = "../aissemble-inference-common-test", editable = true }
Usage
Simple Mode (Examples)
For tests that use pre-configured model directories:
# tests/features/environment.py
from pathlib import Path
from aissemble_inference_common_test.behave_helpers import (
setup_mlserver_simple,
teardown_mlserver,
)
def before_all(context):
example_dir = Path(__file__).parent.parent.parent
models_dir = example_dir / "models"
setup_mlserver_simple(context, models_dir=models_dir, port=8080)
context.mlserver_fixture.start()
def after_all(context):
teardown_mlserver(context)
Dynamic Mode (Module Tests)
For tests that generate model configurations dynamically:
# tests/features/environment.py
from aissemble_inference_common_test.behave_helpers import (
setup_mlserver_dynamic,
teardown_mlserver,
start_mlserver_with_model,
)
def before_all(context):
setup_mlserver_dynamic(context)
def after_scenario(context, scenario):
if hasattr(context, "mlserver_fixture") and context.mlserver_fixture.process:
context.mlserver_fixture.stop()
def after_all(context):
teardown_mlserver(context)
# In your step definitions:
start_mlserver_with_model(
context,
model_name="yolo",
runtime="aissemble_inference_yolo.YOLORuntime",
model="yolov8n.pt"
)
Features
- Process Management: Robust MLServer subprocess handling with zombie process detection
- Health Checking: Automatic polling of
/v2/health/readyendpoint - Graceful Shutdown: Terminate with timeout, then kill if needed (with safety timeouts)
- Dynamic Port Allocation: Automatic free port discovery
- Config Generation: JSON settings and model-settings creation
- Context Manager Support: Automatic cleanup with Python
withstatement - Error Logging: Detailed warnings for cleanup and shutdown failures
- Backward Compatible: Drop-in replacement for existing test code
API Reference
MLServerFixture
Main fixture class for MLServer lifecycle management.
Basic Usage
from aissemble_inference_common_test import MLServerFixture
# Simple mode
fixture = MLServerFixture.simple(port=8080, models_dir=Path("models"))
fixture.start()
# Dynamic mode
fixture = MLServerFixture.dynamic()
fixture.start_with_model(
model_name="yolo",
runtime="aissemble_inference_yolo.YOLORuntime",
model="yolov8n.pt"
)
# Cleanup
fixture.stop()
fixture.cleanup()
Context Manager Usage (Recommended)
For automatic cleanup even when tests fail:
from aissemble_inference_common_test import MLServerFixture
from pathlib import Path
# Simple mode with context manager
with MLServerFixture.simple(port=8080, models_dir=Path("models")) as fixture:
fixture.start()
# Run tests...
# Automatic cleanup on exit
# Dynamic mode with context manager
with MLServerFixture.dynamic() as fixture:
fixture.start_with_model(
model_name="yolo",
runtime="aissemble_inference_yolo.YOLORuntime",
model="yolov8n.pt"
)
# Run tests...
# Automatic stop() and cleanup() on exit, even if exception occurs
Behave Helpers
setup_mlserver_simple(context, models_dir, port)- Initialize simple fixturesetup_mlserver_dynamic(context)- Initialize dynamic fixturestart_mlserver_with_model(context, model_name, runtime, **params)- Start with configteardown_mlserver(context)- Cleanup and shutdown
License
Apache 2.0
Metadata
Release files for aissemble-inference-common-test 1.5.1.dev1770639896
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | Actions |
|---|---|---|---|---|
| aissemble_inference_common_test-1.5.1.dev1770639896.tar.gz | 11.4 kB | Without provenance | Details for aissemble_inference_common_test-1.5.1.dev1770639896.tar.gz |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Actions Reset |
|---|---|---|---|---|
| aissemble_inference_common_test-1.5.1.dev1770639896-py3-none-any.whl | Python 3 | none | any | Details for aissemble_inference_common_test-1.5.1.dev1770639896-py3-none-any.whl |
Total release size: 25.9 kB
Release files / aissemble_inference_common_test-1.5.1.dev1770639896.tar.gz
| Download URL | aissemble_inference_common_test-1.5.1.dev1770639896.tar.gz |
|---|---|
| Size | 11.4 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
ea18419fb2a0238c166796c4a2788aa6da3e0ef11aae586358d7458dcf7c4761
|
|
BLAKE2b-256 checksum How to use checksums |
8ba738ac2f370f7732422666aa38bf564deec5187deec772c3887f9ee6712272
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
uv/0.9.24 {"installer":{"name":"uv","version":"0.9.24","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
|
Release files / aissemble_inference_common_test-1.5.1.dev1770639896-py3-none-any.whl
| Download URL | aissemble_inference_common_test-1.5.1.dev1770639896-py3-none-any.whl |
|---|---|
| Size | 14.5 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
6c58306741d38d1623a3e66c43b95f4be62fb5c79a3e77365dd626a7891ff4b9
|
|
BLAKE2b-256 checksum How to use checksums |
7357c73229513065a418a5f2ccb07e06a604f6193ef32e575484efc0a571c514
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
uv/0.9.24 {"installer":{"name":"uv","version":"0.9.24","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
|
Security for aissemble-inference-common-test 1.5.1.dev1770639896
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.
No provenance found
None of the files in this release were uploaded with provenance metadata.
A note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.