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.