Tradefed test çalıştırıcısı yazın

Bu sayfada Tradefed'de yeni bir test çalıştırıcısının nasıl yazılacağı açıklanmaktadır.

Arka plan

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

Bu, yeni bir test çalıştırıcısı yazmanın ön koşulu değildir; test çalıştırıcıları ayrı ayrı yazılabilir.

Minimum düzeyde: Arayüzü uygulayın

Tradefed test çalıştırıcısı olarak nitelendirilmek için gereken minimum şey, IRemoteTest arayüzünü ve daha spesifik 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ı rapor edin

Temel arayüzdeki run yöntemi, ITestInvocationListener türündeki bir dinleyici nesnesine erişim sağlar. Bu nesne, yapısal sonuçların test çalıştırıcısından emniyet kemerine raporlanmasının anahtarıdır.

Yapılandırılmış sonuçları raporlayan bir test çalıştırıcısı aşağıdaki özelliklere sahip olur:

  • Gerçekleştirilen tüm testlerin, ne kadar sürdüğünü ve bireysel olarak başarılı olup olmadıklarını, başarısız olup olmadıklarını veya diğer bazı durumları içeren uygun bir listeyi bildirin.
  • Varsa testlerle ilişkili ölçümleri (örneğin kurulum süresi ölçümleri) raporlayın.
  • Görüntüleme sonuçları ve ölçümler gibi altyapı araçlarının çoğuna uyum sağlayın.
  • Yürütmenin daha ayrıntılı bir izi olduğundan hata ayıklamak genellikle daha kolaydır.

Bununla birlikte, yapılandırılmış sonuçların raporlanması isteğe bağlıdır; bir test çalıştırıcısı, gerçek yürütmeye ilişkin herhangi bir ayrıntı olmadan, tüm çalıştırmanın durumunu BAŞARILI veya BAŞARISIZ olarak değerlendirmek isteyebilir.

Yürütmelerin mevcut ilerlemesi hakkında donanıma bilgi vermek için dinleyiciye aşağıdaki olaylar çağrılabilir:

  • testRunStarted: Birbiriyle ilişkili bir grup test senaryosunun başlangıcını bildirir.
    • testStarted: Bir test senaryosunun başlangıcını bildirin.
    • testFailed/testIgnored: Devam eden test senaryosunun durumundaki değişikliği bildirir. Herhangi bir durum değişikliği olmayan bir test senaryosu başarılı kabul edilir.
    • testEnded: Test senaryosunun sonunu bildirir.
  • testRunFailed: Test senaryosu yürütme grubunun genel durumunun bir başarısızlık olduğunu bildirin. 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 program, tüm başarılı test senaryolarını bir hata çıkış koduyla (herhangi bir nedenden dolayı: sızdırılmış dosyalar vb.) rapor edebilir.
  • testRunEnded: Test senaryoları grubunun sonunu bildirir.

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

Test senaryolarının geri çağrıları ( testStarted , testEnded vb.) isteğe bağlıdır. Herhangi bir test senaryosu olmadan bir test çalıştırması gerçekleştirilebilir.

Bu olay yapısının tipik JUnit yapısından ilham aldığını fark edebilirsiniz. Bu, işleri geliştiricilerin genellikle bilgi sahibi olduğu temel bir şeye yakın tutmak amacıyla yapılmıştır.

Test çalıştırıcısından gelen günlükleri raporlayın

Kendi Tradefed test sınıfınızı veya çalıştırıcınızı yazıyorsanız, IRemoteTest'i uygulayacak ve run() yöntemi aracılığıyla bir ITestInvocationListener elde edeceksiniz. 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 edin

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

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 ve API'nin onunla etkileşim kurmasını sağlayan ITestDevice nesnesinin alınmasına olanak tanır.
  • IBuildReceiver, testin, test kurulumuyla ilgili tüm bilgileri ve yapıtları içeren , derleme sağlayıcısı adımında oluşturulan IBuildInfo nesnesini almasına olanak tanır.

Test çalıştırıcıları, örneğin ekstra dosyalar gibi yürütmeyle ilgili yapay öğeler elde etmek ve yürütme sırasında hedeflenecek olan cihazı test altına almak için genellikle bu arayüzlerle ilgilenirler.

Birden fazla cihazla test edin

Tradefed, testlerin aynı anda birden fazla cihazda çalıştırılmasını 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 IMultiDeviceTest'i uygulamanız gerekir; bu, cihaz temsillerinin tam listesini ve bunlarla ilgili yapı bilgilerini içeren ITestDevice - IBuildInfo haritasını almanıza olanak tanır.

Arayüzdeki ayarlayıcı her zaman run yönteminden önce çağrılacaktır, dolayısıyla run çağrıldığında yapının kullanılabilir olacağını varsaymak güvenlidir.

Kurulumlarının farkında olan testler

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

Bunu başarmak için bir test çalıştırıcısı, parçası olduğu ve içinde 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ı, eğer onlar üzerinde ayrıntılı bir kontrole sahiplerse, testlerini çalıştırmanın esnek bir yolunu sağlayabilirler; örneğin bir JUnit testleri çalıştırıcısı, her birim testini ayrı ayrı çalıştırabilir.

Bu, daha büyük donanım ve altyapının bu hassas kontrolden yararlanmasına ve kullanıcıların filtreleme yoluyla test çalıştırıcısını kısmen çalıştırmasına olanak tanır.

Filtreleme desteği, çalıştırılması gereken veya çalışmaması gereken testler için include ve exclude filtrelerinin alınmasına olanak tanıyan ITestFilterReceiver arayüzünde açıklanmıştır.

Bizim geleneğimize göre bir test, bir veya daha fazla dahil etme filtresiyle eşleşiyorsa VE hariç tutma filtrelerinden hiçbiriyle eşleşmiyorsa çalıştırılacaktır. Herhangi bir dahil etme filtresi verilmemişse, hariç tutma filtrelerinden herhangi biriyle eşleşmediği sürece tüm testler çalıştırılmalıdır.