Android 9 umfasst Support für die Inanspruchnahme des Dienstes Name einer bestimmten HAL-Instanz, basierend auf dem Gerät, auf dem die Vendor Test Suite installiert ist (VTS)-Tests werden ausgeführt. VTS HAL-Tests ausführen, die den Dienstnamen berücksichtigen ermöglicht es Entwicklern, das Testen von Anbietererweiterungen, mehreren HALs und mehrere HAL-Instanzen in ziel- und hostseitigen VTS-Testläufen.
Dienstnamen
Jede Instanz des laufenden HAL-Dienstes registriert sich mit einem Dienstnamen.
In früheren Android-Versionen waren Entwickler, die VTS HAL-Tests durchführten,
muss der richtige Dienstname für den Testclient in
getService()
oder den Namen leer lassen und auf die Standardeinstellung zurücksetzen
Dienstnamen. Dieser Ansatz hat unter anderem folgende Nachteile:
- Sich auf das Wissen des Testentwicklers verlassen, um den richtigen Dienst einzurichten Namen.
- Standardmäßig auf Tests für eine einzelne Dienstinstanz beschränkt.
- Manuelle Verwaltung von Dienstnamen (da die Namen hartcodiert, müssen sie manuell aktualisiert werden, wenn sich der Dienstname ändert.
Unter Android 9 erhalten Entwickler automatisch Dienstname für eine bestimmte HAL-Instanz basierend auf dem zu testenden Gerät. Zu den Vorteilen dieses Ansatzes gehört die Unterstützung für Tests:
- Anbieter-HAL-Erweiterungen. Wenn ein Zulieferunternehmen Implementierung von Camera.provider-HAL, die auf Anbietergeräten mit einer einen benutzerdefinierten Dienstnamen verwenden, kann VTS die Anbieterinstanz identifizieren und den Test dagegen verstoßen.
- Mehrere HAL-Instanzen: Wenn zum Beispiel der Parameter
graphics.composer
HAL hat zwei Instanzen (eine mit Dienstname) „Standard“ und eine mit dem Dienstnamen „vr“, kann VTS sowohl Instanzen jeweils einen Test durchführen. - Multi-HAL-Tests. Wird beim Testen mehrerer HALs mit Wenn Sie z. B. einen VTS-Test ausführen, der prüft, Schlüsselmaster und Gatekeeper HAL arbeiten zusammen, VTS kann alle Kombinationen testen von Dienstinstanzen für diese HALs.
Zielseitige Tests
Um Dienstnamen für zielseitige Tests zu aktivieren,
9 enthält eine anpassbare Testumgebung
(VtsHalHidlTargetTestEnvBase
)
das Schnittstellen für Folgendes bietet:
- Registrieren Sie die Targeting-HAL(s) im Test.
- Listen Sie alle registrierten HAL(s) auf.
- Rufen Sie die Dienstnamen für registrierte HALs ab, die vom VTS-Framework bereitgestellt werden.
Darüber hinaus bietet das VTS-Framework Laufzeitunterstützung für:
- Vorverarbeitung der Testbinärdatei, um alle registrierten Test-HAL(s) zu erhalten.
- Identifizieren aller ausgeführten Dienstinstanzen und Abrufen des Dienstnamens für
jede Instanz (abgerufen anhand von
vendor/manifest.xml
). - Berechnung aller Instanzkombinationen (zur Unterstützung mehrerer HAL) Tests).
- Neuen Test für jede Dienstinstanz (Kombination) generieren
Beispiel:
<ph type="x-smartling-placeholder">
Zielseitige Tests für Dienstnamen einrichten
So richten Sie Ihre Testumgebung für Tests zur Erkennung von Dienstnamen auf Zielseite ein:
- Definieren Sie ein
testEnvironment
basierend aufVtsHalHidlTargetTestEnvBase
und registrieren Sie Test-HALs:#include <VtsHalHidlTargetTestEnvBase.h> class testEnvironment : public::testing::VtsHalHidlTargetTestEnvBase { virtual void registerTestServices() override { registerTestService<IFoo>(); } };
- Verwenden Sie zum Bestehen der Prüfung die von der Testumgebung bereitgestellte
getServiceName()
-Datei Dienstname:::testing::VtsHalHidlTargetTestBase::getService<IFoo>(testEnv->getServiceName<IFoo>("default")); // "default" is the default service name you want to use.
- Registrieren Sie die Testumgebung in
main()
undinitTest
:int main(int argc, char** argv) { testEnv = new testEnvironment(); ::testing::AddGlobalTestEnvironment(testEnv); ::testing::InitGoogleTest(&argc, argv); testEnv->init(argc, argv); return RUN_ALL_TESTS(); }
Weitere Beispiele finden Sie unter
VtsHalCameraProviderV2_4TargetTest.cpp
Hostseitige VTS-Tests
Bei Host-seitigen VTS-Tests werden Testskripts auf Host-Seite statt Test-Binärdateien auf auf das Zielgerät aus. Um die Bekanntheit des Dienstnamens für diese Tests zu aktivieren, können Sie Verwenden Sie Vorlagen auf Hostseite, um dasselbe Testskript mehrmals auszuführen. verschiedene Parameter (ähnlich dem parametrisierten gtest-Test).
<ph type="x-smartling-placeholder">
- </ph>
- Das hal test-Skript gibt die Targeting-HAL an. Dienst(en) im Test.
- Die
hal_hidl_host_test
(Unterklasse vonparam_test
) bezieht die registrierten Test-HAL(s) von Testskript, identifiziert den bzw. die entsprechenden Dienstnamen für die Test-HAL, und generiert dann Kombinationen aus Dienstnamen (für Multi-HAL-Tests) als Test Parameter. Außerdem bietet sie diegetHalServiceName()
-Methode, gibt den entsprechenden Dienstnamen gemäß dem an den aktuellen Testfall. - Die param_test Vorlage unterstützt die Logik, um eine Liste von Parametern zu akzeptieren und alle angegebenen Testläufe für jeden Parameter. Das heißt: werden für jeden Testlauf N neue parametrisierter Testfall (N = Größe der Parameter), jeder mit einem .
Dienstnamenserkennung auf Hostseite einrichten
So richten Sie Ihre Testumgebung für hostseitige Dienstnamen-Tests ein:
- Geben Sie den Ziel-HAL-Dienst im Testskript an:
TEST_HAL_SERVICES = { "android.hardware.foo@1.0::IFoo" }
- Rufen Sie
getHalServiceName()
auf und übergeben Sie den Namen an die Init hal:self.dut.hal.InitHidlHal( target_type='foo', target_basepaths=self.dut.libPaths, target_version=1.0, target_package='android.hardware.foo', target_component_name='IFoo', hw_binder_service_name =self.getHalServiceName("android.hardware.foo@1.0::IFoo"), bits=int(self.abi_bitness))
Weitere Beispiele finden Sie unter
VtsHalMediaOmxStoreV1_0HostTest.py
Test-HALs registrieren
In früheren Android-Versionen identifizierte VTS die Test-HAL mithilfe der
Option „<precondition-lshal>
“ konfiguriert in
AndroidTest.xml
. Dieser Ansatz war schwierig zu pflegen, da er
dass die Entwickler den Test ordnungsgemäß konfigurieren und
Konfiguration entsprechend) und ungenau (da es nur das Paket
und nicht die Informationen zur Benutzeroberfläche).
In Android 9 identifiziert VTS den Test-HAL mithilfe von Bewusstsein für den Dienstnamen. Die registrierten Test-HALs sind auch nützlich für:
- Vorbedingungsprüfungen. Vor dem HAL-Test kann VTS Prüfen, ob der Test-HAL auf dem Zielgerät verfügbar ist, und die Tests überspringen Ist dies nicht der Fall (siehe VTS) Testbarkeitsprüfung).
- Messung der Abdeckung: VTS unterstützt prozessübergreifenden Code Messung der Abdeckung anhand des Wissens über die gewünschten HAL-Testdienste zu messen (z.B. um die Abdeckung des Hal-Service-Prozesses zu verringern).