OpenJDK Test Part2

Kerim Fırat
3 min readMar 15, 2021

OpenJDK Test Part 1 makalesine buradan erişebilirsiniz.

Test Sonuçları Ve Özeti

Test çalıştırmasının sonunda,çalıştırılan tüm testlerin bir özeti geliştiriciye sunulacaktır.Özetlenen test sonuçları,hangi test paketleri kullanıldığına bakılmaksızın tutarlı bir görünüme sahip olacaktır.
Aşağıda verilen örnek bir test özetidir:

==============================
Test summary
==============================
TEST TOTAL PASS FAIL ERROR
>> jtreg:jdk/test:tier1 1867 1865 2 0 <<
jtreg:langtools/test:tier1 4711 4711 0 0
jtreg:nashorn/test:tier1 133 133 0 0
==============================
TEST FAILURE

Yukarıda verilen özet; “TEST,TOTAL,PASS,FAIL,ERROR” sütunlarından oluştuğunu görüyoruz.
Sütunlar :
TEST = Test paketleri
TOTAL = Toplam test sayısı
PASS = Geçen/başarılı test sayısı
FAIL = Başarısız test sayısı
ERROR = Hatalı test sayısı

Bu özet çıktısının en önemli noktası “TOTAL” ve “PASS” sütunlarıdır.
Şayet TOTAL test sayısı PASS test sayısına eşit değilse,bu durumda test başarısızlığı olarak kabul edilecektir. Yukarıda verilen özetin ilk satırında bu eşitlik sağlanmadığı görülüyor. Dolayısıyla eşitsizliğin olduğu satıra ait testi başarısız test olarak kabul edeceğiz.
Ayrıca geliştiricinin bu satırı kolay tanımlayabilmesi için “>> .. <<” şeklinde işaretlenmiştir. Testin başarısız olması durumunda,”make test” komutu sıfır olmayan bir çıkış değeri ile sonlanacaktır.

Tüm testlerin sonuçları “build/$BUILD/test-results/$TEST_ID” konumunda saklanır. Buradaki “TEST_ID” değeri,yukarıda verilen özette “TEST” sütununda yer alan test paketinin tanımlayıcısından dönüştürülmüştür. Örneğin özetteki hatalı satırın test paketinin tanımlayısıcı “jtreg:jdk/test:tier1”,bu satıra ait TEST_ID değeri ise “jtreg_jdk_test_tier1” şeklinde olacaktır.Bu yol ayrıca test çalıştırmasının sonunda log dosyasına yazdırılır.

Ek veriler ayrıca “build/$BUILD/test-support/$TEST_ID” içinde saklanır.
Bazı frameworklar(test çerçeveleri) için bu dizin,başarısız bir testin nedenini belirlemede faydalı bilgiler içerebilir.

Test Paketleri Kontrolü
Make kontrol değişkenlerini kullanarak test paketlerinin çeşitli yönlerini kontrol etmek mümkündür. Bu değişkenler,birden çok değerin ayarlanmasına izin vermek için bir “anahtar=değer” yaklaşımı kullanır.
Örneğin:

JTREG="JOBS=1;TIMEOUT_FACTOR=8"

Yukarıda verilen şekilde bir tanımlama ile “JTReg” eşzamanlılık düzeyini 1'e ve zaman aşımı faktörünü ise 8'e ayarlayacaktır.
Bu tanımlama aşağıda verilen tanımlamaya eşdeğerdir.

JTREG_JOBS=1 JTREG_TIMEOUT_FACTOR=8

Ancak anahtar kelime biçiminin kullanılması,JTREG değişkeninin ayrıştırıldığı ve doğruluğu onaylandığı anlamına gelir.
Yani JTREG=”TMIEOUT_FACTOR=8" gibi bir tanımlama hata verirken,JTREG_TMIEOUT_FACTOR=8 ise hata durumuna yakalanmadan geçer.

