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

Bu sayfada, Tradefed'de yeni bir test çalıştırıcı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ı adlı makaleyi inceleyin.

Bu, yeni bir test koşucusu yazmak için bir ön koşul değildir; test katılımcıları her şeyi gözden geçireceğiz.

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

Tradefed test koşucusu olmak için gereken kriter, IRemoteTest arayüzü ve daha açık bir şekilde belirtmek gerekirse run(TestInformation testInfo, ITestInvocationListener listener) yöntemini kullanır.

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

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

Test koşucusunun sonuçlarını raporla

Temel arayüzdeki run yöntemi, şu işleyici nesnesine erişim sağlar: ITestInvocationListener yazın. Bu nesne, yapılandırılmış raporlamanın otomatik olarak uyarlanır.

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

  • Yapılan tüm testlerin, bunların ne kadar sürdüğünü ve testlerin yapılıp yapılmadığını başarılı, başarısız veya diğer bazı durumları görebilirsiniz.
  • Varsa testlerle ilişkili metrikleri raporla yükleme süresi metrikleridir.
  • Altyapı araçlarının çoğuna uyum sağlar. Örneğin, sonuçları görüntüleme ve kullanabilirsiniz.
  • Veriler daha ayrıntılı şekilde açıklandığından, hataların ayıklanması genellikle daha kolaydır. birkaç adım var.

Bununla birlikte, yapılandırılmış sonuçların raporlanması isteğe bağlıdır; test koşucusu tüm çalışmanın durumunu BAŞARILI veya BAŞARISIZ olarak değerlendirmek ayrıntılarına dikkat edin.

Dinleyicide aşağıdaki etkinlikler çağrılabilir: ilerleme durumu:

  • testRunStarted: Mevcut bir test durumu grubunun başlangıcını bildir bir araya getirmektir.
    • testStarted: Başlatılan bir test durumunun başlangıcını bildirir.
    • testFailed/testignored: Test durumunun durum değişikliğini bildirin devam ediyor. Durum değişikliği içermeyen bir test durumu dikkate alınır başarılı oldu.
    • testEnded: Test durumunun sonunu bildirin.
  • testRunFailed: Test durumu grubunun genel durumunu bildir başarısızlıkla sonuçlanır. Test çalıştırması, başarılı veya başarısız olabilir test senaryolarının sonuçlarından bağımsız olarak beklediğinizi düşünelim. Örneğin, birden fazla test durumu çalıştıran bir ikili program tüm başarılı test durumlarını raporlayabilir, ancak bu durumda bir hata çıkış kodu ile (herhangi bir nedenler: sızdırılan dosyalar vb.).
  • testRunEnded: Test durumu grubunun sonunu bildirir.

Geri aramaların doğru sıralamasını korumak ve sağlamak uygulayıcının sorumluluğundadır (ör. test amaçlı olarak İstisna durumunda testRunEnded, finally ifadesi kullanılarak çağrılır.

Test durumları geri çağırmaları (testStarted, testEnded vb.) isteğe bağlıdır. Test herhangi bir test durumu olmadan gerçekleşebilir.

Bu etkinlik yapısının, benimsediğimiz tipik JUnit yapısı vardır. Burada amaç, geliştiricilerin bildiği temel bir noktaya yakın tutmaktır. belirli görevleri tamamlamaya yardımcı olur.

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

Kendi Tradefed test sınıfınızı veya koşucunuzu yazıyorsanız, IRemoteTest ve run() yöntemiyle ITestInvocationListener kazanın. Bu dinleyici dosyaları aşağıdaki şekilde 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, diğer tüm standartlarla izole edilmiş çok basit testlerin ve Java birim testleri gibi belirli bir kaynak gerektirmez.

Cihaz testinin bir sonraki adımına geçmek isteyen test yazarları için aşağıdaki arayüzleri destekler:

  • Cihaz Testi altında cihazı temsil eden ITestDevice nesnesinin alınmasına izin verir test eder ve etkileşimde bulunması için API'yi sağlar.
  • IBuildReceiver testin, aynı zamanda IBuildInfo nesnesinin derleme sağlayıcı adımı (test kurulumuyla ilgili tüm bilgileri ve yapıları içeren)

Test çalıştırıcıları, oyun geliştirebilmek için genellikle bu arayüzlerle ilgilenirler. yürütmeyle ilgili yapıları (örneğin ekstra dosyalar) bulabilir, uygulama sırasında hedeflenecek olan test edilen cihaz.

Birden fazla cihazla test etme

Tradefed, aynı anda birden çok cihazda test çalıştırmayı destekler. Bu Örneğin, harici etkileşim gerektiren bileşenleri test ederken faydalıdır. telefon ve kol saati eşleniyor.

Birden fazla cihaz kullanabilen bir test çalıştırıcısı yazabilmek için dönüşüm değerini IMultiDeviceTest, Bu işlem, ITestDevice - IBuildInfo için aşağıdakileri içeren bir harita almanızı sağlar: cihaz temsillerinin tam listesi ve bunlarla ilişkili derleme bilgileri

Arayüzdeki belirleyici, her zaman run yönteminden önce çağrılır 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ı için genel kurulum hakkında bilgi gerekebilir düzgün çalışması için gereklidir. Örneğin, çağrıyla ilgili bazı meta veriler target_preparer vb.

Test çalıştırıcısı, bunu başarmak için IConfiguration nesnesine erişebilir gerçekleştirildiği bir süreçtir. Bkz. yapılandırma nesnesi açıklamasına bakın.

Test çalıştırıcısı uygulaması için, test sırasında IConfigurationReceiver IConfiguration nesnesini almak için.

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

Test çalıştırıcıları, testlerini yürütmek için esnek bir yöntem sunabilirlerse ayrıntılı bir kontrol sağlar (örneğin, bir JUnit test çalıştırıcısı, her birim testini çalıştıracaksınız.

Bu sayede, daha geniş kitlelerin ve altyapıların söz konusu hassas denetim ve kullanıcıların filtreleme yoluyla test çalıştırıcısını kısmen çalıştırmasını sağlar.

Filtreleme desteği şurada açıklanmıştır: ITestFilterReceiver arayüzü, Bu değer, testler için include ve exclude filtre gruplarını almaya olanak tanır otomatik olarak yükleyebilirsiniz.

Kurallarımıza göre test, IFF kullanılarak çalıştırılacak ve bir veya daha fazla dahil et filtreleri VE hariç tutma filtrelerinin hiçbiriyle eşleşmemektedir. Dahil değilse sağlandığı takdirde, tüm testler, bu filtrelerden herhangi biriyle eşleşmediği sürece çalıştırılmalıdır. hariç tutma filtrelerini kullanabilirsiniz.