Package: pytest-qgis
pytest-qgisApytestplugin for testing QGIS python plugins.FeaturesThis plugin makes it easier to write QGIS plugin tests with the help of some fixtures and hooks:Fixturesqgis_appreturns and eventually exits fully
configuredQgsApplication. This fixture is called
automatically on the start of pytest session.qgis_botreturns aQgisBot, which holds common utility methods for interacting with QGIS.qgis_canvasreturnsQgsMapCanvas.qgis_parentreturns the QWidget used as parent of theqgis_canvasqgis_ifacereturns stubbedQgsInterfaceqgis_new_projectmakes sure that all the map layers and configurations are removed. This should be used with tests
that add stuff toQgsProject.qgis_processinginitializes the processing framework. This can be used when testing code that
callsprocessing.run(...).qgis_versionreturns QGIS version number as integer.qgis_world_map_geopackagereturns Path to the world_map.gpkg that ships with QGISqgis_countries_layerreturns Natural Earth countries layer from world.map.gpkg as QgsVectorLayerMarkersqgis_show_maplets developer inspect the QGIS map visually during the test and also 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)timeoutis the time in seconds until the map is closed. If timeout is zero, the map will be closed in teardown.add_basemapwhen set to True, adds Natural Earth countries layer as the basemap for the map.zoom_to_common_extentwhen set to True, centers the map around all layers in the project.extentis alternative tozoom_to_common_extentand lets user specify the extent
asQgsRectangleCheck the marker apidocumentationandexamplesfor the ways
markers can be used.Hookspytest_configurehook is used to initialize and
configureQgsApplication. With QGIS >= 3.18 it is also
used to patchqgis.utils.ifacewithqgis_ifaceautomatically.Be careful not to import modules importingqgis.utils.ifacein the root of conftest, because thepytest_configurehook has not yet patchedifacein that point. Seethis issuefor details.pytest_runtest_teardownhook is used to ensure that all layer fixtures of any scope are cleaned properly without causing segmentation faults. The layer fixtures that are cleaned automatically must have some of the following keywords in their name: "layer", "lyr", "raster", "rast", "tif".Command line options--qgis_disable_guican be used to disable graphical user interface in tests. This speeds up the tests that use Qt
widgets of the plugin.--qgis_disable_initcan be used to prevent QGIS (QgsApplication) from initializing. Mainly used in internal testing.ini-optionsqgis_qui_enabledwhether the QUI will be visible or not. Defaults toTrue. Command line
option--qgis_disable_guiwill override this.qgis_canvas_widthwidth of the QGIS canvas in pixels. Defaults to 600.qgis_canvas_heightheight of the QGIS canvas in pixels. Defaults to 600.QgisBotClass to hold common utility methods for interacting with QGIS. Checktest_qgis_bot.pyfor usage examples.  Here are some of the methods:create_feature_with_attribute_dialogmethod can be used 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_namefunction can be used to get dictionary of theQgsAttributeDialogwidgets.
Check the testtest_qgis_ui.py::test_attribute_dialog_changefor a usage example.RequirementsThis pytest plugin requires QGIS >= 3.16 to work though it might work with older versions.InstallationInstall withpip:pipinstallpytest-qgisDevelopment environment# Create a virtual environment with qgis and dependencies available$python-mvenv.venv--system-site-packages# Activate the virtual environment$source.venv/bin/activate# Update pip and setuptools$python-mpipinstall-Upipsetuptools
$pipinstallpip-tools# Install dependencies$pip-syncrequirements.txtrequirements-dev.txt# Install pre-commit hooks$pre-commitinstallUpdating dependenciespip-compile --upgradepip-compile --upgrade requirements-dev.inContributingContributions are very welcome.LicenseDistributed under the terms of theGNU GPL v2.0license, "pytest-qgis" is free and open source software.