2. Testing

Testing is an important part of maintaining software quality and Cantemo encourages the use of automated testing. In order to get started with the test runner you have to begin by installing the required dependencies. This can be done using the following command:

# /opt/cantemo/python/bin/pip install -r /opt/cantemo/portal/test-requirements.pip

This will download and install a number of python modules required for testing. It is recommended you do that on a separate system from your production system.

The test runner will create a database and the necessary tables for testing, but in order to allow that you need to give the Cantemo user in postgresql the role CREATEDB:

# sudo -u postgres psql portal -c 'alter USER portal CREATEDB;'

After this, you can run the test runner on the entire test suite using:

# python /opt/cantemo/portal/manage.py test

Individual modules can be tested like so:

# /opt/cantemo/portal/manage.py test portal.plugins.yourappname

2.1. Code layout

The recommended module structure is to create a submodule called tests where you keep the test files for that module. This means that if your app is called yourappname then you should have a folder called /opt/cantemo/portal/portal/plugins/yourappname/tests with an empty file called __init__.py and test files with filenames starting with the string test_. The included app template command start_portal_app will create an example structure for you.

2.2. Code coverage

If you have installed test-requirements.pip you can also benefit from coverage.py showing what code was executed when testing, and which lines are missed. You can extract code coverage from the test runner using:

# /opt/cantemo/portal/manage.py test --with-coverage

Or if you only want to measure coverage on your own app:

# /opt/cantemo/portal/manage.py test --with-coverage --cover-package=portal.plugins.yourappname portal.plugins.yourappname