Testleri Çalıştırma

Nette Tester'ın en belirgin parçası, komut satırından çalışan test çalıştırıcısıdır. Tüm testleri otomatik olarak ayrı işlemler halinde ve paralel olarak birden fazla iş parçacığında çalıştırdığı için son derece hızlı ve sağlamdır. Ayrıca, sözde izleme modunda kendi kendini de çalıştırabilir.

Test çalıştırıcısını komut satırından çağırırız. Parametre olarak testlerin bulunduğu dizini belirtiriz. Mevcut dizin için sadece bir nokta girmek yeterlidir:

vendor/bin/tester .

Test çalıştırıcısı belirtilen dizini ve tüm alt dizinleri tarayarak *.phpt ve *Test.php dosyaları olan testleri arar. Aynı zamanda ek açıklamalarını okur ve değerlendirir, böylece hangilerini ve nasıl çalıştıracağını bilir.

Ardından testleri çalıştırır. Testlerin yürütülmesi sırasında, sonuçları sürekli olarak terminale karakterler olarak yazdırır:

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

Çıktı örneğin şöyle görünebilir:

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

Not: php.ini kullanılmıyor.
PHP 8.3.2 (cli) | php -n | 8 iş parçacığı

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

OK (35 test, 1 atlandı, 1.7 saniye)

Tekrarlanan çalıştırmada, önce önceki çalıştırmada başarısız olan testleri yürütür, böylece hatayı düzeltip düzeltmediğinizi hemen öğrenirsiniz.

Hiçbir test başarısız olmazsa, Tester'ın dönüş kodu sıfırdır. Aksi takdirde, dönüş kodu sıfır değildir.

Tester, PHP işlemlerini php.ini olmadan çalıştırır. Daha ayrıntılı bilgi Özel php.ini bölümünde.

Komut Satırı Parametreleri

Tüm komut satırı seçeneklerine genel bir bakış, Tester'ı parametresiz veya -h parametresiyle çalıştırarak elde edilir:

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

Kullanım:
    tester [seçenekler] [<test dosyası> | <dizin>]...

Seçenekler:
    -p <yol>                     Çalıştırılacak PHP yorumlayıcısını belirtin (varsayılan: php).
    -c <yol>                     php.ini dosyasını <yol> içinde arayın (veya dizine bakın).
    -C                           Sistem genelindeki php.ini'yi kullanın.
    -d <anahtar=değer>...        'anahtar' INI girişini 'değer' değeriyle tanımlayın.
    -s                           Atlanan testler hakkında bilgi gösterin.
    --stop-on-fail               İlk başarısızlıkta yürütmeyi durdurun.
    -j <sayı>                    Paralel olarak <sayı> iş çalıştırın (varsayılan: 8).
    -o <console|console-lines|tap|junit|log|none>  (örneğin -o junit:output.xml)
                                 İsteğe bağlı dosya adıyla bir veya daha fazla çıktı biçimi belirtin.
    -w | --watch <yol>           Dizini izleyin.
    -i | --info                  Test ortamı bilgilerini gösterin ve çıkın.
    --setup <yol>                Çalıştırıcı kurulumu için betik.
    --temp <yol>                 Geçici dizin yolu. Varsayılan olarak sys_get_temp_dir() kullanılır.
    --colors [1|0]               Renkleri etkinleştirin veya devre dışı bırakın.
    --coverage <yol>             Dosyaya kod kapsamı raporu oluşturun.
    --coverage-src <yol>         Kaynak kodunun yolu.
    -h | --help                  Bu yardım.

-p <path>

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

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

-c <path>

Testleri çalıştırırken hangi php.ini dosyasının kullanılacağını belirtir. Varsayılan olarak hiçbir php.ini kullanılmaz. Daha fazla bilgi için Özel php.ini bölümüne bakın.

-C

