Every available plugin needs to be enabled for each project in which it should be used. For that, access the Administration interface, edit the project, and add the wanted plugin names to the "Enabled plugin list" field.
SQUAD plugins are Python classes that are a subclass of squad.core.plugins.Plugin, and can be provided by any Python package installed in the system. To register the plugin with SQUAD, you need to use the "entry points" system. In the setup.py for your package, use the following:
setup( # ... packages='mypluginpackage' # ... entry_points={ # ... 'squad_plugins': [ 'myplugin1=mypluginpackage.Plugin1', 'myplugin2=mypluginpackage.Plugin2', ] }, # ... )
Now, the plugin itself can be implemented in mypluginpackage.py, like this:
from squad.core.plugins import Plugin class Plugin1(Plugin): # implementation of the plugin methods ... class Plugin2(Plugin): # implementation of the plugin methods ...
The next next section, "The plugin API" documents which methods can be defined in your plugin class in order to provide extra functionality to the SQUAD core.
.. autoclass:: squad.core.plugins.Plugin :members:
Code from the SQUAD core that wants to invoke functionality from plugins should
use the apply_plugins
function.
.. autofunction:: squad.core.plugins.apply_plugins
This section presents a minimal, working example of a Python package that
provides one SQUAD plugin. It is made of only two files: setup.py
and
examplepluginpackage/__init__.py
.
setup.py
:
from setuptools import setup, find_packages setup( name='examplepluginpackage', version='1.0', author='Plugin Writer', author_email='[email protected]', url='https://example.com/examplepluginpackage', packages=find_packages(), include_package_data=True, entry_points={ 'squad_plugins': [ 'externalplugin=examplepluginpackage:MyPlugin', ] }, license='AGPLv3+', description="An example Plugin pacakge", long_description=""" The Example Plugin package is a sample plugin for SQUAD that shows how to write SQUAD plugins """, platforms='any', )
examplepluginpackage/__init__.py
:
from squad.core.plugins import Plugin class MyPlugin(Plugin): def postprocess_testrun(self, testrun): # do something interesting with the the testrun ... pass