Możliwości testowania wtyczek QGIS (szczególnie kwestia testowania integracji w środowisku QGIS, jak podkreśla OP) ostatnio znacznie się poprawiły. Dlatego mam nadzieję, że ta aktualizacja pomoże współczesnym czytelnikom, a także OP.
Boundless opublikował artykuł do przeczytania w lipcu 2016 r. Dla każdego, kto poważnie myśli o automatyzacji testowania wtyczek QGIS, zatytułowany; Środowisko testowania ciągłej integracji QGIS dla wtyczek Python . Opisuje podejście i używane przez nich narzędzia - z których wszystkie są oprogramowaniem typu open source. Kluczowe aspekty to:
- Ich specjalny tester wtyczek QGIS, który może zautomatyzować testy w środowisku QGIS
- Zastosowanie obrazów dokowanych QGIS, umożliwiających testowanie różnych wersji / konfiguracji QGIS w środowisku kontenerowym
- Specjalny doker QGIS obraz , który jest używany do testowania samego QGIS, ale który - powołując
qgis_testrunner.sh
może być używany do uruchamiania testów jednostkowych na wtyczce
- Wykorzystanie Travis CI do ciągłej integracji - tzn. Pełny zestaw testów jest uruchamiany przy każdym nowym zatwierdzeniu kodu
Jeśli znasz Travis CI / docker, konfiguracja powinna być stosunkowo łatwa. Opisują 4 następujące kroki i podają 2 przykłady własnych wtyczek skonfigurowanych w ten sposób.
- Wyciągnij obraz Docker ze środowiskiem testowym QGIS i uruchom go
- Uruchom qgis_setup.sh NameOfYourPlugin, aby zainstalować wtyczkę i przygotować QGIS dla testera
- Opcjonalnie wykonaj wszystkie operacje potrzebne do zbudowania wtyczki
- Uruchom testera w Dockerze, wywołując polecenie
qgis_testrunner.sh
Poprosiłeś o najlepszą praktykę i na pewno z pewnością to rozważę. Dokumenty QGIS wciąż nie mają wydzielonej sekcji poświęconej testowaniu wtyczek (spodziewam się, że wkrótce się to zmieni), ale podejście „Módlcie się, aby wszystko się trzymało” nie było już jedyną opcją.
Wygląda na to, że można to wykorzystać
unittest
do testowania wtyczek Python załadowanych do samodzielnej aplikacji Python .Funkcja qgis.core.iface nie jest dostępna w samodzielnych aplikacjach, więc napisałem fikcyjną instancję, która zwraca funkcję, która akceptuje wszelkie podane argumenty i nic więcej nie robi. Oznacza to, że połączenia typu „
self.iface.addToolBarIcon(self.action)
nie rzucaj błędów”.Poniższy przykład ładuje wtyczkę z
myplugin
kilkoma rozwijanymi menu z nazwami warstw pobranymi z rejestru warstw mapy. Testy sprawdzają, czy menu zostały poprawnie wypełnione i można z nimi korzystać. Nie jestem pewien, czy to najlepszy sposób na załadowanie wtyczki, ale wydaje się, że działa.źródło
Złożyłem również interfejs DummyInterface, który umożliwia samodzielne testowanie wtyczek QGIS. Po przeczytaniu bloga Snorfalorpagus, sprawdź moją odpowiedź tutaj .
Aby znaleźć prawdziwy przykład, w jaki sposób testowałem (ed) wtyczki QGIS, odwiedź ten projekt github na https://github.com/UdK-VPT/Open_eQuarter/tree/master/mole i zajrzyj do testów - pakiet.
źródło
Może to pomóc: Przetestuj GUI PyQt za pomocą QTest i unittest http://www.voom.net/pyqt-qtest-example
źródło