Pyster is a coverage-driven automatic unit test generator for Python projects.
- Python 3
- Coverage.py (
pip3 install coverage
) - pytest (
pip3 install pytest
)
# Stage 1: Init pyster config file
python3 -m pyster.init \
--project_path <path-to-project> \
--module_name <module-for-testing> \
--path_runtime <runtime-analysis-code>
# Stage 2: Generate unit tests
python3 -m pyster.gen \
--project_path <path-to-project> \
--module_name <module-for-testing> \
--user_tests <list-of-existing-test-files> \
--timeout <timeout-limit> \
--coverage <coverage-target>
# Run Stage 1 and Stage 2 together:
python3 -m pyster \
--project_path <path-to-project> \
--module_name <module-for-testing> \
--path_runtime <runtime-analysis-code> \
--user_tests <list-of-existing-test-files> \
--timeout <timeout-limit> \
--coverage <coverage-target>
pytest tests
# Phase 1
python3 -m pyster.init --project_path tests/foobar --module_name foobar.foobar
# Phase 2
python3 -m pyster.gen --project_path tests/foobar --module_name foobar.foobar -t 1 -c 80
The graph above is a high-level summary of Pyster's workflow.
Pyster contains two phases:
- Phase 1: Type Analysis (
init
stage)- Input:
project_path
: Absolute/relative path to project foldermodule_name
: Name of Python module for generating testspath_runtime
(optional): User-written Python file (e.g. existing test files) that makes use of functions in the selected module.
- Output:
module_name.json
: A configuration file containing all information used to randomly generate function calls. (All function signatures and their argument types, constructor of user-defined classes, etc.) This file can be further modified by user to provide more detailed type-related information.
- Input:
- Phase 2: Test Generation (
gen
stage)- Input:
timeout
: Pyster terminates aftertimeout
seconds.coverage
: Pyster terminates after test cases reachcoverage
code coverage rate.user_tests
(optional): If current module already has test suite,user_tests
can be provided as a list of files so that Pyster will not generate tests covering lines already tested.
- Output:
- A runnable
module_nameTest.py
file containing all automatically generated unit tests as well as command-line output of coverage report.
- A runnable
- Input: