Εκτέλεση δοκιμών
Το πιο ορατό μέρος του Nette Tester είναι ο εκτελεστής δοκιμών από τη γραμμή εντολών. Είναι εξαιρετικά γρήγορος και στιβαρός, καθώς εκτελεί αυτόματα όλες τις δοκιμές ως ξεχωριστές διεργασίες και μάλιστα παράλληλα σε πολλαπλά νήματα. Μπορεί επίσης να εκτελείται μόνος του στη λεγόμενη λειτουργία watch.
Τον εκτελεστή δοκιμών τον καλούμε από τη γραμμή εντολών. Ως παράμετρο δίνουμε τον κατάλογο με τις δοκιμές. Για τον τρέχοντα κατάλογο αρκεί να δώσουμε μια τελεία:
vendor/bin/tester .
Ο εκτελεστής δοκιμών σαρώνει τον καθορισμένο κατάλογο και όλους τους
υποκαταλόγους και αναζητά δοκιμές, οι οποίες είναι αρχεία *.phpt
και *Test.php
. Ταυτόχρονα διαβάζει και αξιολογεί τις annotations τους, για να ξέρει ποιες από αυτές
και πώς να τις εκτελέσει.
Στη συνέχεια εκτελεί τις δοκιμές. Κατά την εκτέλεση των δοκιμών εκτυπώνει συνεχώς τα αποτελέσματα στο τερματικό ως χαρακτήρες:
.
– η δοκιμή πέρασεs
– η δοκιμή παραλείφθηκε (skipped)F
– η δοκιμή απέτυχε (failed)
Η έξοδος μπορεί να μοιάζει κάπως έτσι:
_____ ___ ___ _____ ___ ___
|_ _/ __)( __/_ _/ __)| _ )
|_| \___ /___) |_| \___ |_|_\ 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)
Κατά την επαναλαμβανόμενη εκτέλεση, εκτελεί πρώτα τις δοκιμές που απέτυχαν στην προηγούμενη εκτέλεση, οπότε μαθαίνετε αμέσως αν καταφέρατε να διορθώσετε το σφάλμα.
Εάν καμία δοκιμή δεν αποτύχει, ο κωδικός επιστροφής του Tester είναι μηδέν. Διαφορετικά, ο κωδικός επιστροφής είναι μη μηδενικός.
Ο Tester εκτελεί τις διεργασίες PHP χωρίς php.ini
.
Λεπτομερέστερα στην ενότητα Προσαρμοσμένο
php.ini.
Παράμετροι γραμμής εντολών
Μια επισκόπηση όλων των επιλογών της γραμμής εντολών λαμβάνουμε
εκτελώντας τον Tester χωρίς παραμέτρους ή με την παράμετρο -h
:
_____ ___ ___ _____ ___ ___ |_ _/ __)( __/_ _/ __)| _ ) |_| \___ /___) |_| \___ |_|_\ v2.5.2 Usage: tester [options] [<test file> | <directory>]... Options: -p <path> Specify PHP interpreter to run (default: php). -c <path> Look for php.ini file (or look in directory) <path>. -C Use system-wide php.ini. -d <key=value>... Define INI entry 'key' with value 'value'. -s Show information about skipped tests. --stop-on-fail Stop execution upon the first failure. -j <num> Run <num> jobs in parallel (default: 8). -o <console|console-lines|tap|junit|log|none> (e.g. -o junit:output.xml) Specify one or more output formats with optional file name. -w | --watch <path> Watch directory. -i | --info Show tests environment info and exit. --setup <path> Script for runner setup. --temp <path> Path to temporary directory. Default by sys_get_temp_dir(). --colors [1|0] Enable or disable colors. --coverage <path> Generate code coverage report to file. --coverage-src <path> Path to source code. -h | --help This help.
-p <path>
Καθορίζει το PHP binary που θα χρησιμοποιηθεί για την εκτέλεση των
δοκιμών. Η προεπιλογή είναι php
.
tester -p /home/user/php-7.2.0-beta/php-cgi tests
-c <path>
Καθορίζει ποιο php.ini
θα χρησιμοποιηθεί κατά την εκτέλεση των
δοκιμών. Στην προεπιλεγμένη κατάσταση, δεν χρησιμοποιείται κανένα
php.ini. Περισσότερα στην ενότητα Προσαρμοσμένο
php.ini.
-C
Χρησιμοποιείται το php.ini
του συστήματος. Στο UNIX, επίσης όλα τα
σχετικά αρχεία INI /etc/php/{sapi}/conf.d/*.ini
. Περισσότερα στην ενότητα Προσαρμοσμένο php.ini.
-d <key=value>
Ορίζει την τιμή της οδηγίας διαμόρφωσης PHP για τις δοκιμές. Η παράμετρος μπορεί να χρησιμοποιηθεί πολλές φορές.
tester -d max_execution_time=20
-s
Εμφανίζονται πληροφορίες για τις παραλειφθείσες δοκιμές.
--stop-on-fail
Ο Tester σταματά τις δοκιμές στην πρώτη αποτυχημένη δοκιμή.
-j <num>
Καθορίζει πόσες παράλληλες διεργασίες με δοκιμές θα εκκινηθούν. Η προεπιλεγμένη τιμή είναι 8. Αν θέλουμε όλες οι δοκιμές να εκτελεστούν σειριακά, χρησιμοποιούμε την τιμή 1.
-o <console|console-lines|tap|junit|log|none>
Ορίζει τη μορφή εξόδου. Η προεπιλογή είναι η μορφή για την κονσόλα.
Μπορείτε να δώσετε το όνομα του αρχείου στο οποίο θα γραφτεί η έξοδος
(π.χ. -o junit:output.xml
). Η επιλογή -o
μπορεί να επαναληφθεί πολλές
φορές για να δημιουργηθούν ταυτόχρονα πολλαπλές μορφές.
console
: πανομοιότυπο με την προεπιλεγμένη μορφή, αλλά σε αυτήν την περίπτωση δεν εμφανίζεται το λογότυπο ASCIIconsole-lines
: παρόμοιο με το console, αλλά το αποτέλεσμα κάθε δοκιμής αναφέρεται σε ξεχωριστή γραμμή με περαιτέρω πληροφορίεςtap
: μορφή TAP κατάλληλη για μηχανική επεξεργασίαjunit
: μορφή XML JUnit, επίσης κατάλληλη για μηχανική επεξεργασίαlog
: Έξοδοι της πορείας των δοκιμών. Όλες οι αποτυχημένες, παραλειφθείσες και επίσης οι επιτυχημένες δοκιμέςnone
: τίποτα δεν εκτυπώνεται
-w | --watch <path>
Μετά την ολοκλήρωση των δοκιμών, ο Tester δεν τερματίζει, αλλά παραμένει σε λειτουργία και παρακολουθεί τα αρχεία PHP στον καθορισμένο κατάλογο. Κατά την αλλαγή, εκτελεί ξανά τις δοκιμές. Η παράμετρος μπορεί να χρησιμοποιηθεί πολλές φορές, αν θέλουμε να παρακολουθούμε πολλούς καταλόγους.
Είναι χρήσιμο κατά το refactoring μιας βιβλιοθήκης ή τον εντοπισμό σφαλμάτων στις δοκιμές.
tester --watch src tests
-i | --info
Εμφανίζει πληροφορίες για το περιβάλλον εκτέλεσης των δοκιμών. Για παράδειγμα:
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 κατά την εκκίνηση φορτώνει το καθορισμένο PHP script. Σε αυτό είναι
διαθέσιμη η μεταβλητή Tester\Runner\Runner $runner
. Ας υποθέσουμε το αρχείο
tests/runner-setup.php
με περιεχόμενο:
$runner->outputHandlers[] = new MyOutputHandler;
Εκκινούμε τον Tester:
tester --setup tests/runner-setup.php tests
--temp <path>
Ορίζει τη διαδρομή προς τον κατάλογο για τα προσωρινά αρχεία του Tester.
Η προεπιλεγμένη τιμή επιστρέφεται από την sys_get_temp_dir()
. Εάν η
προεπιλεγμένη τιμή δεν είναι έγκυρη, θα ειδοποιηθείτε.
Εάν δεν είμαστε σίγουροι ποιος κατάλογος χρησιμοποιείται, εκκινούμε
τον Tester με την παράμετρο --info
.
--colors 1|0
Στην προεπιλεγμένη κατάσταση, ο Tester ανιχνεύει το έγχρωμο τερματικό
και χρωματίζει την έξοδό του. Αυτή η επιλογή υπερισχύει της αυτόματης
ανίχνευσης. Μπορούμε να ορίσουμε τον χρωματισμό καθολικά με τη
μεταβλητή περιβάλλοντος συστήματος NETTE_TESTER_COLORS
.
--coverage <path>
Ο Tester θα δημιουργήσει μια αναφορά με επισκόπηση του πόσο πηγαίου κώδικα καλύπτουν οι δοκιμές. Αυτή η επιλογή απαιτεί εγκατεστημένη την επέκταση PHP Xdebug, ή PCOV, ή PHP 7 με PHPDBG SAPI, το οποίο είναι ταχύτερο. Η επέκταση του αρχείου προορισμού καθορίζει τη μορφή του. Είτε HTML είτε Clover XML.
tester tests --coverage coverage.html # Αναφορά HTML tester tests --coverage coverage.xml # Αναφορά Clover XML
Η προτεραιότητα επιλογής μηχανισμού είναι η ακόλουθη:
- PCOV
- PHPDBG
- Xdebug
Κατά τη χρήση του PHPDBG, σε εκτενείς δοκιμές μπορεί να συναντήσουμε
αποτυχία της δοκιμής λόγω εξάντλησης μνήμης. Η συλλογή πληροφοριών για
τον καλυμμένο κώδικα είναι απαιτητική σε μνήμη. Σε αυτήν την περίπτωση,
μας βοηθά η κλήση Tester\CodeCoverage\Collector::flush()
μέσα στη δοκιμή. Γράφει
τα συλλεγμένα δεδομένα στον δίσκο και απελευθερώνει τη μνήμη. Εάν η
συλλογή δεδομένων δεν εκτελείται ή χρησιμοποιείται το Xdebug, η κλήση δεν
έχει κανένα αποτέλεσμα.
Δείγμα αναφοράς HTML με κάλυψη κώδικα.
--coverage-src <path>
Χρησιμοποιούμε ταυτόχρονα με την επιλογή --coverage
. Το
<path>
είναι η διαδρομή προς τους πηγαίους κώδικες για τους
οποίους δημιουργείται η αναφορά. Μπορεί να χρησιμοποιηθεί
επανειλημμένα.
Προσαρμοσμένο php.ini
Ο Tester εκτελεί τις διεργασίες PHP με την παράμετρο -n
, πράγμα που
σημαίνει ότι δεν φορτώνεται κανένα php.ini
. Στο UNIX, ούτε αυτά από το
/etc/php/conf.d/*.ini
. Αυτό εξασφαλίζει ένα ομοιόμορφο περιβάλλον για την
εκτέλεση των δοκιμών, αλλά επίσης απενεργοποιεί όλες τις επεκτάσεις PHP
που φορτώνονται συνήθως από το PHP του συστήματος.
Αν θέλετε να διατηρήσετε τη φόρτωση των αρχείων php.ini του συστήματος,
χρησιμοποιήστε την παράμετρο -C
.
Αν χρειάζεστε κάποιες επεκτάσεις ή ειδικές ρυθμίσεις INI για τις
δοκιμές, συνιστούμε τη δημιουργία ενός δικού σας αρχείου php.ini
,
το οποίο θα διανέμεται με τις δοκιμές. Τον Tester τον εκκινούμε τότε με την
παράμετρο -c
, για παράδειγμα tester -c tests/php.ini tests
, όπου το
αρχείο INI μπορεί να μοιάζει κάπως έτσι:
[PHP]
extension=php_pdo_mysql.dll
extension=php_pdo_pgsql.dll
memory_limit=512M
Η εκκίνηση του Tester στο UNIX με το php.ini
του συστήματος, για
παράδειγμα tester -c /etc/php/cli/php.ini
δεν φορτώνει τα υπόλοιπα INI από το
/etc/php/conf.d/*.ini
. Αυτή είναι μια ιδιότητα της PHP, όχι του Tester.