Bu belgede, çok cihazlı modüller oluşturma ile ilgili adım adım talimatlar verilmekte ve bilinen mevcut sınırlamalar belirtilmektedir.
Örnek
CTS Wi-Fi Aware çeşitli cihazlar modülü sağlanır. Bir cihazdan kablosuz ağ üzerinden mesaj gönderir ve diğer cihazın mesajı aldığını doğrular.
Modülün kaynağı packages/modules/Wifi/tests/hostsidetests/multidevices/test/aware/ konumundadır.
Örneği, faydalı olacağını düşündüğümüz kadar çok yorumla açıkladık.
1. adım: Modül klasörünü oluşturun
Paketteki çok cihazlı modülünüz için ait olduğu proje içinde bir klasör oluşturmanız önerilir. Örneğin: cts/hostsidetests/multidevices/. Örnekleri bulmayı kolaylaştırmak için tüm çok cihazlı modüllerin en azından ilk başta aynı yerde kalmasını öneririz.
Bu modüle ait tüm dosyalar kendi modül klasörüne yerleştirilmelidir. Örneğin: wifi_aware.
2. adım: Testi oluşturun
Test mantığınızı burada uygularsınız. Bu, büyük ölçüde neyin test edildiğine bağlıdır.
Aşağıdaki gibi bir Mobly test kaynağı oluşturun: wifi_aware_test.py.
3. adım: Derleme dosyasını oluşturun: Android.bp
Şu gibi bir Android.bp dosyası ekleyin: packages/modules/Wifi/tests/hostsidetests/multidevices/test/Android.bp. Aşağıdakine benzer bir python_test_host modülü tanımlayın:
python_test_host {
name: "CtsWifiAwareTestCases",
main: "wifi_aware_test.py",
srcs: ["wifi_aware_test.py"],
test_suites: [
"cts",
"general-tests",
],
test_options: {
unit_test: false,
},
data: [
// Package the snippet with the mobly test
":wifi_aware_snippet",
],
}
Veri alanı ile test için snippet'leri belirtin. Bu alan, ikili program ile paketlenir ve ATest veya sürekli yürütme ile testte bulunup yüklenebilir.
Mobly Bundled Snippets, Android'de external/mobly-bundled-snippets/ adresinde kullanılabilir.
İsteğe bağlı: Özel snippet'ler oluşturma
Bazı çeşitli cihaz modülleri için özel Mobly snippet'leri gerekebilir. Örnek test, packages/modules/Wifi/tests/hostsidetests/multidevices/com.google.snippet.wifi/aware/WifiAwareSnippet.java konumunda Wi-Fi'ye duyarlı bir snippet içerir. Bu snippet, Android'de external/mobly-snippet-lib/ konumunda bulunan Mobly Snippet Lib ile oluşturulmuştur.
Snippet, Android.bp'de android_test kuralıyla tanımlanmalıdır. Örneğin: standart enstrümantasyon:
android_test {
name: "wifi_aware_snippet",
sdk_version: "current",
srcs: [
"CallbackUtils.java",
"WifiAwareSnippet.java",
],
manifest: "AndroidManifest.xml",
static_libs: [
"androidx.test.runner",
"guava",
"mobly-snippet-lib",
],
}
4. adım: Modül yapılandırmasını oluşturun: AndroidTest.xml
packages/modules/Wifi/tests/hostsidetests/multidevices/test/aware/AndroidTest.xml gibi bir AndroidTest.xml dosyası ekleyin. Bu test yapılandırmasında, test için iki cihaz belirtmeniz gerekir. Örneğin:
<configuration description="Config for CTS Wifi Aware test cases">
<option name="test-suite-tag" value="cts" />
<option name="config-descriptor:metadata" key="component" value="wifi" />
<option name="config-descriptor:metadata" key="parameter" value="not_instant_app" />
<option name="config-descriptor:metadata" key="parameter" value="not_multi_abi" />
<option name="config-descriptor:metadata" key="parameter" value="not_secondary_user" />
<device name="device1">
<!-- For coverage to work, the APK should not be uninstalled until after coverage is pulled.
So it's a lot easier to install APKs outside the python code.
-->
<target_preparer class="com.android.tradefed.targetprep.suite.SuiteApkInstaller">
<option name="test-file-name" value="wifi_aware_snippet.apk" />
</target_preparer>
<target_preparer class="com.android.tradefed.targetprep.RunCommandTargetPreparer">
<option name="run-command" value="input keyevent KEYCODE_WAKEUP" />
<option name="run-command" value="wm dismiss-keyguard" />
</target_preparer>
<target_preparer class="com.android.tradefed.targetprep.PythonVirtualenvPreparer">
<!-- Any python dependencies can be specified and will be installed with pip -->
<option name="dep-module" value="mobly" />
</target_preparer>
</device>
<device name="device2">
<target_preparer class="com.android.tradefed.targetprep.suite.SuiteApkInstaller">
<option name="test-file-name" value="wifi_aware_snippet.apk" />
</target_preparer>
<target_preparer class="com.android.tradefed.targetprep.RunCommandTargetPreparer">
<option name="run-command" value="input keyevent KEYCODE_WAKEUP" />
<option name="run-command" value="wm dismiss-keyguard" />
</target_preparer>
</device>
<test class="com.android.tradefed.testtype.mobly.MoblyBinaryHostTest">
<!-- The mobly-par-file-name should match the module name -->
<option name="mobly-par-file-name" value="CtsWifiAwareTestCases" />
<!-- Timeout limit in milliseconds for all test cases of the python binary -->
<option name="mobly-test-timeout" value="60000" />
</test>
</configuration>
Unutmayın:
- Bu örnek test, Mobly'ye bağımlıdır.
PythonVirtualenvPrepareriçin herhangi bir bağımlılık belirtilebilir ve pip ile yüklenir. MoblyBinaryHostTestiçinmobly-par-file-name, Android.bp'deki modül adıyla eşleşmelidir.- Test için bir
mobly-test-timeoutbelirtin. Bu değer milisaniye cinsindendir ve Python ikili programının tüm yürütme işlemleri (tüm test senaryoları birlikte) için geçerlidir. Bazı sorunlar olması durumunda test durumlarının sonsuza kadar takılı kalmasını önlemek için bu gereklidir. - Her
deviceetiketi, her cihazda farklı bir kurulum içerebilir. Mobly yapılandırması, bunları XML'de belirtilen sırayla alır.
Snippet APK'sının yüklenmesiyle ilgili:
- Kapsam ekibiyle yapılan görüşme nedeniyle ilk İOOY, snippet APK'larının target_preparer aracılığıyla yüklenecek şekilde güncellendi: Kapsam ölçümlerinin çok erken silinmemesini sağlamak için Python ikili dosyalarındaki test kodu yerine Harness tarafından yapılan kaldırma işlemi, zamanlama açısından daha iyi garantiler sunar.
5. adım: Testi yerel olarak çalıştırın: atest
Şu anda çeşitli cihaz testleri yalnızca fiziksel cihazlarda çalıştırılmaktadır. Testi çalıştırmadan önce test cihazlarınızın uygun durumda olduğunu doğrulayın. adb
devices komutu, bağlı cihazlarınızın listesini bildirmelidir. Liste, test için tasarlanmamış cihazlar içeriyorsa -s işaretini kullanarak test edilecek cihazları belirtin.
Kablosuz bağlantı testleri için cihazlarda kablosuz bağlantının etkinleştirildiğinden (fabrika ayarlarına sıfırlamadan sonra) emin olun.
Testi atest ile yerel olarak çalıştırabilirsiniz:
$ atest CtsWifiAwareTestCases
En son çıktıda özet başlığında kullanılan cihazların sayısını (ör. Test executed with 2 device(s)) görmelisiniz.
Sorun giderme
Test, yerel olarak çalıştırılırken şu nedenlerle başarısız olursa:
Virtualenv hatası
java.io.IOException: Cannot run program
"virtualenv": error=2, No such file or directory
Lütfen virtualenv öğesinin PATH'inizde olduğundan emin olun. PATH'e"~/.local/bin" eklenmesi bu sorunu düzeltmelidir.
virtualenv yüklü değilse şu adımları uygulayın: https://virtualenv.pypa.io/en/latest/installation.html
En az 2 denetleyici nesnesi alınması beklenirken 1 nesne alındı
Test modülleri çok cihazlı veya tek cihazlıdır, karma modül yoktur. Birden fazla cihaz olmadan çok cihazlı bir modülü çalıştırmaya çalışırsanız şu hatayı görürsünüz:
Expected to get at least 2 controller objects, got 1
Modülü çoklu cihaz modunda çalıştırmak sorunu çözecektir.
CTS için: Parçalamayı kullanarak (örneğin: --shard-count 2) veya run cts-multidevces ile tetikleyebilirsiniz.