Birden fazla anahtar=değer çiftini “;(noktalı virgül)” kullanarak ayırabilirsiniz. Shell yapısı “;”’e uygun olduğundan beri,önerilen kullanım biçimi,tanımlamayı tırnak içine yazmaktır.
Örnek:

JTREG="...;..."

Bu ayrıca aşağıdaki tanımlamada olduğu gibi alanların korunmasını da sağlayacaktır.

JTREG="JAVA_OPTIONS=-XshowSettings -Xlog:gc+ref=debug"

Bunun dışında(noktalı virgül) farklı karakterler kullanmak da mümkündür.Bunlardan biri ters slash(\) kullanmaktır.
Örnek tanımlama:

JTREG=JOBS=1\;TIMEOUT_FACTOR=8

Ayrıca,özel bir yöntem olarak belirli seçenekler için “%20” dizesi boşluk(space) ile değiştirilecektir.Örnek:

JTREG=JAVA_OPTIONS=-XshowSettings%20-Xlog:gc+ref=debug

Mümkün olduğunca,anahtar kelimelerin adları test paketleri arasında standartlaştırılmıştır.

Genel Anahtar Kelimeler(TEST_OPTS)
Bazı anahtar kelimeler farklı test paketleri arasında geçerlidir.
Birden fazla test paketinden test çalıştırmak istiyorsanız,veya hangi test paketine özgü kontrol değikeninin kullanılacağıyla ilgilenmiyorsanız,bu durumda TEST_OPTS kontrol değişkenini kullanabilirsiniz. Ayrıca sadece herhangi özel bir test paketine değil,global olarak test çalıştırıcı sistemi için geçerli olan bazı anahtar kelimeler de vardır. Bunlar “TEST_OPTS” anahtar kelimeler olarak da mevcuttur.

JOBS //Şu anda sadece JTReg için geçerlidir.
TIMEOUT_FACTOR //Şu anda sadece JTReg için geçerlidir.
JAVA_OPTIONS //JTReg,GTest ve Micro için geçerlidir.
VM_OPTIONS //JTReg,GTest ve Micro için geçerlidir.
AOT_MODULES //JTReg ve GTest için geçerlidir.
JCOV //Bu anahtar sözcük global olarak test çalıştırıcı sistemi için geçerlidir. Eğer “true” olarak ayarlanırsa,çalıştırılan tüm testler için JCov kapsam raporlamasını etkinleştirir.Bu anahtar sözcüğünün yararlı olaması için test edilen JDK,JCov araçlarıyla(kütüphane,vb.) oluşturulmuş bir JDK ile çalıştırılmalıdır. Örnek:

configure --with-jcov=<yol _lib/jcov.jar>, make jcov-image

JCov kapsam raporu ile testleri çalıştırmanın en basit yolu,”test” komutu yerine “jcov-test” kullanmaktır.
Örnek:

make jcov-test TEST=jdk_lang

Bu kullanımla birlikte,JCov imajının oluşturulduğundan ve JCov raporlamasının etkinleştirildiğinden emin olacaksınız.
JCov raporu ise “build/$BUILD/test-results/jcov-output/report” içinde tutulacaktır. Ancak JCov raporlaması ile çalışmanın hafıza üzerinde yoğun etki olabileceğini unutmayın.

JCOV_DIFF_CHANGESET //Bir kaynak revizyonu belirtir.

JCov ile kod kapsamları oluştururken,sadece yakın zamanda değiştirilen kod için kapsam bulmak da mümkündür.
Bu anahtar sözcük ile,belirtilen revizyon ve arşiv arasındaki farkın kapsamını gösteren bir metinsel rapor oluşturulacaktır.
Bu rapor “build/$BUILD/test-results/jcov-output/diff_coverage_report” içinde tutulacaktır.

Bir sonraki makalede anahtar sözcüklerini incelemeye devam edeceğiz.

-end of

--

--

Kerim Fırat
Kerim Fırat

Written by Kerim Fırat

Senior Android Platform(AOSP,AAOS) Architect,Open Source Contributor | Turkey Java User Group Vice Chairman | Author

No responses yet