Farklı cihazlara yönelik modüller

Bu dokümanda, birden fazla cihaz oluşturmayla ilgili adım adım talimatlar yer almaktadır ve bilindiğinde mevcut sınırlamaları belirtir.

Örnek

CTS kablosuz duyarlı çoklu cihaz modülü sağlanır. Bir kişiden mesaj gönderir kablosuz ağ üzerinden cihazı alır ve diğer cihazın iletiyi aldığını doğrular.

Modülün kaynağı: paketler/modüller/Wifi/tests/hostsidetests/multidevices/test/aware/.

Örneğe faydalı olduğunu düşündüğümüz kadar açıklama ekledik.

1. Adım: Modül klasörünü oluşturun

Paketteki birden fazla cihaz modülünüz için bir klasör oluşturmanız önerilir ve açıklıktan ibarettir. Örneğin: cts/hostsidetests/multidevices/. Bunu, birden çok cihaza ait tüm modüllerin en az Bu da örneklerin keşfedilmesini kolaylaştıracaktır.

Bu modüldeki tüm dosyalar kendi modül klasörlerinin altına yerleştirilmelidir. Örneğin, örnek: wifi_aware.

2. Adım: Testi oluşturun

Test mantığınızı burada uygularsınız. Büyük ölçüde projenin yardımcı oluyorum.

Mobly test kaynağını oluşturun. Örneğin: wifi_aware_test.py adresine gidin.

3. Adım: Derleme dosyasını oluşturun: Android.bp

Şunun gibi bir Android.bp dosyası ekleyin: Paketler/modüller/Wifi/tests/hostsidetests/multidevices/test/Android.bp Şuna 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ıyla test için snippet'leri belirtin. Bu veri alanı ATest tarafından veya ATest tarafından bulunup teste eklenebilir Sürekli yürütme.

Mobly Gruplandırılmış Snippet'ler Android'de şu adresten kullanılabilir: external/mobly-bundled-snippets/ (harici/mobly-bundled-snippets) sayfasından yararlanabilirsiniz.

İsteğe bağlı: Özel snippet'ler oluşturma

Birden çok cihaza yönelik bazı modüller özel Mobly snippet'leri gerektirebilir. Örnek test kablosuz duyarlı snippet içerir. packages/modules/Wifi/tests/hostsidetests/multidevices/com.google.snippet.wifi/aware/WifiAwareSnippet.java, Mobly Snippet Lib ile geliştirilmiştir ve Android'de şurada mevcuttur: external/mobly-snippet-lib/.

Snippet, Android.bp'de şunun gibi android_test kuralıyla tanımlanmalıdır: standart araçlar:

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

Şunun gibi bir AndroidTest.xml dosyası ekleyin: packages/modules/Wifi/tests/hostsidetests/multidevices/test/aware/AndroidTest.xml. Bu test yapılandırmasında test için iki cihaz belirtmeniz gerekir. şuna benzer:

<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>

Şu noktalara dikkat edin:

  • Bu örnek testin Mobly'ye bağımlılığı var. Herhangi bir bağımlılık belirtilebilir PythonVirtualenvPreparer için kullanılacak ve pip ile yüklenecek.
  • MoblyBinaryHostTest için mobly-par-file-name özelliği modülle eşleşmelidir gerekir.
  • Test için bir mobly-test-timeout belirtin. Milisaniye cinsinden tam python ikili program yürütmesi için geçerlidir (tüm test durumları birlikte). Bu, bazı sorunlar yaşanması halinde test durumlarının sonsuza kadar askıya alınmasını önlemek için gereklidir.
  • Her device etiketi, her bir cihaz (The Mobly) için ayrı bir kurulum içerebilir config, bu öğeleri XML'de belirtilen sırayla alır.

Snippet apk ile ilgili yükleme:

  • İlk POC, üzerinden snippet apk'leri yükleyecek şekilde güncellendi. Kapsam ekibi ile görüştüğümüzden dolayı target_preparer: kapsam ölçümleri çok erken silinmez, bunlar Harness tarafından kaldırılır test kodu yerine Python ikili dosyaları yerine pek çok yolu vardır.

5. Adım: Testi yerel olarak çalıştırın: atest

Şu anda birden fazla cihazda yapılan testler yalnızca fiziksel cihazlarda yapılmaktadır. test cihazlarınızın doğru durumda olduğunu doğrulayın. adb devices komutu, bağlı cihazlarınızın listesini bildirir. Listede cihazlar, test için tasarlanmamış cihazları -s kullanarak belirtin tıklayın.

Kablosuz bağlantı testleri için cihazlarda kablosuz bağlantının etkinleştirildiğinden emin olun (fabrika ayarlarına sıfırladıktan sonra).

Testi yerel olarak aşağıdaki şekilde çalıştırabilirsiniz:

$ atest CtsWifiAwareTestCases

Testteki özet başlığında kullanılan cihaz sayısını göreceksiniz bir çıkış değeri (ör. Test executed with 2 device(s)) yazın.

Sorun giderme

Test, yerel olarak çalıştırıldığında aşağıdaki nedenlerle başarısız oluyorsa:

Virtualenv hatası

java.io.IOException: Cannot run program
"virtualenv": error=2, No such file or directory

Lütfen virtualenv yolunun PATH yolunda olduğundan emin olun. "~/.local/bin" ekleniyor PATH hedefine bu sorunu çözmek için. Virtualenv yüklü değilse, şu adresi ziyaret edin: https://virtualenv.pypa.io/en/En/Son/installation.html

En az 2 denetleyici nesnesi olması bekleniyordu, 1 tane alındı

Test modülleri birden fazla veya tek cihazlı olabilir. kullanabilirsiniz. Birden fazla cihaz modülü olmayan bir çoklu cihaz modülünü çalıştırmaya çalışırsanız cihazlarda şu hatayı görürsünüz:

Expected to get at least 2 controller objects, got 1

Modülü birden çok cihaz modunda yürütmek sorunu çözer.

CTS için: Bunu tetiklemek için parçalamayı kullanabilirsiniz (Örneğin: --shard-count 2) veya run cts-multidevces.