Trade Federation'da Host-Driven Test Yazın

Bu sayfa, ana bilgisayar tarafından yürütülen JUnit4 tarzı bir cihaz testinin nasıl yazılacağını açıklar. Bu, koşumun ana tarafının cihaza karşı eylemleri tetikleyeceği anlamına gelir.

"Ana bilgisayar tarafı" testleri ve "ana bilgisayar odaklı" testleri biraz farklı olarak değerlendirdiğimizi unutmayın:

  • ana bilgisayar güdümlü test: Bir veya daha fazla cihazla etkileşime giren ana bilgisayar üzerinde çalışan bir testtir. Test edilen sistem (SUT) ana bilgisayarın kendisinde değil, ana bilgisayardan test ediliyor.
  • ana bilgisayar tarafı testi: Yalnızca ana bilgisayarda çalışan ve yalnızca ana bilgisayarda bir şeyi test eden bir testtir, örneğin birim testleri.

Enstrümantasyon testi yerine neden ana bilgisayar tabanlı bir test oluşturmalısınız?

Bazı testler, yeniden başlatma komutu vermek gibi cihazın genel durumunu etkilemenizi gerektirebilir. Enstrümantasyon testi durumunda, yeniden başlatma enstrümantasyonu öldürür, test devam edemez ve hiçbir sonuç alınamaz.

Ana bilgisayar tarafından yönlendirilen testler, testin bağlı olduğu harici cihazlarla etkileşim gerektiren ek kurulum adımlarını da yürütebilir.

Ana bilgisayar tarafından yönlendirilen bir test, bu kullanım durumlarını işleyebilir ve daha fazla senaryo ile cihazın gelişmiş testine izin verebilir. Bu durumdaysanız, ana bilgisayar tarafından yönlendirilen bir test yazmak en mantıklısıdır.

TF'de ana bilgisayar güdümlü testler nasıl yazılır?

İşte bir örnek:

@RunWith(DeviceJUnit4ClassRunner.class)
public class SampleHostJUnit4DeviceTest extends BaseHostJUnit4Test {
    @Before
    public void setUp() throws Exception {
       // Some setup
    }

    @Test
    public void testCheckWeHaveDevice() throws Exception {
        Assert.assertNotNull(getDevice());
    }
}

Trade Federation'daki ana bilgisayar tabanlı testler, DeviceJUnit4ClassRunner JUnit4 test çalıştırıcısı tarafından yürütülür. Test sınıfının genel yapısı, normal bir JUnit4 testi ile aynıdır:

  • @BeforeClass
  • @Before
  • @Test
  • @After
  • @AfterClass
  • Assume , Assert

BaseHostJunit4Test'i genişletmek, aşağıdakiler gibi faydalı test yardımcı programları API'sini devralmanın bir yoludur:

  • installPackage : Hedef cihaza bir APK yüklemeye izin verir.
  • installPackageAsUser : Hedef cihaza kullanıcı olarak bir APK yüklemeye izin verir.
  • uninstallPackage : Bir APK'nın kaldırılmasına izin verir.
  • isPackageInstalled : Bir paketin kurulu olup olmadığını kontrol edin.
  • hasDeviceFeature : Cihazın bir özelliği destekleyip desteklemediğini kontrol edin. ( pm list features )
  • runDeviceTests(DeviceTestRunOptions options) : Tüm olası seçenekleri işlemek için DeviceTestRunOptions'ı kullanarak bir hedef cihaza karşı bir enstrümantasyon testi çalıştırın.

Ayrıca Tradefed cihaz nesnesine erişim sağlayın:

  • getDevice() : Cihazı manipüle etmek için bir TF cihaz nesnesi döndürür.
  • getBuild() : Yapı hakkında bilgi almak için bir yapı bilgisi TF nesnesi döndürür.
  • getAbi() : Testin çalıştığı ABI'yi döndürür.

Tradefed desteği: Sınıf başına cihaz hazırlama ve temizleme

JUnit4 @BeforeClass ve @AfterClass yalnızca statik yöntemlere uygulanabilir, bu da #getDevice() işleyicisinin aygıta özel, tek seferlik, sınıf başına kurulum veya temizleme yapmak için kullanılmasını imkansız hale getirir. Bu sorunu çözmek için Tradefed ek açıklamasını kullanın.

  • @BeforeClassWithInfo: @BeforeClass ek açıklamalarından önce çalışır
  • @AfterClassWithInfo: @AfterClass ek açıklamalarından sonra çalışır
   @BeforeClassWithInfo
   public static void beforeClassWithDevice(TestInformation testInfo) {
       assertNotNull(testInfo.getDevice());
       testInfo.properties().put("mytest:test-prop", "test");
   }

   @AfterClassWithInfo
   public static void afterClassWithDevice(TestInformation testInfo) {
       assertNotNull(testInfo.getDevice());
       testInfo.properties().put("mytest:test-prop", "test");
   }

TestInformation , statik veya statik olmayan kapsamda kullanılabilen cihazı ve depolama özelliklerini kullanmanıza olanak tanır. BaseHostJUnit4Test , TestInformation #getTestInformation() aracılığıyla statik olmayan bir kapsamda alınmasını destekler.

BaseHostJUnit4Test genişletmiyorsanız, TestInformation nesnesini almak için ITestInformationReceiver uygulayabilirsiniz.

Tradefed'de ana bilgisayar odaklı bir test nasıl yapılandırılır?

Tradefed XML yapılandırma dosyasında, ana bilgisayar tabanlı testler, HostTest çalıştırıcısı aracılığıyla çalıştırılır.

<test class="com.android.tradefed.testtype.HostTest" >
    <option name="class" value="android.sample.cts.SampleHostJUnit4DeviceTest" />
</test>