Najlepsze praktyki testowania regresji na stronach WordPress?

22

Cześć wszystkim,

Chciałbym usłyszeć, co inni dostarczają klientom kompleksowe rozwiązania nieblogowe z WordPress jako platformą używaną do automatycznego testowania regresji ?

Dla tych, którzy nie są zaznajomieni z terminem „testowanie regresji” Wikipedia definiuje go jako:

Testowanie regresyjne to każdy rodzaj testowania oprogramowania, którego celem jest wykrycie błędów oprogramowania po wprowadzeniu zmian w programie (np. Poprawki błędów lub nowa funkcjonalność) poprzez ponowne przetestowanie programu. Celem testów regresji jest upewnienie się, że zmiana, taka jak poprawka błędu, nie wprowadziła nowych błędów.

Bardziej wymowne Wikipedia mówi, co jest dokładnie tym, czego obecnie doświadczam w projekcie:

Doświadczenie pokazuje, że gdy oprogramowanie jest naprawione, pojawienie się nowych i / lub ponowne pojawienie się starych usterek jest dość powszechne. Czasami pojawia się ponowny powrót, ponieważ poprawka gubi się w wyniku złych praktyk kontroli wersji (lub zwykłego błędu ludzkiego w kontroli wersji). Często naprawa problemu będzie „delikatna”, ponieważ rozwiązuje problem w wąskim przypadku, w którym po raz pierwszy go zaobserwowano, ale nie w bardziej ogólnych przypadkach, które mogą pojawić się w trakcie życia oprogramowania. Często naprawa problemu w jednym obszarze nieumyślnie powoduje błąd oprogramowania w innym obszarze. Wreszcie, często zdarza się, że gdy jakaś funkcja jest przeprojektowywana, niektóre z tych samych błędów, które popełniono w oryginalnej implementacji funkcji, zostały popełnione w przeprojektowaniu.

Biorąc pod uwagę globalny charakter akcji i filtrów, stwierdzam, że złożoność zaczyna rosnąć wraz z dodawaniem większej liczby żądanych przez klienta funkcji i trudno jest uzyskać stabilną złożoną wtyczkę, szczególnie jeśli używa ona wielu wywołań WP_Queryi często aktualizuje bazę danych .

Moim zdaniem rozwiązaniem byłoby skonfigurowanie testowania regresyjnego z serią „przypadków testowych” w celu utworzenia „zestawu testowego”. Z założenia nie jest to takie trudne, gdy testujesz wyjście HTML żądań HTTP GET. Ale staje się to trochę bardziej skomplikowane, gdy musisz przetestować rzeczy po zalogowaniu za pomocą konsoli administracyjnej i / lub przetestować interakcje jQuery.

Ustawiam to jako wiki społeczności, w nadziei, że możemy tutaj zebrać najlepsze praktyki, ale naprawdę chcę usłyszeć procesy, jeśli korzystają z nich inni specjaliści WordPress.

MikeSchinkel
źródło
Zakładam, że mówisz o testowaniu własnego kodu (motywów / wtyczek)? Kiedy tworzysz nowy kod lub aktualizujesz „środowisko” (WP, inne wtyczki)? Lub obydwa? Myślę, że Pro Webmasterzy mogą również zawierać dobre porady na temat testowania aplikacji internetowych (Selenium i inne) - może dobrym pomysłem jest zamieszczanie postów na postach?
Jan Fabry,
@Jan Fabry - Tak, testuję własny kod. Dobry pomysł na cross-post, zrobię to wkrótce.
MikeSchinkel,

Odpowiedzi:

10

PHPUnit przyszedłby do głowy, gdyby pakiet testowy WP nie był tak zepsuty, a WP został zaprojektowany i napisany w sposób, który mógłby być właściwie przetestowany. ;-)

Mówiąc poważniej, możesz przetestować swoje wtyczki, ile chcesz z ich funkcjonalnego punktu widzenia za pomocą testów jednostkowych i tym podobnych. Problem polega na tym, że testy te nie zagwarantują, że złapią subtelne szanse wprowadzone przez aktualizacje WP, nie mówiąc już o tym, że będą kontynuować pracę po podłączeniu do niestandardowej instalacji WP.

