A micro test runner
Project description
microPyTest
microPyTest is a minimal, pure python-based test runner that you can use directly in code.
Key Points
- Code-first approach: Import and run tests from your own scripts.
- Artifact tracking: Each test can record artifacts (files or data) via a built-in test context.
- Command execution: Run and interact with external processes with real-time output processing.
- Test filtering: Run only the tests you need by specifying patterns.
- Test arguments: Pass command-line arguments directly to your tests.
- Lightweight: Just Python. No special config or advanced fixtures.
- Optional CLI: You can also run tests via the
micropytestcommand, but embedding in your own code is the primary focus.
Installation
pip install micropytest
Usage in Code
Suppose you have some test files under my_tests/:
# my_tests/test_example.py
def test_basic():
assert 1 + 1 == 2
def test_with_context(ctx):
ctx.debug("Starting test_with_context")
assert 2 + 2 == 4
ctx.add_artifact("numbers", {"lhs": 2, "rhs": 2})
You can run them from a Python script:
import micropytest.core
results = micropytest.core.run_tests(tests_path="my_tests")
passed = sum(r["status"] == "pass" for r in results)
total = len(results)
print("Test run complete: {}/{} passed".format(passed, total))
- Each test that accepts a
ctxparameter gets a TestContext object with.debug(),.warn(),.add_artifact(), etc. - Results include logs, artifacts, pass/fail/skip status, and duration.
Command Execution
microPyTest includes a Command class for running and interacting with external processes:
from micropytest.command import Command
import sys
def test_interactive_command(ctx):
# Run a Python interpreter interactively
with Command([sys.executable, "-i"]) as cmd:
# Send a command
cmd.write("print('Hello, world!')\n")
# Check the output
stdout = cmd.get_stdout()
# Exit the interpreter
cmd.write("exit()\n")
# Verify the output
assert any("Hello, world!" in line for line in cmd.get_stdout())
Key features:
- Run commands with callbacks for real-time output processing
- Interact with processes via stdin
- Access stdout/stderr at any point during execution
- Set custom environment variables and working directories
Test Filtering
You can run a subset of tests by specifying a filter pattern:
# Run only tests with "artifact" in their name
results = micropytest.core.run_tests(tests_path="my_tests", test_filter="artifact")
This is especially useful when you're focusing on a specific area of your codebase.
Passing Arguments to Tests
Tests can accept and parse command-line arguments using standard Python's argparse:
def test_with_args(ctx):
import argparse
# Create parser
parser = argparse.ArgumentParser(description="Test with arguments")
parser.add_argument("--string", "-s", default="default string", help="Input string")
parser.add_argument("--number", "-n", type=int, default=0, help="Input number")
# Parse arguments (ignoring unknown args)
args, _ = parser.parse_known_args()
# Log the parsed arguments
ctx.debug(f"Parsed arguments:")
for key, value in vars(args).items():
ctx.debug(f" {key}: {value}")
# Use the arguments in your test
assert args.string != "", "String should not be empty"
assert args.number >= 0, "Number should be non-negative"
When running from the command line, you can pass these arguments directly:
micropytest -t test_with_args --string="Hello World" --number=42
The arguments after your test filter will be passed to your test functions, allowing for flexible test parameterization.
Differences from pyTest
-
Code-first: You typically call
run_tests(...)from Python scripts. The CLI is optional if you prefer it. -
Artifact handling is built-in:
ctx.add_artifact("some_key", value)can store files or data for later review. No extra plugin required. -
Command execution built-in: No need for external plugins to run and interact with processes.
-
No fixtures or plugins: microPyTest is intentionally minimal. Tests can still share state by passing a custom context class if needed.
-
No configuration: There's no
pytest.iniorconftest.py. Just put your test functions intest_*.pyor*_test.py. -
Time estimates for each test
Quickstart
See the examples subfolder
Optional CLI
If you prefer a command-line flow:
micropytest -p tests/
-v, --verbose: Show all debug logs & artifacts.-q, --quiet: Only prints a final summary.-t, --test: Run only tests matching the specified pattern.
Examples:
# Run all tests in my_tests directory
micropytest -v my_tests
# Run only tests with "artifact" in their name
micropytest -t artifact my_tests
# Run a specific test and pass arguments to it
micropytest -t test_cmdline_parser --string="Hello" --number=42
Development
To develop with microPyTest, install the required dependencies and run the tests in the project:
pip install rich
python -m micropytest .
Uploading to PyPI
To build and upload a new version to PyPI:
# Install build tools
pip install build twine
# Build the distribution packages
python -m build
# Upload to PyPI
twine upload dist/*
Make sure to update the version number in your setup.py or pyproject.toml before building a new release.
Changelog
- v0.6 – Added rich display support, tag filtering, improved warnings display, VCS helper, and improved command execution
- v0.5 – Added test filtering and argument passing capabilities
- v0.4 – Added Command class for process execution and interaction
- v0.3.1 – Fixed screenshot in pypi
- v0.3 – Added ability to skip tests
- v0.2 – Added support for custom context classes
- v0.1 – Initial release
Enjoy your micro yet mighty test runner!
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file micropytest-0.6.tar.gz.
File metadata
- Download URL: micropytest-0.6.tar.gz
- Upload date:
- Size: 19.2 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.11.0
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
9a4e90011524a163b4b55502e961da9883050d017179ad592bd3e7770218f59f
|
|
| MD5 |
d6d90daa69b61092f24bc6387ecdb390
|
|
| BLAKE2b-256 |
1117cce4f15c959c00f606bb149176b8989d0401a3f49df107f6175c3676a2a3
|
File details
Details for the file micropytest-0.6-py3-none-any.whl.
File metadata
- Download URL: micropytest-0.6-py3-none-any.whl
- Upload date:
- Size: 17.9 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.11.0
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
5034ae8f150bdc2501caa6f1f261d7f1621c63a0d42ce1472376fa91e563c04f
|
|
| MD5 |
a16b73e10ee2225d9df6be6bc88ef087
|
|
| BLAKE2b-256 |
51dd3693ef6baae1871f8323ed92babbbe022dbd1a7be802ecdc40ab199bcf58
|