Uruchamianie testów
Najbardziej widocznym elementem Nette Tester jest narzędzie do uruchamiania testów z wiersza poleceń. Jest niezwykle szybkie i solidne, ponieważ automatycznie uruchamia wszystkie testy jako oddzielne procesy i to równolegle w wielu wątkach. Potrafi również uruchamiać się samo w tzw. trybie watch.
Narzędzie do uruchamiania testów wywołujemy z wiersza poleceń. Jako parametr podajemy katalog z testami. Dla bieżącego katalogu wystarczy podać kropkę:
vendor/bin/tester .
Narzędzie do uruchamiania testów przeszuka podany katalog i wszystkie podkatalogi i wyszuka testy, czyli pliki
*.phpt
i *Test.php
. Jednocześnie czyta i ocenia ich adnotacje, aby wiedzieć, które z nich i jak uruchamiać.
Następnie uruchomi testy. Podczas wykonywania testów wypisuje na bieżąco wyniki na terminal jako znaki:
.
– test przeszedłs
– test został pominięty (skipped)F
– test nie powiódł się (failed)
Wyjście może wyglądać na przykład tak:
_____ ___ ___ _____ ___ ___
|_ _/ __)( __/_ _/ __)| _ )
|_| \___ /___) |_| \___ |_|_\ v2.5.2
Note: No php.ini is used.
PHP 8.3.2 (cli) | php -n | 8 threads
........s..........................
OK (35 tests, 1 skipped, 1.7 seconds)
Przy ponownym uruchomieniu najpierw wykonuje testy, które przy poprzednim uruchomieniu nie powiodły się, więc natychmiast dowiesz się, czy udało Ci się naprawić błąd.
Jeśli żaden test się nie powiedzie, kod powrotu Testera wynosi zero. W przeciwnym razie kod powrotu jest niezerowy.
Tester uruchamia procesy PHP bez php.ini
. Szczegółowiej w części Własny php.ini.
Parametry wiersza poleceń
Przegląd wszystkich opcji wiersza poleceń uzyskamy, uruchamiając Testera bez parametrów lub z parametrem
-h
:
_____ ___ ___ _____ ___ ___ |_ _/ __)( __/_ _/ __)| _ ) |_| \___ /___) |_| \___ |_|_\ v2.5.2 Usage: tester [options] [<test file> | <directory>]... Options: -p <path> Określ interpreter PHP do uruchomienia (domyślnie: php). -c <path> Szukaj pliku php.ini (lub szukaj w katalogu) <path>. -C Użyj systemowego php.ini. -d <key=value>... Zdefiniuj wpis INI 'key' z wartością 'value'. -s Pokaż informacje o pominiętych testach. --stop-on-fail Zatrzymaj wykonywanie przy pierwszym niepowodzeniu. -j <num> Uruchom <num> zadań równolegle (domyślnie: 8). -o <console|console-lines|tap|junit|log|none> (np. -o junit:output.xml) Określ jeden lub więcej formatów wyjściowych z opcjonalną nazwą pliku. -w | --watch <path> Obserwuj katalog. -i | --info Pokaż informacje o środowisku testów i zakończ. --setup <path> Skrypt do konfiguracji runnera. --temp <path> Ścieżka do katalogu tymczasowego. Domyślnie przez sys_get_temp_dir(). --colors [1|0] Włącz lub wyłącz kolory. --coverage <path> Generuj raport pokrycia kodu do pliku. --coverage-src <path> Ścieżka do kodu źródłowego. -h | --help Ta pomoc.
-p <path>
Określa binarkę PHP, która będzie używana do uruchamiania testów. Standardowo jest to php
.
tester -p /home/user/php-7.2.0-beta/php-cgi tests
-c <path>
Określa, który php.ini
będzie używany podczas uruchamiania testów. Domyślnie żaden php.ini nie jest
używany. Więcej w części Własny php.ini.
-C
Użyty zostanie systemowy php.ini
. Na UNIXie również wszystkie odpowiednie pliki INI
/etc/php/{sapi}/conf.d/*.ini
. Więcej w części Własny php.ini.
-d <key=value>
Ustawia wartość dyrektywy konfiguracyjnej PHP dla testów. Parametr może być użyty wielokrotnie.
tester -d max_execution_time=20
-s
Wyświetlone zostaną informacje o pominiętych testach.
--stop-on-fail
Tester zatrzyma testowanie przy pierwszym niepowodzeniu testu.
-j <num>
Określa, ile równoległych procesów z testami zostanie uruchomionych. Domyślna wartość to 8. Jeśli chcemy, aby wszystkie testy przebiegły seryjnie, użyjemy wartości 1.
-o <console|console-lines|tap|junit|log|none>
Ustawia format wyjścia. Domyślny jest format dla konsoli. Możesz podać nazwę pliku, do którego zostanie zapisane wyjście
(np. -o junit:output.xml
). Opcję -o
można powtórzyć wielokrotnie, aby wygenerować więcej
formatów naraz.
console
: zgodne z domyślnym formatem, ale w tym przypadku nie wyświetli się logo ASCIIconsole-lines
: podobne do console, ale wynik każdego testu jest podany w osobnej linii z dodatkowymi informacjamitap
: format TAP odpowiedni do przetwarzania maszynowegojunit
: format XML JUnit, również odpowiedni do przetwarzania maszynowegolog
: Wyjścia przebiegu testowania. Wszystkie nieudane, pominięte, a także udane testynone
: nic się nie wypisuje
-w | --watch <path>
Po zakończeniu testowania Tester nie kończy pracy, ale pozostaje uruchomiony i śledzi pliki PHP w podanym katalogu. Przy zmianie uruchomi testy ponownie. Parametr może być użyty wielokrotnie, jeśli chcemy śledzić więcej katalogów.
Przydaje się przy refaktoryzacji biblioteki lub debugowaniu testów.
tester --watch src tests
-i | --info
Wyświetla informacje o środowisku uruchomieniowym dla testów. Na przykład:
tester -p /usr/bin/php7.1 -c tests/php.ini --info PHP binary: /usr/bin/php7.1 PHP version: 7.1.7-1+0~20170711133844.5+jessie~1.gbp5284f4 (cli) Code coverage engines: (not available) Loaded php.ini files: /var/www/dev/demo/tests/php.ini PHP temporary directory: /tmp Loaded extensions: Core, ctype, date, dom, ereg, fileinfo, filter, hash, ...
--setup <path>
Tester przy starcie wczytuje podany skrypt PHP. W nim dostępna jest zmienna Tester\Runner\Runner $runner
.
Załóżmy plik tests/runner-setup.php
z zawartością:
$runner->outputHandlers[] = new MyOutputHandler;
Testera uruchomimy:
tester --setup tests/runner-setup.php tests
--temp <path>
Ustawia ścieżkę do katalogu dla tymczasowych plików Testera. Domyślną wartość zwraca sys_get_temp_dir()
.
Jeśli domyślna wartość nie jest poprawna, zostaniesz powiadomiony.
Jeśli nie jesteśmy pewni, jaki katalog jest używany, uruchomimy Testera z parametrem --info
.
--colors 1|0
Domyślnie Tester wykrywa kolorowy terminal i koloruje swoje wyjście. Ta opcja nadpisuje autodetekcję. Globalnie możemy
kolorowanie ustawić zmienną środowiskową systemu NETTE_TESTER_COLORS
.
--coverage <path>
Tester wygeneruje raport z przeglądem, ile kodu źródłowego pokrywają testy. Ta opcja wymaga zainstalowanego rozszerzenia PHP Xdebug, lub PCOV, albo PHP 7 z PHPDBG SAPI, które jest szybsze. Rozszerzenie pliku docelowego określa jego format. Albo HTML, albo Clover XML.
tester tests --coverage coverage.html # raport HTML tester tests --coverage coverage.xml # raport Clover XML
Priorytet wyboru mechanizmu jest następujący:
- PCOV
- PHPDBG
- Xdebug
Przy użyciu PHPDBG możemy przy obszernych testach napotkać na niepowodzenie testu z powodu wyczerpania pamięci. Zbieranie
informacji o pokrytym kodzie jest pamięciochłonne. W tym przypadku pomoże nam wywołanie
Tester\CodeCoverage\Collector::flush()
wewnątrz testu. Zapisze zebrane dane na dysk i zwolni pamięć. Jeśli
zbieranie danych nie przebiega lub jest używany Xdebug, wywołanie nie ma żadnego efektu.
Przykładowy raport HTML z pokryciem kodu.
--coverage-src <path>
Użyjemy jednocześnie z opcją --coverage
. <path>
to ścieżka do kodów źródłowych, dla
których raport jest generowany. Może być użyty wielokrotnie.
Własny php.ini
Tester uruchamia procesy PHP z parametrem -n
, co oznacza, że żaden php.ini
nie jest wczytywany. W
UNIXie również te z /etc/php/conf.d/*.ini
. To zapewnia jednakowe środowisko dla przebiegu testów, ale również
wyłącza wszystkie rozszerzenia PHP normalnie wczytywane przez systemowe PHP.
Jeśli chcesz zachować wczytywanie systemowych plików php.ini, użyj parametru -C
.
Jeśli potrzebujesz jakichś rozszerzeń lub specjalnych ustawień INI dla testów, zalecamy utworzenie własnego pliku
php.ini
, który będzie dystrybuowany z testami. Testera następnie uruchamiamy z parametrem -c
, na
przykład tester -c tests/php.ini tests
, gdzie plik INI może wyglądać tak:
[PHP]
extension=php_pdo_mysql.dll
extension=php_pdo_pgsql.dll
memory_limit=512M
Uruchomienie Testera w UNIXie z systemowym php.ini
, na przykład tester -c /etc/php/cli/php.ini
nie
wczyta pozostałych INI z /etc/php/conf.d/*.ini
. To jest właściwość PHP, nie Testera.