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ın Tradefed mimarisinde yeri hakkında bilgi edinmek istiyorsanız 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ı ayrı olarak yazılabilir.

Asgari düzey: Arayüzü uygulayın

Tradefed test çalıştırıcısı olarak kabul edilmek için gereken minimum şart, 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ılır ve Java Runnable'a benzer.

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

Test çalıştırıcıdan rapor sonuçları

Temel arayüzdeki run yöntemi, ITestInvocationListener türündeki bir dinleyici nesnesine erişim sağlar. Bu nesne, test çalıştırıcıdan donanıma yapılandırılmış sonuçları raporlamanın anahtarıdır.

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

  • Çalıştırılan tüm testlerin, testlerin ne kadar sürdüğünün ve her birinin başarılı olup olmadığının veya başka bir durumda olup olmadığının uygun bir listesini gönderin.
  • Varsa testlerle ilişkili metrikleri (ör. yükleme süresi metrikleri) raporlayın.
  • Altyapı araçlarının çoğuna (ör. görüntüleme sonuçları ve metrikler) sığdırılabilir.
  • Genellikle yürütmenin daha ayrıntılı bir izlemesi olduğundan hata ayıklama işlemi 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 çalıştırmanın tamamının durumunu BAŞARILI veya BAŞARISIZ olarak değerlendirmek isteyebilir.

Aşağıdaki etkinlikler, yürütme işlemlerinin mevcut ilerleme durumunu koşum takımına bildirmek için dinleyicide çağrılabilir:

  • testRunStarted: Birlikte ilişkili olan bir test durumu grubunun başlangıcını bildirir.
    • testStarted: Bir testin başladığını bildirme.
    • testFailed/testIgnored: Devam eden testin durumundaki değişikliği bildirir. Durum değişikliği olmayan test durumları başarılı kabul edilir.
    • testEnded: Test durumunun sona erdiğini bildirir.
  • testRunFailed: Test senaryosu grubu çalıştırma işleminin genel durumunun başarısız olduğunu bildirir. Test çalıştırma, yürütmenin beklediğine bağlı olarak test durumları sonuçlarından bağımsız olarak geçer veya geçersiz olabilir. Örneğin, birkaç test durumu çalıştıran bir ikili, tüm test durumlarının geçtiğini ancak hata çıkış koduyla (herhangi bir nedenle: sızan dosyalar vb.) bildirebilir.
  • testRunEnded: Test durumları grubunun sona erdiğini 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, finally yan tümcesi kullanılarak istisna durumunda testRunEnded çağrılmasını sağlamak.

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

Bu etkinlik yapısının tipik JUnit yapısından ilham aldığını fark edebilirsiniz. Bu, geliştiricilerin genellikle bilgi sahibi olduğu temel bir konuya yakın bir şekilde ilerlemek için bilinçli olarak yapılır.

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

Kendi Tradefed test sınıfınızı veya çalıştırıcınızı yazıyorsanız IRemoteTest sınıfını uygular ve run() yöntemi aracılığıyla bir ITestInvocationListener alırsınız. Bu dinleyici, dosyaları aşağıdaki şekilde günlük kaydetmek için kullanılabilir:

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

Cihazla test etme

Yukarıdaki minimum arayüz, Java birim testleri gibi belirli kaynaklar gerektirmeyen ve izole edilmiş çok basit testler çalıştırmanıza 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 nesnesini almasına ve onunla etkileşim kurmak için API'yi sağlamasına olanak tanır.
  • IBuildReceiver, testin derleyici sağlayıcı adımında oluşturulan IBuildInfo nesnesini almasına olanak tanır. Bu nesne, test kurulumuyla ilgili tüm bilgileri ve yapıları içerir.

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

Birden fazla cihazla test edin

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

Birden fazla cihaz kullanabilen bir test çalıştırıcı yazmak için IMultiDeviceTest'i uygulamanız gerekir. Bu, cihaz temsillerinin tam listesini ve ilişkili derleme bilgilerini içeren ITestDevice ile IBuildInfo arasında bir harita 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ılabileceğini varsayabilirsiniz.

Kurulumlarının farkında olarak testler

Bazı test çalıştırıcı uygulamalarının düzgün çalışması için genel kurulumla ilgili bilgilere (ör. çağrıyla ilgili bazı meta veriler veya daha önce hangi target_preparer'nin çalıştırılacağı) ihtiyacı olabilir.

Test çalıştırıcı, bunu yapmak için parçası olduğu ve içinde çalıştırı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 sınıfını uygulamanız gerekir.

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

Test çalıştırıcıları, testleri üzerinde ayrıntılı kontrole sahipse testlerini çalıştırmanın esnek bir yolunu sağlayabilir. Örneğin, JUnit test çalıştırıcıları her birim testini ayrı ayrı çalıştırabilir.

Bu sayede, daha büyük koşum takımı ve altyapı bu hassas kontrolden yararlanabilir ve kullanıcılar filtreleme yoluyla test çalıştırıcıyı kısmen çalıştırabilir.

Filtreleme desteği, çalıştırılması veya çalıştırılmaması gereken testler için include ve exclude filtresi grupları almasına olanak tanıyan ITestFilterReceiver arayüzünde açıklanmaktadır.

Bir testin, dahil et filtrelerinden en az biriyle eşleştiği VE hariç tut filtrelerinden hiçbiriyle eşleşmediği takdirde çalıştırılacağı kabul edilir. Dahil etme filtresi belirtilmezse hariç tutma filtrelerinden hiçbiriyle eşleşmediği sürece tüm testler çalıştırılmalıdır.