Testleri Çalıştırma

Nette Tester'ın en görünür parçası komut satırı test çalıştırıcısıdır. Son derece hızlı ve sağlamdır; çünkü tüm testleri, birden çok iş parçacığı kullanarak ayrı süreçler hâlinde paralel olarak otomatik çalıştırır. Kendini izleme kipinde de çalıştırabilir.

Test çalıştırıcısı komut satırından çağrılır. Testleri içeren dizini parametre olarak verin. Geçerli dizin için yalnızca bir nokta girin:

vendor/bin/tester .

Test çalıştırıcısı belirtilen dizini ve tüm alt dizinlerini tarar; *.phpt ya da *Test.php ile biten dosyalar olan testleri arar. Ayrıca hangi testlerin ve nasıl çalıştırılacağını belirlemek için annotation'larını okuyup değerlendirir.

Her test dosyası kendi yalıtılmış PHP sürecinde çalışır ve çalıştırıcı bunlardan birkaçını aynı anda yürütür; yani paralellik birimi dosyadır. Tek bir dosyadaki kod bu yüzden sırayla çalışır. Bir TestCase tek bir dosyada yaşar, dolayısıyla metotları varsayılan olarak tek bir süreçte birbiri ardına çalışır; çalıştırıcının her test metodunu ayrı bir paralel süreç olarak çalıştırması için onu @testCase annotation'ıyla işaretleyin.

Ardından testleri yürütür. Yürütme sırasında ilerlemeyi göstermek için terminale karakterler yazdırır:

  • . – test geçti
  • s – test atlandı
  • F – test başarısız oldu

Çıktı şöyle görünebilir:

 _____ ___  ___ _____ ___  ___
|_   _/ __)( __/_   _/ __)| _ )
  |_| \___ /___) |_| \___ |_|_\  v2.6.1

PHP 8.5.2 (cli) | php | 8 threads

........s..........................

OK (35 tests, 1 skipped, 1.7 seconds)

Yeniden çalıştırıldığında önce bir önceki çalıştırmada başarısız olan testleri yürütür; böylece hatayı düzeltip düzeltmediğinizi hemen bilirsiniz.

Hiçbir test başarısız olmazsa Tester'ın çıkış kodu sıfırdır. Aksi hâlde sıfırdan farklıdır.

Komut Satırı Seçenekleri

Komut satırı seçeneklerine genel bakışı, Tester'ı parametresiz ya da -h seçeneğiyle çalıştırarak alabilirsiniz:

 _____ ___  ___ _____ ___  ___
|_   _/ __)( __/_   _/ __)| _ )
  |_| \___ /___) |_| \___ |_|_\  v2.6.1

Usage:
    tester [options] [<test file> | <directory>]...

Options:
    -p <path>                    Specify PHP interpreter to run (default: php).
    -c <path>                    Use custom php.ini, ignore system configuration.
    -C                           With -c, include system configuration as well.
    -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>

Testleri çalıştırmak için kullanılacak PHP ikili dosyasını belirtir. Varsayılan olarak php'dir.

tester -p /home/user/php-7.2.0-beta/php-cgi tests

-c <path>

Özel bir php.ini dosyası kullanır ve sistem yapılandırmasını yok sayar. Bu, testleri belirli ayarlarla çalıştırmak için yararlıdır. Daha fazla bilgi için bkz. Kendi php.ini Dosyanız.

-C

-c ile birlikte kullanıldığında sistem yapılandırmasını da dahil eder (yok saymaz). Bkz. Kendi php.ini Dosyanız bölümü.

-d <key=value>

Testler için bir PHP yapılandırma yönergesinin değerini ayarlar. Bu parametre birden çok kez kullanılabilir.

tester -d max_execution_time=20

-s

Atlanan testler hakkında bilgi görüntüler.

--stop-on-fail

Tester, başarısız olan ilk testte test etmeyi durdurur.

-j <num>

Testlerin çalıştırılacağı paralel süreç sayısını belirtir. Varsayılan değer 8'dir. Testleri sırayla çalıştırmak için 1 değerini kullanın.

-o <console|console-lines|tap|junit|log|none>

Çıktı biçimini ayarlar. Varsayılan konsol biçimidir. Çıktının yazılacağı dosyanın adını belirtebilirsiniz (örneğin -o junit:output.xml). -o seçeneği, birden çok biçimi aynı anda üretmek için defalarca yinelenebilir.

  • console: varsayılan biçimle aynı, ama bu durumda ASCII logo yazdırılmaz
  • console-lines: konsola benzer, ama her testin sonucu ek bilgilerle ayrı bir satırda listelenir
  • tap: makineyle işlemeye uygun TAP biçimi
  • junit: yine makineyle işlemeye uygun JUnit XML biçimi
  • log: test ilerlemesini çıktılar. Başarısız, atlanan ve ayrıca başarılı tüm testleri içerir
  • none: hiçbir şey yazdırılmaz

