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());
    }
}

Ticaret Federasyonu Ana odaklı testler ile tahrik edilir DeviceJUnit4ClassRunner JUnit4 testi koşucu. Test sınıfının genel yapısı, normal bir JUnit4 testi ile aynıdır:

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

Uzatılması BaseHostJunit4Test gibi yararlı test programları API devralmak için bir yöntemdir:

  • installPackage : Hedef aygıt üzerinde bir APK yüklemek için izin verir.
  • installPackageAsUser : Hedef aygıt üzerinde bir kullanıcı olarak bir APK yüklemek için izin verir.
  • uninstallPackage : bir APK kaldırmasına izin verir.
  • isPackageInstalled : Bir paket yüklü olup olmadığını kontrol edin.
  • hasDeviceFeature : Cihaz bir özelliği destekleyen veya olmasın denetleyin. ( pm list features )
  • runDeviceTests(DeviceTestRunOptions options) : kullanarak bir hedef cihaz karşı bir enstrümantasyon testi uygulama DeviceTestRunOptions tüm olası seçenekleri ele.

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

  • getDevice() : cihazı kontrol etmek için bir TF aygıt nesnesi döndürür.
  • getBuild() : sürüm hakkında bilgi almak için bir yapı bilgisi TF nesnesini döndürür.
  • getAbi() : Test karşı çalışan ABI döndürür.

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

JUnit4 @BeforeClass ve @AfterClass imkansız kullanmak yapar statik yöntemlere için geçerli olmasına #getDevice() bazı cihaza özgü, tek seferlik, her bir sınıf kurulum yapmak ya da temizlemek için işleyici. 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 Eğer statik veya statik olmayan kapsamında ya kullanılabilen cihaz ve mağaza özellikleri kullanmasına izin verir. BaseHostJUnit4Test alma destekleri TestInformation aracılığı ile statik olmayan kapsamında #getTestInformation() .

Eğer uzanan değilseniz BaseHostJUnit4Test , Uygulayabileceğiniz ITestInformationReceiver alabilmeleri için TestInformation nesnesi.

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

Tradefed XML yapılandırma dosyasında, konak odaklı testler aracılığıyla çalıştırılır HostTest koşucu.

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