10 narzędzi do testowania PHP dla wtyczek WordPress
Opublikowany: 2022-08-05Żadne oprogramowanie nie jest wolne od błędów. Jest to aksjomat, który dotyczy każdego języka programowania i każdej aplikacji.
Gdy te błędy zostaną wdrożone w Twojej witrynie w środowisku produkcyjnym, możesz ponieść niekorzystne konsekwencje o różnej wadze. Oto kilka przykładów, od irytujących po szkodliwe ekonomicznie:
- Łagodne: użytkownik nie może kliknąć uszkodzonego linku.
- Poważne: Niedziałający przycisk „Prześlij” w formularzu kontaktowym, który użytkownik odkrywa dopiero po skomponowaniu wiadomości.
- Poważne: brama płatności niepoprawnie skonfigurowana, przez co użytkownicy nie mogą kupować produktów w Twoim sklepie e-commerce, a tym samym opuszczają witrynę.
Żadne pojedyncze narzędzie nie wystarczy, aby obsłużyć wszystkie aspekty testowania aplikacji pod każdym możliwym kątem. Rzeczywiście, oprócz znajdowania błędów, ważne jest wykonanie dodatkowych testów w celu sprawdzenia innych funkcji aplikacji, takich jak:
- Dostępność i użyteczność
- Akceptowalna wydajność
- Ruch i obsługa ładunków
W tym artykule omówimy 10 narzędzi stworzonych przez społeczność open source, które mogą pomóc w przygotowaniu stosu do testowania kodu PHP we wtyczkach WordPress. Niektóre z tych narzędzi zostały zaprojektowane specjalnie do testowania kodu PHP; inne przeznaczone są do testowania kodu WordPress; i kilka innych narzędzi zostało stworzonych do obsługi niektórych ogólnych funkcji, które są przydatne do testowania.
1. DevKinsta
DevKinsta to lokalny pakiet programistyczny dla witryn WordPress. Wystarczy podać kilka podstawowych informacji, aby lokalna instancja witryny WordPress była instalowana natychmiast i zawiera kilka przydatnych narzędzi programistycznych, takich jak skrzynka odbiorcza, menedżer bazy danych i logowanie, co ułatwia rozwiązywanie problemów.
DevKinsta jest zwykle używany przez programistów i projektantów podczas tworzenia motywów i wtyczek WordPress. Ale może być również używany jako lokalny serwer WWW do wykonywania testów integracji i funkcjonalności. Jest to realizowane w połączeniu z narzędziem HTTP, które pomaga zweryfikować poprawność treści odpowiedzi i nagłówków.
Najważniejsze funkcje DevKinsta to:
- Łatwe uruchamianie nowego środowiska WordPress i usuwanie go, gdy nie jest już potrzebne
- Umożliwia testowanie na dowolnej obsługiwanej wersji PHP i WordPress oraz dowolnej ich kombinacji
- Bezproblemowo integruje się z MyKinsta, gdzie użytkownicy mogą tworzyć zewnętrzną kopię zapasową swoich witryn i danych
2. Jednostka PHP
PHPUnit jest zorientowanym na programistę frameworkiem testowym dla PHP. Jest to najpopularniejszy framework do wykonywania testów jednostkowych w kodzie PHP, których celem jest walidacja poszczególnych jednostek kodu źródłowego.
Testy PHPUnit pozwalają programistom znaleźć problemy tak wcześnie, jak to możliwe w cyklu rozwojowym, pomagając zapewnić, że nie zostały wprowadzone żadne regresje kodu (tj. zmiany w jakimś kawałku kodu nie spowodowały problemów w innym miejscu).
Najważniejsze funkcje PHPUnit to:
- Testowanie nowych funkcji
- Weryfikacja kodu na nowo zrefaktoryzowanego
- Może być w pełni zautomatyzowany i wykonany w ramach wybranego procesu ciągłej integracji
- Debugowanie
- Automatyczna dokumentacja oczekiwanego użycia poprzez wywołanie funkcjonalności i ograniczenia
- Pozwala na podejście Test-Driven Development (TDD), w którym programiści najpierw tworzą najpierw testy, a następnie funkcjonalność
3. Mózg Małpy
Brain Monkey to narzędzie do testowania PHP i WordPress. Zapewnia narzędzia niezależne od frameworka, które pozwalają przedefiniować metody PHP i przetestować zachowanie dowolnej aplikacji PHP. Zapewnia również narzędzia specyficzne do testowania kodu WordPress.
Najważniejsze cechy Brain Monkey to:
- Umożliwia interakcję testów jednostkowych z zewnętrznymi, rozładowanymi bibliotekami
- Umożliwia wywoływanie funkcji WordPress bez konieczności ładowania środowiska WordPress
- Może twierdzić, że funkcje WordPress (takie jak
add_filter
lubdo_action
) wywołują funkcjonalność zgodnie z oczekiwaniami
4. Fałszywy mózg
Brain Faker wykorzystuje Faker (popularną bibliotekę PHP do generowania fałszywych danych) i Brain Monkey, aby zapewnić łatwe generowanie fałszywych obiektów WordPress i powiązanych funkcji do przetestowania, w tym:
- Instancje
WP_Post
i funkcje związane z mockami, takie jakget_post
iget_post_field
- Instancje
WP_User
i funkcje związane z mockami, takie jakget_userdata
,get_user_by
,user_can
i inne - Instancje
WP_Term
i funkcje związane z mockami, takie jakget_term
iget_term_by
- Instancje
WP_Comment
- Instancje
WP_Site
i funkcje związane z mockami, takie jakget_site
- Instancje
WP_Post_Type
i funkcje związane z mockami, takie jakget_post_type_object
ipost_type_exists
- Instancje
WP_Taxonomy
i funkcje związane z mockami, takie jakget_taxonomy
itaxonomy_exists
- Instancje
WP_Error
Najważniejsze funkcje Brain Fakera to:
- Wstrzykuje fałszywe, ale realistyczne dane WordPress do testu jednostkowego — dostęp do daty modyfikacji fałszywego posta będzie zachowywał się jak data (np
2022-04-17T13:06:58+00:00
), nazwa użytkownika będzie pasować (np."John Smith"
), fałszywa instancja posta jest tworzona przez fałszywą instancję użytkownika itd. - Fałszywe dane mogą być wstępnie dostarczone lub wygenerowane losowo
- Rozszerzalny — programiści mogą wyśmiewać klasy i funkcje z własnych wtyczek WordPress
5. Kpina
Mockery jest prostym, ale elastycznym frameworkiem do próbnych obiektów PHP, przeznaczonym do użycia razem z PHPUnit, PHPSpec lub dowolnym innym frameworkiem do testowania jednostek. Oferuje testową podwójną strukturę, która jest w stanie zdefiniować wszystkie możliwe operacje i interakcje na obiektach przy użyciu czytelnego dla człowieka języka specyficznego dla domeny (DSL).
Najważniejsze cechy kpiny to:
- Umożliwia elastyczne generowanie pozorowanych obiektów i kodów pośredniczących (które zapewniają predefiniowane gotowe odpowiedzi na określone połączenia wykonane podczas testów)
- Zwiększa możliwości izolacji testów PHPUnit
- Elastyczne API do wyrażania wyśmiewanych oczekiwań, naśladujące w miarę możliwości opis w języku naturalnym (np
$mock->shouldReceive('myMethod')->once()->andReturn('Hello world!');
) - Testy jednostkowe z wykorzystaniem pozorowanych obiektów w pamięci, aby uniknąć konieczności uzyskiwania dostępu do wolniejszych systemów (takich jak bazy danych, systemy plików lub usługi zewnętrzne)
- Może kpić zarówno z deterministycznego, jak i niedeterministycznego zachowania
6. Natywne narzędzie do eksportu WordPress
Natywne narzędzie do eksportu WordPressa pobiera dane WordPress z witryny na urządzenie jako plik XML, w tym posty, strony, niestandardowe typy postów, komentarze, pola niestandardowe, kategorie, tagi, niestandardowe taksonomie, użytkowników i multimedia. Plik XML ma niestandardowy format (o nazwie WordPress eXtended RSS lub plik WXR), który można zaimportować do dowolnej witryny WordPress.
To narzędzie nie jest przeznaczone do testowania. Jednak jego użyteczność wynika z możliwości tworzenia migawek bazy danych WordPressa zawierającej odpowiedni zestaw danych, które można następnie wykorzystać do testów. Oznacza to, że produkcyjna witryna WordPress, która zawiera prawdziwe dane, może zostać wyeksportowana i zaimportowana do instancji deweloperskiej lub tymczasowej w celu przetestowania nowej funkcjonalności.
Najważniejsze funkcje narzędzia do eksportu WordPress to:
- Tworzenie danych testowych za pomocą rzeczywistej witryny WordPress
- Udostępniany plik eksportu całej bazy danych
- Przydatne zarówno do testów integracyjnych, jak i jednostkowych
7. Chleb
Guzzle to klient PHP HTTP, który ułatwia wysyłanie żądań HTTP i integrację z usługami internetowymi.
Guzzle jest narzędziem generycznym, więc testowanie jest tylko jednym z możliwych przypadków użycia. Wraz z lokalnym serwerem sieciowym, takim jak DevKinsta, Guzzle umożliwia wykonywanie testów integracyjnych: można użyć Guzzle do wysłania żądania HTTP do serwera deweloperskiego, a następnie przekazać odpowiedź do testu jednostkowego w PHPUnit, który weryfikuje zawartość i nagłówki są ustawione zgodnie z oczekiwaniami.
Najważniejsze cechy Guzzle to:
- Spełnia standardową rekomendację PHP „PSR-7” (dla interfejsów komunikatów HTTP), uniemożliwiając uzależnienie od dostawcy
- Prosty i szybki
- Testy są przeprowadzane na rzeczywistej witrynie WordPress, co zwiększa niezawodność
- Może być wykonywany z poziomu PHPUnit dla łatwości i szybkości
- Testy integracyjne można zautomatyzować i dodać do procesu Continuous Integration
8. WP-CLI
WP-CLI to interfejs wiersza poleceń dla WordPress. Dzięki niemu możesz aktualizować wtyczki, konfigurować instalacje wielostanowiskowe i wiele więcej, bez korzystania z przeglądarki internetowej.
WP-CLI nie jest konkretnie narzędziem testowym, ale testowanie jest jednym z wielu jego przypadków użycia. Na przykład, po uruchomieniu nowego serwera deweloperskiego, możesz wykonać skrypt bash zawierający polecenia WP-CLI, aby zaimportować dane testowe do witryny WordPress, utworzyć użytkowników z odpowiednimi rolami i możliwościami, zainstalować potrzebne wtyczki innych firm i inne takie zadania.
Ponieważ skrypt z poleceniami WP-CLI może być przechowywany w repozytorium Git, proces wykonywania testów integracyjnych można następnie zautomatyzować i zintegrować z procesem ciągłej integracji:
- Użyj narzędzia do eksportu WordPress, aby wygenerować rzeczywiste dane testowe i przechowywać je w repozytorium Git.
- Użyj DevKinsta, aby uruchomić serwer WWW z nową instancją WordPress.
- Użyj WP-CLI, aby zaimportować dane testowe do witryny WordPress (DevKinsta może być obsługiwany przez WP-CLI).
- Utwórz test jednostkowy w PHPUnit, aby Guzzle wykonał żądanie HTTP na serwerze sieciowym, aby zweryfikować treść i nagłówki odpowiedzi.
Najważniejsze funkcje WP-CLI to:
- Umożliwia zdalne wykonywanie poleceń względem instancji WordPress za pośrednictwem interfejsu wiersza poleceń
- Możliwość rozbudowy o inne narzędzia
- Zwiększa możliwości stosu testowego
- Pozwala na pełną automatyzację procesu
9. XDebug
XDebug to rozszerzenie dla PHP, które zapewnia szereg funkcji poprawiających środowisko programowania PHP, w tym debugowanie, ulepszenia raportowania błędów PHP, śledzenia, profilowania i analizy pokrycia kodu.
XDebug nie pomoże Ci przetestować kodu, ale pomoże dowiedzieć się, gdzie jest błąd. Połączenie XDebug z PHPUnit jest szczególnie skuteczne: jeśli test się nie powiedzie i nie możesz znaleźć źródła problemu, możesz użyć XDebug, aby dodać punkty przerwania w kodzie testu jednostkowego. Po ponownym uruchomieniu testu jednostkowego, skrypt PHP zostanie zatrzymany w każdym z tych punktów przerwania, co pozwoli ci sprawdzić bieżący stan wykonania (stos wywołań, wartości właściwości i obiektów itp.) i spróbować odkryć, co jest nie tak.
Najważniejsze funkcje XDebug to:
- Zawiera integracje z popularnymi edytorami PHP, w tym VS Code, PHPStorm i Sublime
- Profiluje, ile czasu zajmuje każde wywołanie funkcji i ile pamięci zużywa
- Znacznie potężniejszy niż zwykłe użycie
var_dump
do debugowania kodu - Pozwala na modyfikację wartości zmiennych w locie podczas wstrzymywania na punktach przerwania
10. PHPStan
PHPStan to statyczne narzędzie do analizy PHP, zaprojektowane do wyszukiwania błędów w kodzie jeszcze przed napisaniem testów.
Celem PHPStan jest zmniejszenie liczby testów, które muszą napisać programiści. To narzędzie jest pierwszym wykonywanym na stosie testowym, wyłapując z wyprzedzeniem jak najwięcej błędów. Tylko te błędy, których nie można wywnioskować z analizy statycznej (np. te z wadliwą logiką), muszą zostać zweryfikowane za pomocą testów jednostkowych.
PHPStan działa poprzez skanowanie całej bazy kodu i szukanie niezgodności. Na przykład wartość odpowiedzi z funkcji, która zwraca liczbę zmiennoprzecinkową, nie może być przypisana do parametru funkcji typu integer. Za każdym razem, gdy kod zawiera takie zdarzenie, jest to potencjalny błąd, a PHPStan poinformuje Cię o tym na etapie rozwoju, podczas pisania kodu aplikacji.
Najważniejsze funkcje PHPStan to:
- Automatyzacja i integracja w ramach istniejącego procesu Continuous Integration
- Lokalizuje wiele trudnych błędów, takich jak niezgodności typów
- Skanuje całą bazę kodu, znajdując błędy w rzadko wykonywanych fragmentach kodu
- Zorganizowane na poziomach o rosnącej złożoności, aby umożliwić stopniową integrację
- Zawiera rozszerzenia dla najpopularniejszych frameworków PHP i CMS, w tym Symfony, Laravel, Doctrine, Nette i WordPress
Streszczenie
Koszt niepostrzeżonego prześlizgnięcia się błędów do Twojej aplikacji w środowisku produkcyjnym może być szkodliwy dla Twojej reputacji i dochodów, dlatego musisz spróbować je wyeliminować, zanim wpłyną one na Twoich użytkowników.
W złożonych aplikacjach prawie nie można mieć 100% pewności, że nie będzie zawierał żadnych błędów. Z tego powodu musisz skonfigurować proces wyszukiwania i usuwania jak największej liczby błędów podczas początkowego cyklu rozwoju.
Dzięki dobrze zaprojektowanemu zestawowi narzędzi do testowania możesz znacznie zminimalizować szanse, że Twoja aplikacja będzie zachowywać się w nieoczekiwany sposób. Społeczność open source stworzyła i udostępniła wiele narzędzi do testowania różnych aspektów aplikacji, które możesz – i powinieneś! — wykorzystać do stworzenia kompleksowego zestawu testowego.
W tym artykule omówiliśmy 10 narzędzi, które pomogą Ci osiągnąć cele testowania kodu PHP we wtyczce WordPress.
Którego z tych narzędzi używałeś w swoim ostatnim projekcie? Daj nam znać, co z nim zbudowałeś w sekcji komentarzy poniżej!