Running Quilla tests with Pytest¶
Quilla is bundled with the pytest-quilla
plugin, but it is disabled by default to prevent unexpected behaviour. To start using Quilla with Pytest, add the line use-quilla = True
to the project’s pytest configuration (i.e. pytest.ini, setup.cfg, etc). Setting this flag will allow any JSON file with a specific prefix (by default, files that match quilla*.json
) to be discovered by Pytest as a Quilla test.
Why Pytest?¶
There are many test frameworks available, even if limiting only to those that are available for Python. Pytest, however, offers some unique features that Quilla benefits greatly from, and in turn Quilla enhances the features of Pytest. These are discussed below.
Automatic test discovery¶
Quilla was originally designed to execute a single file’s tests, which simplified the execution logic and the CLI. Pytest’s test discovery feature then makes it incredibly easy to extend Quilla to an arbitrary number of files without having to write a new test discovery functionality
Fail-only Reporting¶
Quilla provides robust reporting for its tests, and will output the full report (and the test outputs) regardless of the test’s success or failure status. This enables advanced users to chain multiple Quilla tests together using the various outputs that they produce. However, most users do not need this, and likely will not concern themselves with checking the output unless the tests have failed. Pytest’s reporting tool will only show the output of a test when it fails, which covers most of the basic usecase
Rich plugin support¶
It is incredibly easy to write a Pytest plugin, and the logic for the pytest-quilla
plugin is kept completely separate from the quilla
logic. This allows Quilla to distribute both packages easily, and lets the pytest-quilla
plugin automatically inherit features from the quilla
plugin without having to re-write any of the plugin code, provided that the basic interface it uses remains unchanged.
Pytest’s rich plugin support also means Quilla can already leverage the community. A great example of this is using Quilla with the pytest-xdist
plugin, which enables Quilla to leverage multi-processing without having to add in multiprocessing features to Quilla.
Dynamic test suite creation¶
Using Pytest markers, Quilla can leverage existing functionality to make it easy for users to create entire test suites on the fly. By properly labelling their Quilla tests with custom markers, users can opt to only run some tests, and keeping track of which test suite a given test belongs to happens at the test-level, as opposed to traditional methods which require different inventory files to keep track of tests.
Read more about the use of custom markers on the pytest documentation
Adding Quilla CLI options when running in Pytest¶
The pytest-quilla
plugin adds a CLI option to Pytest, allowing it to pass those specified options to the Quilla contexts. To specify a definition file named ‘Definitions.json’, for example, run pytest with the following command: pytest --quilla-opts="--definitions test/definitions/Definitions.json"
Changing Quilla test prefix¶
Setting the ini option quilla-prefix
will allow custom prefix options. For example, to have pytest register all JSON files matching test_*.json
as Quilla tests, set quilla-prefix = test_
in the project’s pytest configuration
Using Pytest with uiconf.py plugins file¶
Plugins will still be discovered when running Quilla, and must be installed or placed in the same directory that the project’s pytest configuration is in. Simply add a uiconf.py
file in the same directory as the setup.cfg (or pytest.ini, tox.ini, etc), and Quilla will take care of the rest
Adding test markers to Quilla tests¶
Quilla tests support static markers in the JSON files. Add a ‘markers’ key to the top level of the JSON document. Examples of this can be found within the tests/integration
directory of the Quilla repository, since all these tests are marked with the integration
and slow
markers.
It is not however possible to add markers that require additional parameters at this time to individual quilla tests through the JSON document. For example, the skipif
marker requires a boolean to determine whether the test should be skipped or not, and it is not possible to do so at this time. The skip
marker, however, does indeed work: the reason
field can be omitted.
Quilla and pytest-xdist¶
The pytest-xdist
plugin is fully compatible with Quilla! Quilla uses the pytest-xdist
to parallelize the tests, since all integration tests are written as Quilla tests and each test has an isolated context. It is encouraged, given how browser tests are usually slow, to use pytest-xdist
to speed up the testing suite.