Tradefed Test Çalıştırıcısı Yazın

Bu sayfa, Tradefed'de yeni bir test koşucusunun nasıl yazılacağını açıklar.

Arka plan

Eğer Tradefed mimaride Test koşucu yer hakkında merak ediyorsanız, bkz Test Runner Yapısı .

Bu, yeni bir test koşucusu yazmak için bir ön koşul değildir; test koşucuları ayrı ayrı yazılabilir.

Bare minimum: Arayüzün uygulanması

Bir Tradefed Test atlet uygulamak için olduğu gibi minimum nitelemek için IRemoteTest arayüzü daha spesifik olarak ve run(TestInformation testInfo, ITestInvocationListener listener) yöntemi.

Bu yöntem, Java Runnable'a benzer şekilde, test çalıştırıcısı kullanılırken koşum takımı tarafından çağrılan yöntemdir.

Bu yöntemin her parçası, test çalıştırıcısının yürütülmesinin bir parçası olarak kabul edilir.

Test çalıştırıcısından sonuçları raporlama

run tipi bir dinleyici nesnesine temel arabirim vermek erişim yöntemi ITestInvocationListener . Bu nesne, test koşucusundan koşum takımına yapılandırılmış sonuçları raporlamanın anahtarıdır.

Yapılandırılmış sonuçları raporlayarak, bir test çalıştırıcısı aşağıdaki özelliklere sahiptir:

  • Yürütülen tüm testlerin uygun bir listesini, ne kadar sürdüğünü ve bireysel olarak geçip geçmediklerini, başarısız olup olmadıklarını veya diğer bazı durumları bildirin.
  • Varsa, testlerle ilişkili metrikleri, örneğin kurulum zamanı metriklerini rapor edin.
  • Altyapı araçlarının çoğuna sığdır, örneğin sonuçları ve metrikleri görüntüleme vb.
  • Yürütmenin daha ayrıntılı bir izi olduğundan genellikle hata ayıklamak daha kolaydır.

Bununla birlikte, yapılandırılmış sonuçların raporlanması isteğe bağlıdır; bir test koşucusu, fiili yürütmenin herhangi bir ayrıntısı olmadan tüm çalışmanın durumunu BAŞARILI veya BAŞARISIZ olarak değerlendirmek isteyebilir.

NOT: Olayların sırasını takip eden bir koşucu uygulamak daha zordur, ancak yukarıda listelenen faydaları göz önünde bulundurarak bunu yapmanızı öneririz.

Yürütmelerin mevcut ilerlemesinin kablo demetini bildirmek için dinleyicide aşağıdaki olaylar çağrılabilir:

  • testRunStarted: Birbiriyle ilişkili bir grup test senaryosunun başlangıcını bildir.
    • testStarted: Bir test senaryosunun başladığını bildirir.
    • testFailed/testIgnored: Devam etmekte olan test senaryosunun durum değişikliğini bildir. Durum değişikliği olmayan bir test durumu başarılı sayılır.
    • testEnded: Test senaryosunun sonunu bildirir.
  • testRunFailed: Test senaryosu yürütme grubunun genel durumunun bir hata olduğunu bildir. Bir test çalışması bir geçiş olabilir ya da uygulama bekliyor ne bağlı olarak test durumlarda sonuç, bağımsız bir şekilde başarısız olur. Örneğin, birkaç test durumları çalıştıran bir ikili tüm geçiş test durumları bildirmek ancak (herhangi bir nedenden dolayı: sızan dosyalar vs.) bir hata çıkış kodu ile başladı.
  • testRunEnded: Test senaryoları grubunun sonunu bildirir.

Korunması ve geri aramaları kaçıncı dereceden sağlanması sağlamak örneğin Test koşucu uygulayıcısı sorumluluğudur testRunEnded bir kullanarak istisna durumunda denir finally maddesini.

Test durumlarda geri aramalar ( testStarted , testEnded , vs.) isteğe bağlıdır. Herhangi bir test durumu olmadan bir test çalıştırması gerçekleşebilir.

Sen bu olaylar yapısı esinlenerek fark edebilirsiniz tipik JUnit yapısı . Bu, geliştiricilerin genellikle hakkında bilgi sahibi olduğu temel bir şeye yakın tutmak amacıyla yapılır.

