Die Funktionen zum Testen von QGIS-Plugins (insbesondere die Frage des Integrationstests in einer QGIS-Umgebung, wie im OP hervorgehoben) wurden in letzter Zeit erheblich verbessert. Ich hoffe daher, dass dieses Update sowohl den zeitgenössischen Lesern als auch dem OP hilft.
Boundless veröffentlichte im Juli 2016 einen Artikel, der unbedingt gelesen werden muss, damit jeder, der es ernst meint, das Testen von QGIS-Plugins zu automatisieren, diesen Artikel lesen kann. QGIS Continuous Integration-Testumgebung für Python-Plugins . Es beschreibt den Ansatz und die Tools, die sie verwenden - allesamt Open Source. Schwerpunkte sind: -
- Ihr spezieller QGIS-Plugin-Tester, der Tests innerhalb der QGIS-Umgebung automatisieren kann
- Die Verwendung von Docker- QGIS-Images ermöglicht das Testen mit verschiedenen QGIS-Versionen / -Konfigurationen in einer containergestützten Umgebung
- Ein spezielles Docker-QGIS-Image , das zum Testen von QGIS selbst verwendet wird, aber durch Aufrufen
qgis_testrunner.sh
zum Ausführen von Komponententests für ein Plug-in verwendet werden kann
- Die Verwendung von Travis CI für die kontinuierliche Integration - dh die vollständige Testsuite wird mit jedem neuen Code-Commit ausgeführt
Wenn Sie mit Travis CI / Docker vertraut sind, sollte die Einrichtung relativ einfach sein. Sie beschreiben die folgenden 4 Schritte und stellen 2 Beispiele für ihre eigenen Plugins bereit, die auf diese Weise eingerichtet wurden.
- Ziehen Sie das Docker-Image mit der QGIS-Testumgebung und führen Sie es aus
- Führen Sie qgis_setup.sh NameOfYourPlugin aus, um das Plugin zu installieren und QGIS für den Testläufer vorzubereiten
- Führen Sie optional alle Vorgänge aus, die zum Erstellen Ihres Plugins erforderlich sind
- Führen Sie den Test-Runner im Docker aus und rufen Sie die
qgis_testrunner.sh
Sie haben nach Best Practice gefragt und ab heute würde ich dies mit Sicherheit in Betracht ziehen. QGIS-Dokumente haben noch keinen eigenen Abschnitt zum Testen von Plugins (ich gehe davon aus, dass sich dies in Kürze ändern wird), aber der Ansatz "Bete, dass alles zusammenhält" ist sicherlich nicht mehr die einzige Option.
Es sieht so aus, als ob dies
unittest
zum Testen von Python-Plugins verwendet werden kann, die in eine eigenständige Python-Anwendung geladen wurden .qgis.core.iface ist in eigenständigen Anwendungen nicht verfügbar, daher habe ich eine Dummy-Instanz geschrieben, die eine Funktion zurückgibt, die Argumente akzeptiert und sonst nichts unternimmt. Dies bedeutet, dass Anrufe wie
self.iface.addToolBarIcon(self.action)
keine Fehler werfen.Im folgenden Beispiel wird ein Plugin geladen
myplugin
, das einige Dropdown-Menüs mit Ebenennamen aus der Kartenebenenregistrierung enthält. Die Tests prüfen, ob die Menüs korrekt ausgefüllt wurden und mit denen interagiert werden kann. Ich bin nicht sicher, ob dies der beste Weg ist, um das Plugin zu laden, aber es scheint zu funktionieren.quelle
Ich habe auch ein DummyInterface zusammengestellt, mit dem Sie eigenständige QGIS-Plugins testen können. Nachdem Sie den Snorfalorpagus-Blog gelesen haben, lesen Sie meine Antwort hier .
Um ein Beispiel aus der Praxis, wie ich Test (ed) QGIS-Plugins finden Sie auf dieser GitHub Projekt https://github.com/UdK-VPT/Open_eQuarter/tree/master/mole und einen Blick in die haben Tests - Paket.
quelle
Dies könnte helfen: Testen Sie PyQt-GUIs mit QTest und unittest http://www.voom.net/pyqt-qtest-example
quelle