Wśród kolorowych rzeczy, które widziałem, wydarzyły się:

  • Subtelna zmiana w WP API wpływa na funkcjonalność wtyczki, np. Zaczep, którego używasz do uzyskania identyfikatora terminu, a teraz otrzymuje identyfikator taksonomii terminu. (Są duże szanse, że warunki testu dogodnie mają ten sam identyfikator dla obu).

  • Subtelna zmiana w WP API skutkuje otrzymaniem WP_Errorobiektu zamiast wcześniej oczekiwanej wartości falsejako złych danych wejściowych.

  • Twoja wtyczka jest dodawana z folderu mu-plugins, co powoduje nieznacznie inny przepływ kodu.

  • Twoja wtyczka działała dobrze do momentu włączenia memcached lub innego trwałego sklepu.

  • Twoja wtyczka działała dobrze, dopóki nie pogardzono switch_to_blog ().

  • Wtyczka zmienia zaczep, na którym się znajduje, kiedy jest wywoływana, i nieświadomie przerywa ją jako efekt uboczny.

  • Wtyczka (un?) Świadomie przesuwa dane wejściowe lub wyjściowe do momentu, w którym wszystko wygląda na zepsute, nawet jeśli nie jesteś winny.

Mógłbym ciągle rozszerzać listę, ale byłyby to kluczowe elementy, które złamały moje własne wtyczki. Te dwa elementy można prawdopodobnie złapać podczas testów jednostkowych. Kolejne dwa również, jeśli jesteś wystarczająco cierpliwy, ale argumentowałbym, że WP nie powinna zmieniać sposobu działania rzeczy, kiedy one wystąpią. Żadna ilość testów nie będzie działać w przypadku błędnej implementacji switch_to_blog (). A dwa ostatnie są beznadziejnie niestabilne.

Aha i ... nawet nie zaczynaj mnie od ataku załączników, automatycznych wersji roboczych, poprawek, pozycji menu i tego, co nie skończyło się w tabeli postów.

Powodzenia... :-)

Denis
źródło
2
Dobra odpowiedź, dzięki za wszystkie szczegóły, które omawiasz. FWIW Szukam bardziej testów „regresyjnych” niż testów „jednostkowych” . Wiem, że nakładają się na siebie, ale moim największym problemem jest teraz sprawdzenie, czy witryna się nie psuje. Tak, testowanie jednostkowe wtyczki może wychwycić większość problemów, ale zajmuje dużo więcej czasu i wysiłku, aby uzyskać pełne pokrycie w testach jednostkowych (co oznacza, że ​​prawdopodobnie nie uzyskam pełnego pokrycia), podczas gdy testowanie całej strony jest znacznie mniej szczegółowe.
MikeSchinkel,
1
W rzeczywistości zauważ, że istnieją narzędzia w niektórych ramach (Symfony2 i Li3, aby wymienić, ale dwa), które pozwalają przetestować rzeczywistą witrynę za pomocą fikcyjnej przeglądarki. Komponenty, o których mowa, nadają się do innych celów. W ten sposób możesz manipulować ekranami administracyjnymi witryny i sprawdzić, czy to, co robisz, przynosi oczekiwane rezultaty.
Denis de Bernardy,
7

Zdecydowanie powinieneś rozważyć Selen .

Umożliwia rejestrowanie działań (np. Wprowadzanie danych do formularza, klikanie łącza), a następnie wykonywanie twierdzeń. Integruje się również z PHPUnit. Bardzo polecam sprawdzenie dwuminutowej wersji demonstracyjnej.

Ethan Seifert
źródło
Dzięki za sugestię, słyszałem o tym wcześniej. Czy rzeczywiście korzystałeś z projektów WordPress? Po prostu ciekawy.
MikeSchinkel,
Tak. Użyłem go do testowania wtyczki, nad którą pracuję. W poprzednim życiu używaliśmy go do testowania aplikacji EDC do badań klinicznych.
Ethan Seifert,
1

Selen jest prawdopodobnie użyteczny, ale myślę, że w dzisiejszych czasach przekodowanie będzie lepsze i łatwiejsze w użyciu. W przypadku najprostszego testu regresji wizualnej ma nawet rozszerzenie, które wykonuje zrzuty ekranu i automatycznie je porównuje.

Oczywiście testy Codeception WebDriver mogą pójść dalej i przeprowadzić testy regresji funkcjonalnej . Możesz wypełniać i przesyłać formularze, klikać przyciski i linki w witrynie, wykonywać dowolne JS itp. Możesz używać w swoich testach prawdziwej przeglądarki, takiej jak Firefox lub Chrome, lub możesz przeprowadzać bezgłowe testy za pomocą PhantomJS . Oznacza to, że możesz nawet uruchomić testy WebDriver wtyczki w ramach procesu kompilacji na Travis CI, jeśli chcesz.

Istnieje nawet kilka bibliotek specyficznych dla WordPress, które pomogą Ci zacząć:

JD
źródło
1
Selen i Codeception nie są wyłączne. Możesz użyć WP-Browser do napędu Selenium [który obsługuje rzeczywistą przeglądarkę taką jak Chrome], Phantom [która nie jest przeglądarką GUI z obsługą JS], a nawet PHPBrowser, który jest tępą przeglądarką [bardzo szybko, ale nie JS. tj. testy API]. WP-Browser może obsługiwać dowolne z nich.
Jim Maguire,