Zestaw w Tradefed to konfiguracja, w której kilka testów jest uruchamianych w ramach wspólnego narzędzia do uruchamiania testów, które steruje ogólnym wykonaniem.
W Tradefed zestawy są uruchamiane za pomocą
ITestSuite
klasy, która umożliwia dodawanie i usuwanie testów niezależnie od sposobu ich
uruchamiania.
Definicje
- Zestaw: zbiór modułów testowych skonfigurowanych do uruchamiania w podobnej konfiguracji najwyższego poziomu , aby raportować wyniki w ramach jednego wywołania.
- Konfiguracja najwyższego poziomu: konfiguracja stosowana do urządzeń przed uruchomieniem dowolnego modułu testowego.
- Konfiguracja główna: konfiguracja XML Tradefed na poziomie zestawu, która określa, które moduły mają być uruchamiane i która konfiguracja najwyższego poziomu ma być używana.
- Konfiguracja na poziomie modułu: konfiguracja stosowana do urządzeń tuż przed uruchomieniem modułu. Są one też nazywane konfiguracjami specyficznymi dla modułu.
- Konfiguracja modułu: odnosi się do konfiguracji XML Tradefed
AndroidTest.xml, która opisuje moduły i konfigurację na poziomie modułu. - Moduł: jednostka testowa składająca się z etapu konfiguracji (konfiguracja na poziomie modułu), etapu wykonania testu i etapu wyłączenia.
- Ponawianie w ramach modułu: automatyczne ponawianie wykonywane przez narzędzie w module.
- Ponawianie zestawu: pełne ponowne uruchomienie testów zestawu, które wcześniej zakończyły się niepowodzeniem.
Struktura ITestSuite
ITestSuite
w Tradefed odnosi się do wspólnej klasy bazowej, która steruje wykonaniem zestawu. Jest ona
współdzielona przez wszystkie główne zestawy testów, w szczególności przez pakiet CTS (Android Compatibility Test
Suite) i pakiet VTS (Android Vendor Test Suite
), i zapewnia spójne działanie
we wszystkich zestawach.
Czasami ITestSuite nazywamy narzędziem do uruchamiania zestawów.
Podczas wykonywania narzędzie do uruchamiania zestawów wykonuje te czynności:
- Wczytuje konfigurację modułu i określa, który zestaw ma być uruchomiony.
Uruchamia każdy moduł:
- Uruchamia konfigurację na poziomie modułu.
- Uruchamia testy modułu.
- Uruchamia wyłączenie na poziomie modułu.
Raportuje wyniki.
Konfiguracja najwyższego poziomu
Z punktu widzenia Tradefed ITestSuite to po prostu kolejny test. Jest on złożony, ale nadal jest tylko testem, takim jak każdy inny IRemoteTest. Dlatego podczas określania narzędzia do uruchamiania zestawów w konfiguracji Tradefed Tradefed postępuje zgodnie ze zwykłym wzorcem konfiguracji: uruchamia build_provider, target_preparer, test (w tym przypadku nasz zestaw) i target_cleaner.
Ta sekwencja w konfiguracji Tradefed zawierająca ITestSuite to konfiguracja najwyższego poziomu.
Przykład:
<configuration description="Common config for Compatibility suites">
<build_provider class="com.android.compatibility.common.tradefed.build.CompatibilityBuildProvider" />
<!-- Setup applied before the suite: so everything running in the suite will
have this setup beforehand -->
<target_preparer class="com.android.tradefed.targetprep.RunCommandTargetPreparer">
<option name="run-command" value="settings put global package_verifier_enable 0" />
<option name="teardown-command" value="settings put global package_verifier_enable 1"/>
</target_preparer>
<!-- Our ITestSuite implementation -->
<test class="com.android.compatibility.common.tradefed.testtype.suite.CompatibilityTestSuite" />
<result_reporter class="com.android.compatibility.common.tradefed.result.ConsoleReporter" />
</configuration>
Metadane modułu
Metadane modułu to dodatkowe informacje określone w module testowym AndroidTest.xml. Te metadane umożliwiają określenie dodatkowych informacji o module, a moduły można filtrować za pomocą metadanych.
Przykładowe metadane:
<option name="config-descriptor:metadata" key="component" value="framework" />
<option name="config-descriptor:metadata" key="parameter" value="instant_app" />
Przykładowy filtr metadanych:
--module-metadata-include-filter component=framework
Powyższe polecenie uruchomi wszystkie moduły z metadanymi framework jako component.
Pełny przykład AndroidTest.xml:
<configuration description="Config for CTS Gesture test cases">
<option name="test-suite-tag" value="cts" />
<!-- Metadata -->
<option name="config-descriptor:metadata" key="component" value="framework" />
<option name="config-descriptor:metadata" key="parameter" value="instant_app" />
<!-- End: metadata -->
<target_preparer class="com.android.tradefed.targetprep.suite.SuiteApkInstaller">
<option name="cleanup-apks" value="true" />
<option name="test-file-name" value="CtsGestureTestCases.apk" />
</target_preparer>
<test class="com.android.tradefed.testtype.AndroidJUnitTest" >
<option name="package" value="android.gesture.cts" />
<option name="runtime-hint" value="10m50s" />
</test>
</configuration>
Moduł z parametrami
Specjalnym typem metadanych jest parameter.
<option name="config-descriptor:metadata" key="parameter" value="instant_app" />
Te metadane określają, że moduł musi być wykonywany w innym trybie, np. jako aplikacja błyskawiczna, a nie w standardowym trybie aplikacji.
Wszystkie możliwe tryby lub parametry są opisane przez
ModuleParameters
i mają powiązany z nimi moduł obsługi w
ModuleParametersHelper
, który umożliwia zmianę konfiguracji modułu w celu wykonania go w określonym trybie.
Na przykład tryb aplikacji błyskawicznej wymusza instalację pliku APK w trybie błyskawicznym.
Aby parametryzacja mogła nastąpić, w wierszu poleceń trzeba ją włączyć za pomocą tego polecenia:
--enable-parameterized-modules
Można też uruchomić pojedynczy tryb za pomocą tego polecenia:
--enable-parameterized-modules --module-parameter <Mode>
--enable-parameterized-modules --module-parameter INSTANT_APP
Gdy uruchamiana jest wersja modułu z parametrami, raportuje ona wyniki pod
nazwą modułu z parametrami, np. CtsGestureTestCases[instant] zamiast
podstawowej nazwy CtsGestureTestCases.