-w | --watch <path>

Testler tamamlandıktan sonra Tester çıkmaz, çalışmayı sürdürür ve belirtilen dizindeki PHP dosyalarını izler. Bir dosya değiştiğinde testleri yeniden çalıştırır. Birden çok dizini izlemek isterseniz bu parametre defalarca kullanılabilir.

Bir kütüphaneyi yeniden düzenlerken ya da testlerde hata ayıklarken yararlıdır.

tester --watch src tests

-i | --info

Testler için çalışma ortamı hakkında bilgi gösterir. Örneğin:

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, başlangıçta belirtilen PHP betiğini yükler. Bu betiğin içinde Tester\Runner\Runner $runner değişkeni kullanılabilir. Şu içeriğe sahip bir tests/runner-setup.php dosyası düşünün:

$runner->outputHandlers[] = new MyOutputHandler;

Tester'ı şöyle çalıştırırız:

tester --setup tests/runner-setup.php tests

--temp <path>

Tester'ın geçici dosyaları için dizin yolunu ayarlar. Varsayılan değeri sys_get_temp_dir() döndürür. Varsayılan değer geçerli değilse bilgilendirilirsiniz.

Hangi dizinin kullanıldığından emin değilseniz, Tester'ı --info parametresiyle çalıştırın.

--colors 1|0

Tester varsayılan olarak terminalin renkleri destekleyip desteklemediğini saptar ve çıktısını buna göre renklendirir. Bu seçenek otomatik saptamayı geçersiz kılar. Renklendirmeyi NETTE_TESTER_COLORS ortam değişkeniyle genel olarak ayarlayabilirsiniz.

--coverage <path>

Tester, kaynak kodun ne kadarının testlerle kapsandığını gösteren bir rapor üretir. Bu seçenek, Xdebug ya da PCOV PHP eklentisinin kurulu olmasını veya daha hızlı olan PHPDBG SAPI'sini gerektirir. Hedef dosyanın uzantısı biçimini belirler: HTML ya da Clover XML.

tester tests --coverage coverage.html  # HTML raporu
tester tests --coverage coverage.xml   # Clover XML raporu

Kapsam motorunun seçilme önceliği şöyledir:

  1. PCOV
  2. PHPDBG
  3. Xdebug

PHPDBG kullanılırken kapsamlı testler bellek tükenmesi nedeniyle başarısız olabilir. Kod kapsamı bilgisi toplamak bellek yoğundur. Bu durumda testinizin içinde Tester\CodeCoverage\Collector::flush() çağırmak yardımcı olabilir. Bu, toplanan veriyi diske yazar ve belleği serbest bırakır. Çağrının etkisi yalnızca PHPDBG motorunda vardır; PCOV, Xdebug ile ya da veri toplama çalışmıyorken hiçbir şey yapmaz.

Kod kapsamı içeren bir `örnek HTML raporuna bakın.

--coverage-src <path>

--coverage seçeneğiyle birlikte kullanılır. <path>, raporun üretildiği kaynak kodun yoludur. Birden çok kez kullanılabilir.

Kendi php.ini Dosyanız

Testleriniz için özel bir php.ini dosyası kullanabilirsiniz. Belirli eklentilere ya da özel INI ayarlarına ihtiyacınız varsa, kendi php.ini dosyanızı oluşturup testlerinizle birlikte dağıtmanızı öneririz. Sonra Tester'ı -c seçeneğiyle çalıştırın, örneğin tester -c tests/php.ini tests. INI dosyası şöyle görünebilir:

[PHP]

extension=php_pdo_mysql.dll
extension=php_pdo_pgsql.dll

memory_limit=512M

-c kullanıldığında Tester sistem yapılandırmasını yok sayar (PHP'yi -n bayrağıyla çalıştırır). Sistem yapılandırmasını da dahil etmek isterseniz -C seçeneğini ekleyin: tester -c tests/php.ini -C tests. -c ile -C birleştirildiğinde bile, UNIX'te /etc/php/conf.d/*.ini dizinindeki diğer INI dosyaları yüklenmez. Bu, Tester'a özgü değil PHP'nin davranışıdır.

2.6 sürümünden önce, -c olmadan Tester PHP'yi -n bayrağıyla, yani php.ini olmadan çalıştırıyordu; -C seçeneği bunu bastırıyordu. 2.6 sürümünden itibaren sistem php.ini dosyası varsayılan olarak yükleniyor. -c kullanıldığındaki davranış değişmedi.