Joona Laine
Joona is a Geospatial Software Consultant and open source enthusiast with a special interest in QGIS and QField plugin development tools. He has been part of the development team behind the Finnish Topological Database Management System and has contributed to numerous other QGIS plugins over the years.
He is also one of the main developers of pytest-qgis, pytest-qfield, flake8-qgis, qgis-plugin-dev-tools and qgis_plugin_tools.
Sessions
As QGIS and its plugins evolve rapidly, teams often struggle to verify that critical workflows remain stable and performant across new releases. Manual testing is time-consuming and subjective, yet there is no easy way to automate it directly within QGIS.
This talk presents the Macro plugin, which records mouse and keyboard events as reusable macros, enabling advanced automation without writing a single line of code. These macros can be saved, shared and executed in different environments.
By combining macros with the Profiler plugin, it is possible to monitor these recorded QGIS actions to detect performance regressions issues and anomalies from the QGIS UI down to individual Python function calls.
Practical applications of Macro and Profiler plugins:
* Repeatable test setups for end-to-end testing
* Automating repetitive manual tasks (even digitizing or editing features)
* Comparing rendering speeds and processing times across different environments and QGIS or plugin versions
* Identifying performance bottlenecks in QGIS
The talk includes live demos of both plugins.
Developing software as a team typically requires choosing and following coding standards to ensure things run smoothly (larger the team, stricter the rules). QGIS plugin development is no exception.This workshop aims to introduce modern Python development tools for QGIS plugin development.
During the session, we will create a simple QGIS plugin and set up the development environment using best practices. We will cover at least the following topics:
* Configuring Python formatting and linting tools alongside with modern package management (flake8-qgis, ruff, mypy, prek, uv)
* Trying out writing unit tests for the plugin and its UI components (pytest-qgis, pytest-qt)
* Learning how to update translations (qgis-plugin-dev-tools, Qt Linguist)
* Setting up up a CI pipelines for running tests and publishing your plugin automatically with GitHub Actions