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.