Pynguin (IPA: ˈpɪŋɡuiːn), the PYthoN General UnIt test geNerator, is a tool that allows developers to generate unit tests automatically.
Testing software is often considered to be a tedious task. Thus, automated generation techniques have been proposed and mature tools exist—for statically typed languages, such as Java. There is, however, no fully-automated tool available that produces unit tests for general-purpose programs in a dynamically typed language. Pynguin is, to the best of our knowledge, the first tool that fills this gap and allows the automated generation of unit tests for Python programs.
Please Note:
Pynguin executes the module under test! As a consequence, depending on what code is in that module, running Pynguin can cause serious harm to your computer, for example, wipe your entire hard disk! We recommend running Pynguin in an isolated environment; use, for example, a Docker container to minimize the risk of damaging your system.
Pynguin is only a research prototype! It is not tailored towards production use whatsoever. However, we would love to see Pynguin in a production-ready stage at some point; please report your experiences in using Pynguin to us.
Before you begin, ensure you have met the following requirements:
-
You have installed Python 3.10 (we have not yet tested with Python 3.11, there might be some problems due to changed internals regarding the byte-code instrumentation).
Attention: Pynguin now requires Python 3.10! Older versions are no longer supported!
-
You have a recent Linux/macOS/Windows machine.
Please consider reading the online documentation to start your Pynguin adventure.
Pynguin can be easily installed using the pip
tool by typing:
pip install pynguin
Make sure that your version of pip
is that of a supported Python version, as any
older version is not supported by Pynguin!
Before you continue, please read the quick start guide
Pynguin is a command-line application.
Once you installed it to a virtual environment, you can invoke the tool by typing
pynguin
inside this virtual environment.
Pynguin will then print a list of its command-line parameters.
A minimal full command line to invoke Pynguin could be the following,
where we assume that a project foo
is located in /tmp/foo
,
we want to store Pynguin's generated tests in /tmp/testgen
,
and we want to generate tests using a whole-suite approach for the module foo.bar
(wrapped for better readability):
pynguin \
--project-path /tmp/foo \
--output-path /tmp/testgen \
--module-name foo.bar
Please find a more detailed example in the quick start guide.
To run parameter control we can extend the example command above as the following:
pynguin \
--project-path /tmp/foo \
--output-path /tmp/testgen \
--module-name foo.bar \
--algorithm DYNAMOSA_RL \
--tuning_parameters Population,CrossoverRate,TournamentSize
--update_frequency 10 \
--plateau_length 5 \
--algorithm
sets the test generation algorithm (GA) to be used.DYNAMOSA_RL
is the only algorithm that currently supports parameter control.--tuning_parameters
defines which parameter(s) should be controlled. Formatted as a comma-separated list.--update_frequency
controls how many test generation iterations should surpass between each subsequent parameter value update.--plateau_length
controls how many test generation iterations must surpass before the parameter control is enabled, set to 0 for instant start.
The parameters available for control are the following:
ChangeParameterProbability
,
ChromosomeLength
,
CrossoverRate
,
Elite
,
NONE
,
Population
,
RandomPerturbation
,
StatementInsertionProbability
,
TestChangeProbability
,
TestDeleteProbability
,
TestInsertProbability
,
TestInsertionProbability
,
TournamentSize
For the development of Pynguin you will need the poetry
dependency management and packaging tool.
To start developing, follow these steps:
-
Clone the repository
-
Change to the
pynguin
folder:cd pynguin
-
Create a virtual environment and install dependencies using
poetry
:poetry install
-
Make your changes
-
Run
make check
to verify that your changes pass all checksPlease see the
poetry
documentation for more information on this tool.
Pynguin is developed at the Chair of Software Engineering II of the University of Passau.
Maintainer: Stephan Lukasczyk
Contributors:
- Tucker Blue
- Gordon Fraser
- Abdur-Rahmaan Janhangeer
- Maximilian Königseder
- Florian Kroiß
- Simon Labrenz
- Roman Levin
- Juan Julián Merelo Guervós
- Lukas Steffens
- Florian Straubinger
- Sara Tavares
If you want to use the PyCharm IDE you have to set up a few things:
- Import
pynguin
into PyCharm. - Let PyCharm configure configure a virtual environment using
poetry
. - Set the default test runner to
pytest
- Set the DocString format to
Google
This project is licensed under the terms of the MIT License. Pynguin was using the GNU Lesser General Public License (LGPL) until version 0.29.0, its licence was changed with version 0.30.0.