Les capacités de test des plugins QGIS (en particulier la question des tests d'intégration, dans un environnement QGIS, comme le souligne l'OP) se sont beaucoup améliorées récemment. J'espère donc que cette mise à jour aidera les lecteurs contemporains, ainsi que l'OP.
Boundless a publié un article incontournable en juillet 2016 pour quiconque souhaite sérieusement automatiser les tests des plugins QGIS intitulé; Environnement de test d'intégration continue QGIS pour les plugins Python . Il décrit l'approche et les outils qu'ils utilisent - qui sont tous open source. Les aspects clés sont: -
- Leur testeur de plugin QGIS spécial qui peut automatiser les tests dans l'environnement QGIS
- L'utilisation de docker QGIS images, ce qui permet de tester contre différentes versions de QGIS / configurations dans un environnement de base contenant
- Une image Docker QGIS spéciale , qui est utilisée pour tester QGIS lui-même, mais qui - en l'appelant
qgis_testrunner.sh
peut être utilisée pour exécuter des tests unitaires sur un plugin
- L'utilisation de Travis CI pour une intégration continue - c'est-à-dire que la suite de tests complète est exécutée à chaque nouvelle validation de code
Si vous connaissez Travis CI / docker, il devrait être relativement facile à configurer. Ils décrivent les 4 étapes suivantes et fournissent 2 exemples de leurs propres plugins configurés de cette manière.
- Tirez l'image Docker avec l'environnement de test QGIS et exécutez-la
- Exécutez qgis_setup.sh NameOfYourPlugin pour installer le plugin et préparer QGIS pour le testeur
- Effectuez éventuellement toutes les opérations nécessaires pour créer votre plugin
- Exécutez le lanceur de test dans le Docker en invoquant le
qgis_testrunner.sh
Vous avez demandé les meilleures pratiques et à ce jour, je considérerais certainement cela. Les documents QGIS n'ont toujours pas de section dédiée aux tests de plugins (je m'attends à ce que cela change sous peu) mais l'approche "Priez pour que tout se tienne" n'est certainement plus la seule option.
Il semble que cela soit possible pour
unittest
tester des plugins Python chargés dans une application Python autonome .qgis.core.iface n'est pas disponible à partir d'applications autonomes, j'ai donc écrit une instance factice qui retourne une fonction qui acceptera tous les arguments qui lui seront donnés et ne fera rien d'autre. Cela signifie que les appels comme
self.iface.addToolBarIcon(self.action)
ne génèrent pas d'erreurs.L'exemple ci-dessous charge un plugin
myplugin
, qui a des menus déroulants avec des noms de couches tirés du registre des couches de carte. Les tests vérifient si les menus ont été correctement remplis et peuvent être interagis avec. Je ne sais pas si c'est la meilleure façon de charger le plugin, mais cela semble fonctionner.la source
J'ai également mis en place une interface factice, qui vous permet de tester les plugins QGIS de manière autonome. Après avoir lu le blog Snorfalorpagus, consultez ma réponse ici .
Pour trouver un exemple réel, sur la façon dont je teste (ed) les plugins QGIS, visitez ce projet github à https://github.com/UdK-VPT/Open_eQuarter/tree/master/mole et jetez un œil aux tests - paquet.
la source
Cela pourrait aider: Tester les interfaces graphiques PyQt avec QTest et unittest http://www.voom.net/pyqt-qtest-example
la source