Tradefed test çalıştırıcı yazma

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

Arka plan

Test çalıştırıcıların Tradefed mimarisindeki yeri hakkında merak ettikleriniz varsa Test Çalıştırıcının Yapısı başlıklı makaleyi inceleyin.

Bu, yeni bir test çalıştırıcı yazmak için ön koşul değildir. Test çalıştırıcılar bağımsız olarak yazılabilir.

En az yapılması gerekenler: Arayüzü uygulama

Tradefed test çalıştırıcısı olarak nitelendirilmek için gereken en temel koşul, IRemoteTest arayüzünü ve daha spesifik olarak run(TestInformation testInfo, ITestInvocationListener listener) yöntemini uygulamaktır.

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

Bu yöntemin her kısmı, test çalıştırıcı yürütmesinin bir parçası olarak kabul edilir.

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

Temel arayüzdeki run yöntemi, ITestInvocationListener türünde bir dinleyici nesnesine erişim sağlar. Bu nesne, test çalıştırıcıdan koşum takımına yapılandırılmış sonuçları bildirmek için kullanılan anahtardır.

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

  • Çalıştırılan tüm testlerin, ne kadar sürdüklerinin ve her birinin ayrı ayrı başarılı, başarısız veya başka bir durumda olup olmadıklarının doğru bir listesini bildirin.
  • Varsa testlerle ilişkili metrikleri (ör. yükleme süresi metrikleri) raporlayın.
  • Altyapı araçlarının çoğuna uyum sağlar (ör. sonuçları ve metrikleri gösterme vb.).
  • Yürütme daha ayrıntılı bir şekilde izlendiğinden genellikle hata ayıklaması daha kolaydır.

Bununla birlikte, yapılandırılmış sonuçları raporlamak isteğe bağlıdır. Bir test çalıştırıcı, gerçek yürütmeyle ilgili herhangi bir ayrıntı olmadan tüm çalıştırmanın durumunu yalnızca GEÇTİ veya KALDI olarak değerlendirmek isteyebilir.

Aşağıdaki etkinlikler, koşum takımını yürütmelerin mevcut ilerleme durumu hakkında bilgilendirmek için dinleyicide çağrılabilir:

  • testRunStarted: Birbiriyle ilişkili bir grup test durumunun başlangıcını bildirir.
    • testStarted: Başlatılan bir test senaryosunun başlangıcını bildirir.
    • testFailed/testIgnored: Devam eden test senaryosunun durum değişikliğini bildirir. Durum değişikliği içermeyen test senaryoları başarılı kabul edilir.
    • testEnded: Test durumunun sonunu bildirir.
  • testRunFailed: Test senaryoları grubunun yürütülmesinin genel durumunun başarısız olduğunu bildirir. Test çalıştırması, yürütmenin ne beklediğine bağlı olarak test senaryosu sonuçlarından bağımsız olarak geçebilir veya başarısız olabilir. Örneğin, birkaç test durumu çalıştıran bir ikili, tüm geçen test durumlarını bildirebilir ancak hata çıkış koduyla (sızıntı dosyaları vb. nedenlerle).
  • testRunEnded: Test durumları grubunun sonunu bildirir.

Geri çağırmaların doğru sırasını korumak ve sağlamak, test çalıştırıcı uygulayıcının sorumluluğundadır. Örneğin, testRunEnded ifadesinin finally ifadesi kullanılarak istisna durumunda çağrıldığından emin olunmalıdır.

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

Bu etkinlik yapısının tipik JUnit yapısından esinlendiğini fark edebilirsiniz. Bu, geliştiricilerin genellikle bilgi sahibi olduğu temel bir konuya yakın kalmak için kasıtlı olarak yapılmıştır.

Test çalıştırıcıdan günlükleri bildirme

Kendi Tradefed test sınıfınızı veya çalıştırıcınızı yazıyorsanız IRemoteTest'i uygulayacak ve run() yöntemiyle ITestInvocationListener alacaksınız. Bu dinleyici, günlük dosyalarına aşağıdaki şekilde yazmak için kullanılabilir:

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

Cihazla test etme

Yukarıdaki minimum arayüz, izole edilmiş ve herhangi bir özel kaynak gerektirmeyen çok basit testlerin (ör. Java birim testleri) ç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ı vardır:

  • IDeviceTest, test edilen cihazı temsil eden ITestDevice nesnesinin alınmasına olanak tanır ve bu nesneyle etkileşim kurmak için API'yi sağlar.
  • IBuildReceiver, testin IBuildInfo nesnesini almasına olanak tanır. Bu nesne, build provider adımında oluşturulur ve test kurulumuyla ilgili tüm bilgileri ve yapıları içerir.

Test çalıştırıcılar genellikle yürütmeyle ilgili yapıtları (ör. ek dosyalar) almak ve yürütme sırasında hedeflenecek test altındaki cihazı almak için bu arayüzlerle ilgilenir.

Birden fazla cihazla test etme

Tradefed, aynı anda birden fazla cihazda test çalıştırmayı destekler. Bu, telefon ve kol saati eşleştirme gibi harici etkileşim gerektiren bileşenleri test ederken faydalıdır.

Birden fazla cihaz kullanabilen bir test çalıştırıcı yazmak için IMultiDeviceTest'i uygulamanız gerekir. Bu arayüz, cihaz temsillerinin ve bunlarla ilişkili derleme bilgilerinin tam listesini içeren ITestDevice ile IBuildInfo eşlemesini almanıza olanak tanır.

Arayüzdeki ayarlayıcı her zaman run yönteminden önce çağrılır. Bu nedenle, 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 kurulumla ilgili bilgilere (ör. çağırma ile ilgili bazı meta veriler veya daha önce hangi target_preparer'nın çalıştırıldığı vb.) ihtiyacı olabilir.

Bunu sağlamak için bir test çalıştırıcı, parçası olduğu ve içinde yürütüldüğü IConfiguration nesnesine erişebilir. Daha fazla bilgi için yapılandırma nesnesi açıklamasına bakın.

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

Esnek test çalıştırıcı

Test çalıştırıcılar, testleri üzerinde ayrıntılı kontrol sahibi oldukları takdirde testlerini çalıştırmak için esnek bir yöntem sunabilir. Örneğin, JUnit test çalıştırıcısı her bir birim testini ayrı ayrı çalıştırabilir.

Bu, daha büyük koşum takımı ve altyapının bu ince kontrolü kullanmasına ve kullanıcıların filtreleme yoluyla test çalıştırıcıyı kısmen çalıştırmasına olanak tanır.

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

Kuralımız, bir testin YALNIZCA dahil etme filtrelerinden biri veya daha fazlasıyla eşleşmesi VE hariç tutma filtrelerinden herhangi biriyle eşleşmemesi durumunda çalıştırılacağı yönündedir. Dahil etme filtreleri verilmezse hariç tutma filtreleriyle eşleşmedikleri sürece tüm testler çalıştırılmalıdır.