Tradefed test çalıştırıcısı 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.

Minimum sınır: Arayüzü uygulayın

Tradefed test çalıştırıcısı olarak uygunluk 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, Java Runnable'a benzer şekilde, test çalıştırıcısı kullanılırken koşu takımı tarafından çağrılan yöntemdir.

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ısından 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 koşum takımına yapılan yapılandırılmış sonuçların raporlanmasını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 tek tek başarılı olup olmadıklarını, başarısız olup olmadıklarını veya başka bir durumda olup olmadıklarını içeren uygun bir liste raporlayın.
  • 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.
  • Yürütme işleminin daha ayrıntılı bir izlemesi olduğundan genellikle 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 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 sonunu bildirin.
  • testRunFailed: Test senaryosu grubu çalıştırma işleminin genel durumunun başarısız olduğunu bildirir. Test çalıştırması, yürütmenin beklentilerine bağlı olarak test durumu sonuçlarından bağımsız olarak başarılı veya başarısız 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ı geri çağırmaları (testStarted, testEnded vb.) isteğe bağlıdır. Test çalıştırması, herhangi bir 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 bir şekilde ilerlemek için bilinçli olarak yapılır.

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

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);

Bir cihazla test etme

Yukarıdaki minimum arayüz, izole edilmiş ve Java birim testleri gibi belirli bir kaynak gerektirmeyen ç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ı vardır:

  • IDeviceTest, test edilen cihazı temsil eden ITestDevice nesnesini almanıza olanak tanır ve API ile etkileşim kurmanızı sağlar.
  • 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 etme

Tradefed, aynı anda birden fazla cihazda test çalıştırmayı destekler. Bu, telefon ve kol saati eşleme 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 belirleyici, her zaman run yönteminden önce çağrılacaktır. Bu nedenle, run çağrıldığında yapının kullanılabilir olacağını varsayabilirsiniz.

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ğrıyla ilgili bazı meta veriler veya daha önce hangi target_preparer'ün ç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 ayrıntı 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ı, üzerinde ayrıntılı bir kontrole sahiplerse testlerini çalıştırmak için esnek bir yöntem sunabilirler. Örneğin, bir JUnit test çalıştırıcısı her birim testi 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.