Bu sayfada Tradefed'de yeni bir test çalıştırıcısı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ı bölümüne bakın.
Bu, yeni bir test çalıştırıcısı yazmanın ön koşulu değildir; test çalıştırıcıları ayrı ayrı yazılabilir.
Minimum düzeyde: Arayüzü uygulayın
Tradefed test çalıştırıcısı olarak nitelendirilmek için gereken minimum şey, 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şum takımı tarafından çağrılan yöntemdir.
Bu yöntemin her parçası, test çalıştırıcısının yürütülmesinin bir parçası olarak kabul edilir.
Test çalıştırıcısından sonuçları rapor edin
Temel arayüzdeki run
yöntemi, ITestInvocationListener
türündeki bir dinleyici nesnesine erişim sağlar. Bu nesne, yapısal sonuçların test çalıştırıcısından emniyet kemerine raporlanmasının anahtarıdır.
Yapılandırılmış sonuçları raporlayan bir test çalıştırıcısı aşağıdaki özelliklere sahip olur:
- Gerçekleştirilen tüm testlerin, ne kadar sürdüğünü ve bireysel olarak başarılı olup olmadıklarını, başarısız olup olmadıklarını veya diğer bazı durumları içeren uygun bir listeyi bildirin.
- Varsa testlerle ilişkili ölçümleri (örneğin kurulum süresi ölçümleri) raporlayın.
- Görüntüleme sonuçları ve ölçümler gibi altyapı araçlarının çoğuna uyum sağlayın.
- Yürütmenin daha ayrıntılı bir izi olduğundan hata ayıklamak genellikle daha kolaydır.
Bununla birlikte, yapılandırılmış sonuçların raporlanması isteğe bağlıdır; bir test çalıştırıcısı, gerçek yürütmeye ilişkin herhangi bir ayrıntı olmadan, tüm çalıştırmanın durumunu BAŞARILI veya BAŞARISIZ olarak değerlendirmek isteyebilir.
Yürütmelerin mevcut ilerlemesi hakkında donanıma bilgi vermek için dinleyiciye aşağıdaki olaylar çağrılabilir:
- testRunStarted: Birbiriyle ilişkili bir grup test senaryosunun başlangıcını bildirir.
- testStarted: Bir test senaryosunun başlangıcını bildirin.
- testFailed/testIgnored: Devam eden test senaryosunun durumundaki değişikliği bildirir. Herhangi bir durum değişikliği olmayan bir test senaryosu başarılı kabul edilir.
- testEnded: Test senaryosunun sonunu bildirir.
- testRunFailed: Test senaryosu yürütme grubunun genel durumunun bir başarısızlık olduğunu bildirin. Bir test çalıştırması, yürütmenin ne beklediğine bağlı olarak test senaryosu sonuçlarından bağımsız olarak başarılı veya başarısız olabilir. Örneğin, birkaç test senaryosu çalıştıran bir ikili program, tüm başarılı test senaryolarını bir hata çıkış koduyla (herhangi bir nedenden dolayı: sızdırılmış dosyalar vb.) rapor edebilir.
- testRunEnded: Test senaryoları grubunun sonunu bildirir.
Geri aramaların doğru sırasını korumak ve sağlamak, test çalıştırıcısı uygulayıcısının sorumluluğundadır; örneğin, istisna durumunda bir finally
cümlesi kullanılarak testRunEnded
çağrılmasını sağlamak.
Test senaryolarının geri çağrıları ( testStarted
, testEnded
vb.) isteğe bağlıdır. Herhangi bir test senaryosu olmadan bir test çalıştırması gerçekleştirilebilir.
Bu olay yapısının tipik JUnit yapısından ilham aldığını fark edebilirsiniz. Bu, işleri geliştiricilerin genellikle bilgi sahibi olduğu temel bir şeye yakın tutmak amacıyla yapılmıştır.
Test çalıştırıcısından gelen günlükleri raporlayın
Kendi Tradefed test sınıfınızı veya çalıştırıcınızı yazıyorsanız, IRemoteTest'i uygulayacak ve run()
yöntemi aracılığıyla bir ITestInvocationListener
elde edeceksiniz. Bu dinleyici, dosyaları aşağıdaki gibi günlüğe kaydetmek için kullanılabilir:
listener.testLog(String dataName, LogDataType type_of_data, InputStreamSource data);
Bir cihazla test edin
Yukarıdaki minimum arayüz, yalıtılmış ve herhangi bir özel kaynak gerektirmeyen, örneğin Java birim testleri gibi ç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ı olacaktır:
- IDeviceTest, test edilen cihazı temsil eden ve API'nin onunla etkileşim kurmasını sağlayan
ITestDevice
nesnesinin alınmasına olanak tanır. - IBuildReceiver, testin, test kurulumuyla ilgili tüm bilgileri ve yapıtları içeren , derleme sağlayıcısı adımında oluşturulan
IBuildInfo
nesnesini almasına olanak tanır.
Test çalıştırıcıları, örneğin ekstra dosyalar gibi yürütmeyle ilgili yapay öğeler elde etmek ve yürütme sırasında hedeflenecek olan cihazı test altına almak için genellikle bu arayüzlerle ilgilenirler.
Birden fazla cihazla test edin
Tradefed, testlerin aynı anda birden fazla cihazda çalıştırılmasını destekler. Bu, telefon ve saat eşleştirmesi gibi harici etkileşim gerektiren bileşenleri test ederken kullanışlıdır.
Birden fazla cihazı kullanabilen bir test çalıştırıcısı yazmak için IMultiDeviceTest'i uygulamanız gerekir; bu, cihaz temsillerinin tam listesini ve bunlarla ilgili yapı bilgilerini içeren ITestDevice
- IBuildInfo
haritasını almanıza olanak tanır.
Arayüzdeki ayarlayıcı her zaman run
yönteminden önce çağrılacaktır, dolayısıyla 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 kurulum hakkında bilgilere (örneğin, çağrıyla ilgili bazı meta veriler veya daha önce hangi target_preparer
çalıştırıldığı vb.) ihtiyacı olabilir.
Bunu başarmak için bir test çalıştırıcısı, parçası olduğu ve içinde yürütü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ısı uygulaması için, IConfiguration
nesnesini almak üzere IConfigurationReceiver'ı uygulamanız gerekecektir.
Esnek test koşucusu
Test çalıştırıcıları, eğer onlar üzerinde ayrıntılı bir kontrole sahiplerse, testlerini çalıştırmanın esnek bir yolunu sağlayabilirler; örneğin bir JUnit testleri çalıştırıcısı, her birim testini ayrı ayrı çalıştırabilir.
Bu, daha büyük donanım ve altyapının bu hassas kontrolden yararlanmasına ve kullanıcıların filtreleme yoluyla test çalıştırıcısını kısmen çalıştırmasına olanak tanır.
Filtreleme desteği, çalıştırılması gereken veya çalışmaması gereken testler için include
ve exclude
filtrelerinin alınmasına olanak tanıyan ITestFilterReceiver arayüzünde açıklanmıştır.
Bizim geleneğimize göre bir test, bir veya daha fazla dahil etme filtresiyle eşleşiyorsa VE hariç tutma filtrelerinden hiçbiriyle eşleşmiyorsa çalıştırılacaktır. Herhangi bir dahil etme filtresi verilmemişse, hariç tutma filtrelerinden herhangi biriyle eşleşmediği sürece tüm testler çalıştırılmalıdır.