Bu sayfada, ana makine tarafından yönlendirilen 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 yönetilen" 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ında test: Yalnızca ana makinede çalışan ve yalnızca ana makinede bir şeyi test eden bir testtir (ör. 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.
Barındıran tarafından yürütülen testler, testin bağlı olduğu harici cihazlarla etkileşim gerektiren ek kurulum adımlarını da tetikleyebilir.
Barındıran tarafından yönlendirilen testler bu kullanım alanlarını ele alabilir ve cihazın daha fazla senaryoda ileri düzey test edilmesine olanak tanıyabilir. Bu durumdaysanız en mantıklı seçenek budur.
Ana makine odaklı testler TF'de nasıl yazılır?
Aşağıda örneği 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());
}
}
Trade Federation'daki ana makine tarafından yürütülen testler, DeviceJUnit4ClassRunner JUnit4 test çalıştırıcı tarafından yürütülür. Test sınıfının genel yapısı aşağıdaki gibidir: normal JUnit4 testi:
@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 yüklemenize olanak tanır.installPackageAsUser
: Hedef cihazda kullanıcı olarak APK yüklemenize 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 edin.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ı değiştirmek 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.
Tradefed desteği: Sınıf başına cihaz hazırlama ve temizleme
JUnit4 @BeforeClass
ve @AfterClass
yalnızca statik yöntemler için geçerlidir. Bu nedenle, cihaza özgü, sınıf başına tek seferlik kurulum veya temizleme işlemleri yapmak için #getDevice()
işleyicisini kullanmak mümkün değildir. 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
, TestInformation
değerini #getTestInformation()
aracılığıyla statik olmayan bir kapsamda almayı destekler.
BaseHostJUnit4Test
'ü genişletmiyorsanız TestInformation
nesnesini almak için ITestInformationReceiver
'ü uygulayabilirsiniz.
Tradefed'de ana makineye dayalı test nasıl yapılandırılır?
Tradefed XML yapılandırma dosyasında, ana makine tarafından yürütülen testler HostTest çalıştırıcısıyla çalıştırılır.
<test class="com.android.tradefed.testtype.HostTest" >
<option name="class" value="android.sample.cts.SampleHostJUnit4DeviceTest" />
</test>