Test çalıştırıcısından günlükleri raporlama

Kendi Tradefed testi sınıfını veya koşucu yazıyorsanız, size uygulayacak IRemoteTest ve bir olsun ITestInvocationListener yoluyla run() yöntemiyle. Bu dinleyici, dosyaları aşağıdaki gibi günlüğe kaydetmek için kullanılabilir:

    listener.testLog(String dataName, LogDataType type_of_data, InputStreamSource data);

Bir cihazla test etme

Yukarıdaki minimum arayüz, izole edilmiş ve herhangi bir özel kaynak gerektirmeyen, örneğin Java birim testleri gibi çok basit testlerin çalıştırılmasına izin verir.

Aşağıdaki arayüzler gerekecektir cihaz test sonraki adıma geçmek istiyorum Test yazarları:

  • IDeviceTest almasını sağlar ITestDevice test altındaki cihaz temsil eder ve onunla etkileşime API sağlar nesne.
  • IBuildReceiver belirlemek için testi verir IBuildInfo oluşturulan nesneyi inşa sağlayıcı adım bilgisini ve test kurulumu ile ilgili eserler hepsi içeren.

Test çalıştırıcıları, örneğin ekstra dosyalar gibi yürütmeyle ilgili yapaylıkları elde etmek ve yürütme sırasında hedeflenecek olan cihazı teste tabi tutmak için genellikle bu arayüzlerle ilgilenir.

Birden fazla cihazla test etme

Tradefed, aynı anda birden fazla cihazda test çalıştırmayı destekler. Bu, telefon ve saat eşleştirmesi gibi harici etkileşim gerektiren bileşenleri test ederken kullanışlıdır.

Birden fazla cihazı kullanabilirsiniz bir test koşucu yazmak için, uygulamak gerekecektir IMultiDeviceTest bir haritasını almak için izin verecek, ITestDevice için IBuildInfo cihaz beyan ve bunların ilişkili yapı bilgilerinin tam listesini içerir.

Arabiriminden ayarlayıcı daima önce çağrılacak run böylece zaman yapısı mevcut olacağını varsaymak güvenlidir, yöntemin run denir.

Kurulumlarının farkında olan testler

NOT: Bu çok yaygın bir kullanım durumu değildir. Tamlık için belgelenmiştir, ancak genellikle buna ihtiyacınız olmayacaktır.

Bazı test koşucu uygulamaları, örneğin düzgün çalışması için hangi bazı çağırma hakkında meta veya genel kurulumu hakkında bilgi gerekebilir target_preparer koştu önce, vb

Bunu başarmak için, bir test atlet erişebilirler IConfiguration . Bunun bir parçasıdır ve bu infaz oluyor o nesneyi bakın yapılandırma nesnesi fazla ayrıntı için açıklama.

Test koşucu uygulanması için, uygulamak gerekecektir IConfigurationReceiver almak IConfiguration nesnesi.

Esnek test koşucusu

Test çalıştırıcıları, üzerlerinde ayrıntılı bir kontrolleri varsa, testlerini yürütmek için esnek bir yol sağlayabilir, örneğin bir JUnit test çalıştırıcısı her birim testini ayrı ayrı çalıştırabilir.

Bu ince kontrolü ve kullanıcıların filtreleme yoluyla kısmen test koşucu çalıştırmak için kaldıraç büyük koşum takımı ve altyapı sağlar.

Filtreleme destek açıklanan ITestFilterReceiver arayüzünün dizisi alır sağlar include ve exclude veya yayınlanmaması gereken testler için filtreler.

Bizim kuralımız, bir testin, içerme filtrelerinden bir veya daha fazlasıyla eşleştiği VE hariç tutma filtrelerinin hiçbiriyle eşleşmediği takdirde çalıştırılacağı yönündedir. Dahil etme filtreleri verilmezse, hariç tutma filtrelerinden herhangi biriyle eşleşmedikleri sürece tüm testler çalıştırılmalıdır.

NOT: Daha büyük altyapıda büyük bir katma değer sağladığından, test çalıştırıcılarının bu filtrelemeyi destekleyecek şekilde yazılmasını teşvik ediyoruz. Ancak bazı durumlarda bunu yapmanın mümkün olmadığını anlıyoruz.