A pytest plugin for testing QGIS python plugins
Project description
pytest-qgis
A pytest plugin for testing QGIS python plugins.
Features
This plugin makes it easier to write QGIS plugin tests with the help of some fixtures and hooks:
Fixtures
qgis_app
returns and eventually exits fully configuredQgsApplication
. This fixture is called automatically on the start of pytest session.qgis_bot
returns aQgisBot
, which holds common utility methods for interacting with QGIS. Also fixturemodule_qgis_bot
in module scope is provided.qgis_canvas
returnsQgsMapCanvas
.qgis_parent
returns the QWidget used as parent of theqgis_canvas
qgis_iface
returns stubbedQgsInterface
qgis_new_project
makes sure that all the map layers and configurations are removed. This should be used with tests that add stuff toQgsProject
.qgis_processing
initializes the processing framework. This can be used when testing code that callsprocessing.run(...)
.qgis_version
returns QGIS version number as integer.qgis_world_map_geopackage
returns Path to the world_map.gpkg that ships with QGISqgis_countries_layer
returns Natural Earth countries layer from world.map.gpkg as QgsVectorLayer
Markers
qgis_show_map
lets developer inspect the QGIS map visually at the teardown of the test. Full signature of the marker is:@pytest.mark.qgis_show_map(timeout: int = 30, add_basemap: bool = False, zoom_to_common_extent: bool = True, extent: QgsRectangle = None)
timeout
is the time in seconds until the map is closed.add_basemap
when set to True, adds Natural Earth countries layer as the basemap for the map.zoom_to_common_extent
when set to True, centers the map around all layers in the project.extent
is alternative tozoom_to_common_extent
and lets user specify the extent asQgsRectangle
Check the marker api documentation and examples for the ways markers can be used.
Utility tools
clean_qgis_layer
decorator found inpytest_qgis.utils
is a decorator which can be used withQgsMapLayer
fixtures to ensure that they are cleaned properly if they are used but not added to theQgsProject
. This is only needed with layers with other than memory provider.# conftest.py of start of a test file import pytest from pytest_qgis.utils import clean_qgis_layer from qgis.core import QgsVectorLayer @pytest.fixture() @clean_qgis_layer def some_layer() -> QgsVectorLayer: return QgsVectorLayer("layer_file.geojson", "some layer")
Hooks
pytest_configure
hook is used to initialize and configureQgsApplication
. With QGIS >= 3.18 it is also used to patchqgis.utils.iface
withqgis_iface
automatically.
Command line options
--qgis_disable_gui
can be used to disable graphical user interface in tests. This speeds up the tests that use Qt widgets of the plugin.--qgis_disable_init
can be used to prevent QGIS (QgsApllication) from initializing. Mainly used in internal testing.
ini-options
qgis_qui_enabled
whether the QUI will be visible or not. Defaults toTrue
. Command line option--qgis_disable_gui
will override this.qgis_canvas_width
width of the QGIS canvas in pixels. Defaults to 600.qgis_canvas_height
height of the QGIS canvas in pixels. Defaults to 600.
QgisBot
Class to hold common utility methods for interacting with QGIS. Here are some of the methods:
create_feature_with_attribute_dialog
method to create a feature with default values using QgsAttributeDialog. This ensures that all the default values are honored and for example boolean fields are either true or false, not null.get_qgs_attribute_dialog_widgets_by_name
function can be used to get dictionary of theQgsAttributeDialog
widgets. Check the test test_qgis_ui.py::test_attribute_dialog_change for a usage example.
Requirements
This pytest plugin requires QGIS >= 3.10 to work.
Installation
Install with pip
:
pip install pytest-qgis
Development environment
- Create a virtual environment and activate it.
pip install pip-tools
pip-sync requirements.txt requirements-dev.txt
pre-commit install
Updating dependencies
pip-compile --upgrade
pip-compile --upgrade requirements-dev.in
Contributing
Contributions are very welcome.
License
Distributed under the terms of the GNU GPL v2.0
license, "pytest-qgis" is free and open source software.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
pytest-qgis-1.3.2.tar.gz
(40.7 kB
view hashes)
Built Distribution
Close
Hashes for pytest_qgis-1.3.2-py3-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 0bf4cba9dccdd9b437b603a4e5ebe525d74c5f5a71b718eb03d569946e30d242 |
|
MD5 | d200c5e40aaaaf2146ab3853740a6599 |
|
BLAKE2b-256 | 25c86bb4bd20f737ecb0b2ef74efe74daa0578d7ad06c5229af473013d574ccb |