Ticaret Federasyonu'nda ana bilgisayar odaklı bir test yazın

Bu sayfada ana bilgisayar tarafından yönlendirilen JUnit4 tarzı bir cihaz testinin nasıl yazılacağı açıklanmaktadır. Bu, donanımın ana tarafının cihaza karşı eylemleri tetikleyeceği anlamına gelir.

"Ana bilgisayar tarafı" testleri ile "ana bilgisayar odaklı" testlerin biraz farklı olduğunu düşündüğümüzü unutmayın:

  • Ana bilgisayar odaklı 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: Tamamen ana bilgisayarda çalışan ve yalnızca ana bilgisayarda bir şeyi test eden bir testtir, örneğin birim testleri.

Neden enstrümantasyon testi yerine ana bilgisayar odaklı 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 sonlandırabilir, test devam edemez ve hiçbir sonuç elde edilemez.

Ana bilgisayar odaklı testler, testin bağlı olduğu harici cihazlarla etkileşimi gerektiren ek kurulum adımlarını da yönlendirebilir.

Ana bilgisayar odaklı bir test, bu kullanım durumlarını ele alabilir ve cihazın daha fazla senaryoyla ileri düzeyde test edilmesine olanak tanır. Eğer bu durumdaysanız, ana bilgisayar odaklı bir test yazmak en mantıklısı olacaktır.

Ana bilgisayar odaklı testler TF'de 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'ndaki 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 JUnit4 testiyle aynıdır:

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

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

  • installPackage : Hedef cihaza APK kurulmasına izin verir.
  • installPackageAsUser : Hedef cihaza kullanıcı olarak bir APK kurulmasına 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 hedef cihaza karşı bir enstrümantasyon testi çalıştırın.

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

  • getDevice() : Aygıtı değiştirmek için bir TF aygıt 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, #getDevice() işleyicisinin bazı aygıta özgü, tek seferlik, sınıf başına kurulum veya temizlik 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 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ılabilecek cihaz ve mağaza özelliklerini kullanmanıza olanak tanır. BaseHostJUnit4Test #getTestInformation() aracılığıyla TestInformation statik olmayan bir kapsamda alınmasını destekler.

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

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

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

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