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

Test koşucularının Tradefed mimarisindeki yerini merak ediyorsanız, Test Çalıştırıcısının Yapısı bölümüne bakın.

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ı

Tradefed test çalıştırıcısı olarak kalifiye olmak için gereken minimum koşul, IRemoteTest arabirimini ve daha özel olarak run(TestInformation testInfo, ITestInvocationListener listener) yöntemini uygulamaktır.

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

Temel arabirimdeki run yöntemi, ITestInvocationListener türünde bir dinleyici nesnesine erişim sağlar. 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 raporlayın.
  • 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 donanımını bilgilendirmek 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ıştırması , yürütmenin ne beklediğine bağlı olarak test senaryosu sonuçlarından bağımsız olarak başarılı veya başarısız olabilir. Örneğin, birkaç test senaryosu çalıştıran bir ikili, tüm başarılı test senaryolarını ancak bir hata çıkış koduyla rapor edebilir (herhangi bir nedenle: sızdırılmış dosyalar, vb.).
  • testRunEnded: Test senaryoları grubunun sonunu bildirir.

Geri aramaların uygun sırasını korumak ve sağlamak, test çalıştırıcısının sorumluluğundadır, örneğin, istisna durumunda bir finally yan tümcesi kullanılarak testRunEnded çağrılmasını sağlamak.

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

Bu olay yapısının tipik JUnit yapısından esinlendiğini fark edebilirsiniz. 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 test sınıfınızı veya koşucunuzu yazıyorsanız, IRemoteTest'i uygulayacak ve run() yöntemi aracılığıyla bir ITestInvocationListener alacaksınız. 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 örneğin Java birim testleri gibi herhangi bir özel kaynak gerektirmeyen çok basit testlerin çalıştırılmasına izin verir.

Cihaz testinin bir sonraki adımına geçmek isteyen test yazarlarının aşağıdaki arayüzlere ihtiyacı olacaktır:

  • IDeviceTest , test edilen cihazı temsil eden ITestDevice nesnesinin alınmasına izin verir ve API'nin onunla etkileşim kurmasını sağlar.
  • IBuildReceiver , testin, test kurulumuyla ilgili tüm bilgileri ve yapıtları içeren yapı sağlayıcı adımında oluşturulan IBuildInfo nesnesini almasına izin verir.

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ı kullanabilen bir test çalıştırıcısı yazmak için, cihaz temsillerinin tam listesini ve bunlarla ilişkili yapı bilgilerini içeren ITestDevice IBuildInfo haritasını almanıza izin verecek olan IMultiDeviceTest'i uygulamanız gerekecektir.

Arayüzden ayarlayıcı her zaman run yönteminden önce çağrılır, bu nedenle yapının run çağrıldığında kullanılabilir olacağını varsaymak güvenlidir.

Kurulumlarının farkında olan testler

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

Bazı test çalıştırıcı uygulamalarının düzgün çalışması için genel kurulum hakkında bilgilere ihtiyacı olabilir, örneğin, çağırma hakkında bazı meta veriler veya daha önce hangi target_preparer çalıştırıldı vb.

Bunu başarmak için test çalıştırıcısı, parçası olduğu ve yürütüldüğü IConfiguration nesnesine erişebilir. Daha fazla ayrıntı için yapılandırma nesnesi açıklamasına bakın.

Test çalıştırıcısı uygulaması için, IConfiguration nesnesini almak üzere IConfigurationReceiver'ı uygulamanız gerekecektir.

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, daha büyük donanımın ve altyapının bu ince kontrolden yararlanmasına ve kullanıcıların filtreleme yoluyla kısmen test çalıştırıcısını çalıştırmasına olanak tanır.

Filtreleme desteği, çalıştırılması veya çalıştırılmaması gereken testler için include etme ve exclude filtreleri kümelerinin alınmasına izin veren ITestFilterReceiver arabiriminde açıklanmıştır.

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şmediği 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.