Bu dokümanda, çok cihazlı modüllerin nasıl oluşturulacağıyla ilgili adım adım talimatlar sağlanmakta ve bilinen mevcut sınırlamalar belirtilmektedir.
Örnek
CTS kablosuz bağlantıya duyarlı çoklu cihaz modülü sağlanır. Bir cihazdan kablosuz ağ üzerinden mesaj gönderir ve diğer cihazın bu mesajı aldığını doğrular.
Modülün kaynağı packages/modules/Wifi/tests/hostsidetests/multidevices/test/aware/ adresindedir.
Örneği, yararlı olduğunu düşündüğümüz kadar yorumla notlandırdık.
1. adım: Modül klasörünü oluşturun
Ait olduğu paket projesinde çok cihazlı modülünüz için bir klasör oluşturmanız önerilir. Örneğin: cts/hostsidetests/multidevices/. Bu, tüm çok cihazlı modüllerin en azından ilk başta birlikte yerleştirilmeye devam etmesi için önerilir. Bu, örneklerin bulunmasını kolaylaştırır.
Bu modüle ait tüm dosyalar kendi modül klasörlerine yerleştirilmelidir. Örneğin: wifi_aware
.
2. adım: Testi oluşturun
Test mantığınızı burada uygularsınız. Bu, test edilen öğeye büyük ölçüde bağlıdır.
Mobly test kaynağını oluşturun. Örneğin: wifi_aware_test.py.
3. Adım: Derleme dosyasını oluşturun: Android.bp
packages/modules/Wifi/tests/hostsidetests/multidevices/test/Android.bp gibi bir Android.bp dosyası ekleyin. 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 dosyayla paketlenir ve ATest tarafından testte bulunup yüklenebilir veya sürekli yürütme sırasında 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ı çok cihazlı modüller için özel Mobly snippet'leri gerekebilir. Örnek test, packages/modules/Wifi/tests/hostsidetests/multidevices/com.google.snippet.wifi/aware/WifiAwareSnippet.java adresinde bulunan ve Mobly Snippet Lib ile oluşturulan bir kablosuz bağlantıya duyarlı snippet içerir. Mobly Snippet Lib, Android'de external/mobly-snippet-lib/ adresinde kullanılabilir.
Kod snippet'i, Android.bp'de standart enstrümantasyon gibi android_test kuralıyla tanımlanmalıdır:
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 aşağıdakine benzer iki cihaz belirtmeniz gerekir:
<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 testte Mobly bağımlılığı vardır.
PythonVirtualenvPreparer
için herhangi bir bağımlılık belirtilebilir ve pip ile yüklenir. mobly-par-file-name
forMoblyBinaryHostTest
, Android.bp'deki modül adıyla eşleşmelidir.- Test için bir
mobly-test-timeout
belirtin. Milisaniye cinsindendir ve tüm python ikili program yürütme işlemi (tüm test durumları birlikte) için geçerlidir. Bu, bazı sorunlar durumunda test durumlarının sonsuza kadar askıda kalmasını önlemek için gereklidir. - Her
device
etiketi her cihazda farklı bir kurulum içerebilir. Mobly yapılandırması, bunları XML'de belirtildiği sırayla alır.
Snippet apk'sinin yüklenmesiyle ilgili:
- İlk POC, kapsam ekibiyle yapılan görüşmeden sonra snippet APK'larını target_preparer aracılığıyla yükleyecek şekilde güncellendi: Kapsam ölçümlerinin çok erken silinmediğinden emin olmak için Python ikili dosyalarındaki test kodu yerine Harness ile kaldırma işlemi, zamanlama açısından daha iyi garantiler sunar.
5. adım: Testi yerel olarak çalıştırın: atest
Çok cihazlı testler şu anda yalnızca fiziksel cihazlarda çalışır. Testi çalıştırmadan önce test cihazlarınızın doğru durumda olduğundan emin olun. adb
devices
komutu, bağlı cihazlarınızın listesini raporlar. Liste, test için tasarlanmamış cihazlar içeriyorsa -s işaretçisini kullanarak test için 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 yerel olarak atest ile çalıştırabilirsiniz:
$ atest CtsWifiAwareTestCases
Test çıktısının özet başlığında kullanılan cihaz sayısını (Test executed with 2 device(s)
gibi) görürsünüz.
Sorun giderme
Test, yerel olarak çalıştırıldığında aşağıdaki nedenlerle başarısız olursa:
Virtualenv hatası
java.io.IOException: Cannot run program
"virtualenv": error=2, No such file or directory
Lütfen PATH'inizde virtualenv
dosyasının bulunduğundan emin olun. PATH'e"~/.local/bin" eklendiğinde bu sorun düzelir. virtualenv yüklü değilse https://virtualenv.pypa.io/en/latest/installation.html adresini ziyaret edin.
En az 2 denetleyici nesnesi alınması beklenirken 1 tane alındı
Test modülleri çok cihazlı veya tek cihazlıdır. Karışık modüller 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: Tetiklemek üzere parçalamayı (örneğin: --shard-count 2) veya run cts-multidevces
kullanabilirsiniz.