Sistem genelindeki php.ini kullanılır. UNIX üzerinde ayrıca ilgili tüm INI dosyaları /etc/php/{sapi}/conf.d/*.ini kullanılır. Daha fazla bilgi için Özel php.ini bölümüne bakın.

-d <key=value>

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

tester -d max_execution_time=20

-s

Atlanan testler hakkında bilgi gösterilir.

--stop-on-fail

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

-j <num>

Kaç tane paralel test işleminin başlatılacağını belirtir. Varsayılan değer 8'dir. Tüm testlerin seri olarak çalışmasını istiyorsak, 1 değerini kullanırız.

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

Çıktı biçimini ayarlar. Varsayılan biçim konsol biçimidir. Çıktının yazılacağı bir dosya adı belirtebilirsiniz (örneğin -o junit:output.xml). -o seçeneği birden çok kez tekrarlanabilir ve böylece aynı anda birden çok biçim oluşturulabilir.

  • console: varsayılan biçimle aynıdır, ancak bu durumda ASCII logosu gösterilmez
  • console-lines: console'a benzer, ancak her testin sonucu ek bilgilerle ayrı bir satırda listelenir
  • tap: makine işleme için uygun TAP formatı
  • junit: JUnit XML formatı, aynı zamanda makine işleme için uygundur
  • log: Test ilerlemesinin çıktıları. Tüm başarısız, atlanmış ve ayrıca başarılı testler
  • none: hiçbir şey yazdırılmaz

-w | --watch <path>

Test tamamlandıktan sonra Tester sonlanmaz, çalışmaya devam eder ve belirtilen dizindeki PHP dosyalarını izler. Değişiklik olduğunda testleri yeniden başlatır. Parametre, birden fazla dizini izlemek istiyorsak birden çok kez kullanılabilir.

Bir kütüphaneyi yeniden düzenlerken veya testlerde hata ayıklarken kullanışlıdır.

tester --watch src tests

-i | --info

Testler için çalışma zamanı ortamı hakkındaki bilgileri gösterir. Örneğin:

tester -p /usr/bin/php7.1 -c tests/php.ini --info

PHP ikili dosyası:
/usr/bin/php7.1

PHP sürümü:
7.1.7-1+0~20170711133844.5+jessie~1.gbp5284f4 (cli)

Kod kapsamı motorları:
(mevcut değil)

Yüklenen php.ini dosyaları:
/var/www/dev/demo/tests/php.ini

PHP geçici dizini:
/tmp

Yüklenen uzantılar:
Core, ctype, date, dom, ereg, fileinfo, filter, hash, ...

--setup <path>

Tester başlangıçta belirtilen PHP betiğini yükler. Bu betikte Tester\Runner\Runner $runner değişkeni mevcuttur. İçeriği aşağıdaki gibi olan tests/runner-setup.php dosyasını varsayalım:

$runner->outputHandlers[] = new MyOutputHandler;

Tester'ı ç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() fonksiyonu döndürür. Varsayılan değer geçerli değilse, bir uyarı alırsınız.

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

--colors 1|0

Varsayılan olarak Tester renkli bir terminal algılar ve çıktısını renklendirir. Bu seçenek otomatik algılamayı geçersiz kılar. Renklendirmeyi genel olarak NETTE_TESTER_COLORS sistem ortam değişkeniyle ayarlayabiliriz.

--coverage <path>

Tester, testlerin kaynak kodunun ne kadarını kapsadığına dair bir rapor oluşturur. Bu seçenek, kurulu Xdebug PHP uzantısını veya PCOV'u ya da daha hızlı olan PHPDBG SAPI'li PHP 7'yi gerektirir. Hedef dosyanın uzantısı, biçimini belirler: HTML veya Clover XML.

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

Mekanizma seçim önceliği şöyledir:

  1. PCOV
  2. PHPDBG
  3. Xdebug

PHPDBG kullanırken, kapsamlı testlerde bellek tükenmesi nedeniyle test hatasıyla karşılaşabiliriz. Kod kapsamı bilgilerinin toplanması bellek yoğundur. Bu durumda, test içinde Tester\CodeCoverage\Collector::flush() çağrısı yardımcı olur. Bu çağrı, toplanan verileri diske yazar ve belleği serbest bırakır. Veri toplama işlemi gerçekleşmiyorsa veya Xdebug kullanılıyorsa, çağrının hiçbir etkisi olmaz.

Kod kapsamıyla ilgili HTML raporu örneği.

--coverage-src <path>

--coverage seçeneğiyle birlikte kullanılır. <path>, raporun oluşturulduğu kaynak kodlarının yoludur. Bu parametre birden çok kez kullanılabilir.

Özel php.ini

Tester, PHP işlemlerini -n parametresiyle çalıştırır, bu da hiçbir php.ini dosyasının yüklenmediği anlamına gelir. UNIX üzerinde /etc/php/conf.d/*.ini içindekiler bile yüklenmez. Bu, testlerin çalışması için tutarlı bir ortam sağlar, ancak aynı zamanda sistem PHP'si tarafından normalde yüklenen tüm PHP uzantılarını da devre dışı bırakır.

Sistem php.ini dosyalarının yüklenmesini sürdürmek istiyorsanız, -C parametresini kullanın.

Testler için bazı uzantılara veya özel INI ayarlarına ihtiyacınız varsa, testlerle birlikte dağıtılacak kendi php.ini dosyanızı oluşturmanız önerilir. Tester'ı daha sonra -c parametresiyle çalıştırırız, ö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

Tester'ı UNIX üzerinde sistem php.ini ile çalıştırmak, örneğin tester -c /etc/php/cli/php.ini, /etc/php/conf.d/*.ini içindeki diğer INI dosyalarını yüklemez. Bu, Tester'ın değil, PHP'nin bir özelliğidir.