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çtis
– 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österilmezconsole-lines
: console'a benzer, ancak her testin sonucu ek bilgilerle ayrı bir satırda listelenirtap
: makine işleme için uygun TAP formatıjunit
: JUnit XML formatı, aynı zamanda makine işleme için uygundurlog
: Test ilerlemesinin çıktıları. Tüm başarısız, atlanmış ve ayrıca başarılı testlernone
: 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:
- PCOV
- PHPDBG
- 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.