Ticaret Federasyonu'nda ana makineye dayalı test yazma

Bu sayfada, ana makine tarafından gerçekleştirilen JUnit4 tarzı bir cihaz testinin nasıl yazılacağı açıklanmaktadır. Bu, paketin ana makine tarafının, bu soruna karşı için geçerlidir.

"Ana makine taraflı" olarak kabul ettiğimizi unutmayın. testler ve "ana makine tarafından sağlanan" her hafta farklı:

  • ana makine odaklı test: Ana makinede çalıştırılan ve bir veya daha fazla cihaz. Test edilen sistem (SUT) ana makinenin kendisinde değil, ancak ana makineden test ediliyor.
  • ana makine tarafı testi: Yalnızca ana makinede çalıştırılan ve bir şeyi test eden bir testtir ana makinede görebilirsiniz (örneğin, birim testleri).

Neden araç testi yerine ana makine odaklı bir test oluşturmalısınız?

Bazı testler, cihazın genel durumunu etkilemenizi gerektirebilir. Örneğin, yeniden başlatma komutu. Enstrümantasyon test durumunda, yeniden başlatma işlemi araçlar varsa test devam edemez ve hiçbir sonuç alınamaz.

Ana makineye dayalı testler, etkileşim gerektiren ek kurulum adımlarına da neden olabilir harici cihazlarla veri alışverişi yapabilirsiniz.

Ana makineye dayalı test, bu kullanım durumlarını ele alabilir ve gelişmiş testler daha fazla senaryoyla karşı karşıya kalabileceğinizden emin olun. Bu durumdaysanız en mantıklı seçenek budur.

Ana makineye dayalı testler TF'de nasıl yazılır?

Aşağıda bir örnek verilmiştir:

@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 makine odaklı testler, DeviceJUnit4ClassRunner tarafından yürütülür JUnit4 test çalıştırıcısı. Test sınıfının genel yapısı aşağıdaki gibidir: normal JUnit4 testi:

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

BaseHostJunit4Test uzatma Test yardımcı programları API'sinde aşağıdakiler gibi faydalı özellikleri devralmanın bir yoludur:

  • installPackage: Hedef cihaza bir APK yüklenmesine olanak tanır.
  • installPackageAsUser: APK'nın hedefteki bir kullanıcı olarak yüklenmesine olanak tanır olanak tanır.
  • uninstallPackage: APK'ların yüklemesinin kaldırılmasına olanak tanır.
  • isPackageInstalled: Bir paketin yüklü olup olmadığını kontrol eder.
  • hasDeviceFeature: Cihazın bir özelliği destekleyip desteklemediğini kontrol edebilirsiniz. (pm list features)
  • runDeviceTests(DeviceTestRunOptions options): Enstrümantasyonu çalıştırma DeviceTestRunOptions'ı kullanarak bir hedef cihaza karşı test etme tüm olası seçenekleri ele almak üzere tasarlanmıştı.

Tradefed cihaz nesnesine de erişim izni verin:

  • getDevice(): Cihazı çalıştırmak için bir TF cihaz nesnesi döndürür.
  • getBuild(): Bilgiyi almak için derleme bilgisi TF nesnesini döndürür: seçeceğiz.
  • getAbi(): Testin çalıştırıldığı ABI'yi döndürür.

Takas desteği: Sınıf bazında cihaz hazırlama ve temizleme

JUnit4 @BeforeClass ve @AfterClass yalnızca statik yöntemler için geçerlidir. Bu nedenle, bazı işlemleri yapmak için #getDevice() işleyicisini tek seferlik, sınıfa özel kurulum veya temizleme işlemleri. Bu sorunu çözmek için üzerine konuşacağız.

  • @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, aşağıdaki özelliklere sahip cihaz ve mağaza özelliklerini kullanmanıza olanak tanır: statik veya statik olmayan kapsamda kullanılır. BaseHostJUnit4Test destekler TestInformation, #getTestInformation() aracılığıyla statik olmayan bir kapsamda alınıyor.

BaseHostJUnit4Test kapsamını genişletmiyorsanız TestInformation nesnesini almak için ITestInformationReceiver.

Tradefed'de ana makineye dayalı test nasıl yapılandırılır?

Tradefed XML yapılandırma dosyasında, ana makineye dayalı testler Ana Makine Testi koşucu oyunu.

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