pyster-python

Coverage-driven automatic unit test generator for Python projects.


License
MIT
Install
pip install pyster-python==0.1.0

Documentation

Pyster

Build Status Code Style Coverage Status PyPI version

Pyster is a coverage-driven automatic unit test generator for Python projects.

Pre-request

Usage

# 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>

Test

pytest tests

Sample execution

# 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

Pyster Logic

pyster-logic

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 folder
      • module_name: Name of Python module for generating tests
      • path_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.
  • Phase 2: Test Generation (gen stage)
    • Input:
      • timeout: Pyster terminates after timeout seconds.
      • coverage: Pyster terminates after test cases reach coverage 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.