AOSP inclut la suite de tests GPU du programme de qualité drawElements (deqp) à l'adresse https://android.googlesource.com/platform/external/deqp. Cette page explique en détail comment déployer la suite de tests deqp dans un nouvel environnement.
Pour utiliser le dernier code envoyé, utilisez la branche deqp-dev
.
Pour le code correspondant à une version spécifique d'Android CTS, utilisez le
Branche release-code-name-release
(par exemple, pour Android 6.0,
utilisez la branche marshmallow-release
).
Mise en page source
La mise en page du code source pour les modules de test deqp et les bibliothèques compatibles est dans le tableau ci-dessous. La liste n'est pas exhaustive, mais elle met en avant répertoires les plus importants).
Répertoire | Description |
---|---|
android |
Sources pour les testeurs Android et scripts de compilation |
data |
Fichiers de données de test |
modules |
Sources des modules de test |
modules/egl |
Module EGL |
modules/gles2 |
Module GLES2 |
modules/gles3 |
Module GLES3 |
modules/gles31 |
Module GLES 3.1 |
modules/gles32 |
Module GLES 3.2 |
targets |
Fichiers de configuration de compilation spécifiques à la cible |
framework |
Framework et utilitaires du module de test deqp |
framework/delibs |
Portabilité de base et bibliothèques de compilation |
framework/platform |
Ports de plate-forme |
framework/qphelper |
Bibliothèque d'intégration de programmes de test (C) |
framework/common |
Framework Deqp (C++) |
framework/opengl, framework/egl |
Utilitaires spécifiques aux API |
execserver |
Source ExecServer côté appareil |
executor |
Outil shell et utilitaires de l'exécuteur de test côté hôte |
external |
Création d'un répertoire de bouchon pour les bibliothèques externes libpng et zlib |
Composants Open Source
La deqp utilise libpng
et zlib
, qui peuvent être récupérés
à l'aide du script
platform/external/deqp/external/fetch_sources.py
ou via Git
à partir de platform/external/[libpng,zlib]
.
Créer des programmes de test
Le framework de test a été conçu dans un souci de portabilité. La seule les exigences obligatoires sont la compatibilité totale avec C++ et les bibliothèques système standards pour les E/S, les threads et les sockets.
Système de compilation CMake
Les sources deqp ont des scripts de compilation pour CMake, l'outil privilégié pour la compilation des programmes de test.
CMake est un système de compilation Open Source compatible avec plusieurs plates-formes et ou des chaînes d'outils. CMake génère des fichiers makefile natifs ou des fichiers de projet IDE à partir de fichiers de configuration indépendants de la cible. Pour en savoir plus sur CMake, consultez le CMake.
CMake prend en charge et recommande des builds hors source. Autrement dit, vous devez Créez toujours des fichiers makefile ou des fichiers de projet dans un répertoire de compilation distinct. en dehors de l'arborescence source. CMake ne possède aucun type de "distclean" (nettoyage) cible : la suppression de tous les fichiers générés par CMake doit être effectuée manuellement.
Les options de configuration sont fournies à CMake à l'aide de -DOPTION_NAME=VALUE
syntaxe. Certaines options couramment utilisées pour deqp sont listées ci-dessous.
Option de configuration | Description |
---|---|
DEQP_TARGET |
Nom de la cible, par exemple "android" Les scripts deqp CMake incluront le fichier
|
CMAKE_TOOLCHAIN_FILE |
Chemin d'accès au fichier de chaîne d'outils pour CMake. Utilisé pour la compilation croisée. |
CMAKE_BUILD_TYPE |
Type de compilation pour les cibles de fichiers makefile. Les valeurs valides sont : "Debug" et "Publier" Notez que l'interprétation et le type par défaut dépendent du système de compilation ciblé. Pour en savoir plus, consultez la documentation de CMake. |
Créer un fichier de compilation cible
Le système de compilation deqp est configuré pour les nouvelles cibles à l'aide de fichiers de compilation cibles.
Un fichier de compilation cible définit les fonctionnalités
compatibles avec la plate-forme et les bibliothèques ou
des chemins d'inclusion supplémentaires sont requis. Les noms des fichiers cibles suivent le targets/NAME/NAME.cmake
et la cible est sélectionnée à l'aide du paramètre de compilation DEQP_TARGET
.
Les chemins d'accès aux fichiers cibles sont relatifs au répertoire deqp
de base, et non au répertoire
targets/NAME
. Les variables standards suivantes peuvent être définies par le fichier de compilation cible.
Variable | Description |
---|---|
DEQP_TARGET_NAME |
Nom de la cible (qui sera inclus dans les journaux de test) |
DEQP_SUPPORT_GLES2 |
Indique si GLES2 est compatible (par défaut: désactivé) |
DEQP_GLES2_LIBRARIES |
Bibliothèques GLES2 (laissez ce champ vide si ce n'est pas le cas ou si le chargement dynamique est utilisé) |
DEQP_SUPPORT_GLES3 |
Indique si GLES3.x est pris en charge (par défaut: désactivé) |
DEQP_GLES3_LIBRARIES |
Bibliothèques GLES3.x (laisser vide si non pris en charge ou si le chargement dynamique est utilisé) |
DEQP_SUPPORT_VG |
Indique si OpenVG est compatible (par défaut: désactivé) |
DEQP_OPENVG_LIBRARIES |
Bibliothèques OpenVG (laissez les champs vides si ce n'est pas le cas ou si le chargement dynamique est utilisé) |
DEQP_SUPPORT_EGL |
Indique si le mode EGL est pris en charge (par défaut: désactivé) |
DEQP_EGL_LIBRARIES |
Bibliothèques EGL (laissez vides si elles ne sont pas prises en charge ou si le chargement dynamique est utilisé) |
DEQP_PLATFORM_LIBRARIES |
Des bibliothèques supplémentaires spécifiques à la plate-forme sont requises pour l'association |
DEQP_PLATFORM_COPY_LIBRARIES |
Liste des bibliothèques copiées dans chaque répertoire de compilation binaire de test. Peut être utilisés pour copier les bibliothèques nécessaires à l'exécution des tests, mais qui ne sont pas définies par défaut chemin de recherche. |
TCUTIL_PLATFORM_SRCS |
Liste des sources de ports de la plate-forme. Les sources par défaut sont déterminées en fonction les fonctionnalités et l'OS. Remarque : Les chemins d'accès sont relatifs à |
Le fichier de compilation cible peut ajouter des chemins d'inclusion ou de lien supplémentaires à l'aide de la méthode
Fonctions CMake include_directories()
et link_directories()
.
Build Win32
Le moyen le plus simple de créer des modules deqp pour Windows consiste à utiliser le build CMake du système d'exploitation. Vous devez disposer de CMake 2.6.12 ou d'une version ultérieure et du package Microsoft Visual C/C++ compilateur. Le fichier deqp a été testé avec Visual Studio 2013.
Les fichiers de projet Visual Studio peuvent être générés à l'aide de la commande suivante:
cmake path\to\src\deqp -G "Visual Studio 12"
Vous pouvez créer un build 64 bits en sélectionnant "Visual Studio VERSION Win64" que la compilation générateur:
cmake path\to\src\deqp -G "Visual Studio 12 Win64"
Vous pouvez aussi générer des fichiers makefile NMake avec l'option -G "NMake Makefiles"
.
comme type de compilation (-DCMAKE_BUILD_TYPE="Debug"
ou "Release"
).
Création du contexte de rendu
Le contexte de rendu peut être créé avec WGL ou EGL sous Windows.
Compatibilité avec WGL
Tous les binaires Win32 prennent en charge la création de contexte GL avec WGL, car cela ne nécessite
bibliothèques standards. Le contexte WGL peut être sélectionné à l'aide de l'--deqp-gl-context-type=wgl
un argument de ligne de commande. En mode WGL, deqp utilise WGL_EXT_create_context_es_profile
.
pour créer des contextes OpenGL ES. Cela a été testé pour fonctionner avec
les derniers pilotes de NVIDIA et Intel. Les pilotes AMD ne sont pas compatibles
.
Compatibilité EGL
Le fichier deqp est conçu avec le chargement dynamique pour EGL sous Windows si DEQP_SUPPORT_EGL.
est activé. Il s'agit du paramètre par défaut pour la plupart des cibles. Si l'hôte possède des bibliothèques EGL,
il est possible d'exécuter des tests avec eux à l'aide de la ligne de commande
paramètre: --deqp-gl-context-type=egl
Build Android
Le build Android utilise des scripts de compilation CMake pour compiler le code de test natif. Les parties Java, c'est-à-dire le serveur d'exécution de test et le bouchon de l'application de test, sont compilé à l'aide des outils de compilation Android standards.
Pour compiler des programmes de test deqp pour Android avec le build fourni scripts, vous avez besoin des éléments suivants:
- La dernière version de
Android NDK Le fichier
android/scripts/common.py
indique la version requise - SDK Android autonome avec l'API 13, SDK Tools, SDK Platform-Tools et SDK Packages Build-Tools installés
- Apache Ant 1.9.4 (requis par le build de code Java)
- CMake 2.8.12 ou version ultérieure
- Python 2.6 ou version ultérieure dans la série 2.x Python 3.x n'est pas compatible
- Pour Windows: NMake ou JOM dans
PATH
<ph type="x-smartling-placeholder">- </ph>
- JOM accélère les compilations.
- Facultatif: La marque Ninja est également compatible avec Linux.
Les binaires Ant et SDK sont situés en fonction de la variable d'environnement PATH avec
certaines valeurs
par défaut prioritaires. La logique est contrôlée par android/scripts/common.py
.
Le répertoire NDK doit être ~/android-ndk-VERSION
ou
C:/android/android-ndk-VERSION
ou défini via ANDROID_NDK_PATH
variable d'environnement.
Les composants Deqp sur l'appareil, le service d'exécution de test et les programmes de test sont
compilé à l'aide du script android/scripts/build.py
. Le fichier .apk final est créé dans
android/package/bin
et peut être installé par le script install.py
. Si le
command line executor est utilisé, l'exécutable ExecService est lancé
avec le script launch.py
sur l'appareil via ADB. Les scripts peuvent être exécutés à partir de n'importe quel répertoire.
Build Linux
Vous pouvez créer des binaires de test et des utilitaires de ligne de commande pour Linux en générant des fichiers makefile à l'aide de CMake. Plusieurs cibles de compilation prédéfinies sont utiles lors de la compilation pour Linux.
Cible de build | Description |
---|---|
default |
Cible par défaut qui utilise l'introspection de la plate-forme CMake pour déterminer la compatibilité avec différentes API. |
x11_glx |
Utilise GLX pour créer des contextes OpenGL (ES). |
x11_egl |
Utilise EGL pour créer des contextes OpenGL (ES). |
x11_egl_glx |
Compatible avec GLX et EGL avec X11. |
Utilisez toujours -DCMAKE_BUILD_TYPE=<Debug|Release>
pour définir le type de compilation.
Release
est une valeur par défaut appropriée. Sans cela, un build par défaut non optimisé est créé.
Les arguments de ligne de commande -DCMAKE_C_FLAGS
et -DCMAKE_CXX_FLAGS
peuvent être
utilisée pour transmettre des arguments supplémentaires au compilateur. Par exemple, la compilation 32 bits
ou 64 bits peut être effectuée en
en définissant -DCMAKE_C(XX)_FLAGS="-m32"
ou "-m64"
respectivement. Si ce n'est pas le cas
spécifiée, l'architecture native de la chaîne d'outils, généralement 64 bits sur la chaîne d'outils 64 bits, est utilisée.
Les arguments -DCMAKE_LIBRARY_PATH
et -DCMAKE_INCLUDE_PATH
peuvent être utilisés
pour CMake afin de fournir une bibliothèque supplémentaire à CMake ou d'inclure des chemins de recherche.
Un exemple de ligne de commande complète utilisée pour effectuer une version de débogage 32 bits sur dans un emplacement personnalisé se présente comme suit:
cmake <path to src>/deqp -DDEQP_TARGET=x11_egl -DCMAKE_C_FLAGS="-m32" -DCMAKE_CXX_FLAGS="-m32" -DCMAKE_BUILD_TYPE=Debug -DCMAKE_LIBRARY_PATH="PATH_TO_DRIVER/lib" -DCMAKE_INCLUDE_PATH="PATH_TO_DRIVER/inc"
make -j4
Compilation croisée
La compilation croisée peut être réalisée à l'aide d'un fichier de chaîne d'outils CMake. Chaîne d'outils
spécifie le compilateur à utiliser, ainsi que des chemins de recherche personnalisés pour
bibliothèques et en-têtes. Plusieurs fichiers de chaîne d'outils pour les scénarios courants sont
inclus dans le package de version dans le répertoire framework/delibs/cmake
.
En plus des variables CMake standards, les variables suivantes spécifiques à deqp sont les suivantes :
peut être défini par le fichier de chaîne d'outils. CMake peut généralement détecter DE_OS
et DE_COMPILER
.
et DE_PTR_SIZE
correctement, mais DE_CPU
doit être défini par le fichier de chaîne d'outils.
Variable | Description |
---|---|
DE_OS |
Système d'exploitation Valeurs acceptées: |
DE_COMPILER |
Type de compilateur. Valeurs acceptées: |
DE_CPU |
Type de processeur. Les valeurs acceptées sont |
DE_PTR_SIZE |
sizeof(void*) sur la plateforme. Valeurs acceptées: 4 et 8 |
Le fichier de chaîne d'outils peut être sélectionné à l'aide du paramètre de compilation CMAKE_TOOLCHAIN_FILE
.
Par exemple, le code suivant crée des fichiers makefiles pour une compilation à l'aide du compilateur croisé CodeSourcery pour ARM/Linux:
cmake PATH_TO_SRC/deqp –DDEQP_BUILD_TYPE="Release" –DCMAKE_TOOLCHAIN_FILE=PATH_TO_SRC/delibs/cmake/toolchain-arm-cs.cmake –DARM_CC_BASE=PATH_TO_CC_DIRECTORY
Association de l'environnement d'exécution des bibliothèques GLES et EGL
Le deqp n'a pas besoin de points d'entrée de l'API testée lors de l'association. La le code de test accède toujours aux API via des pointeurs de fonction. Les points d'entrée peuvent Ils sont ensuite chargés dynamiquement lors de l'exécution, ou le port de la plate-forme peut les fournir au moment de l'association.
Si la prise en charge d'une API est activée dans les paramètres de compilation et les bibliothèques de liens sont
n'est pas fourni, le fichier deqp chargera les points d'entrée nécessaires au moment de l'exécution. Si le
si une association statique est souhaitée, fournissez les bibliothèques de liens nécessaires dans DEQP_<API>_LIBRARIES
variable de configuration de compilation.
Porter le framework de test
Le portage de deqp implique trois étapes: l'adaptation des bibliothèques de portabilité de base, la mise en œuvre d'interfaces d'intégration de plate-forme avec le framework de test, ainsi que le portage service d'exécution.
Le tableau ci-dessous indique les emplacements où il est probable que les transferts soient effectués. Au-delà sont probablement exotiques.
Position | Description |
---|---|
framework/delibs/debase |
Toutes les implémentations nécessaires de code spécifique au système d'exploitation. |
framework/qphelper/qpCrashHandler.c |
Facultatif: Implémentation pour votre système d'exploitation. |
framework/qphelper/qpWatchDog.c |
Implémentation pour votre système d'exploitation. L'application actuelle est basée sur |
framework/platform |
Le nouveau port de plate-forme et le nouveau bouchon d'application peuvent être implémentés comme décrit dans la section Tester le port de la plate-forme du framework |
Bibliothèques de portabilité de base
Les bibliothèques de portabilité de base prennent déjà en charge Windows, la plupart des variantes Linux, Mac OS, iOS et Android. Si la cible de test s'exécute sur l'un de ces systèmes d'exploitation, très probablement il n'est pas nécessaire de toucher les bibliothèques de portabilité de base.
Port de la plate-forme du framework de test
Le port de la plate-forme du framework de test deqp nécessite deux composants: une application point d'entrée et mise en œuvre d'une interface de plate-forme.
Le point d'entrée de l'application est chargé de créer l'objet de plate-forme,
Création d'un objet de ligne de commande (tcu::CommandLine
), ouverture d'un journal de test
(tcu::TestLog
) et l'itération de l'application de test (tcu::App
). Si le
L'OS cible prend en charge un point d'entrée main()
standard, tcuMain.cpp
peut être utilisé
comme point d'entrée.
L'API de la plate-forme deqp est décrite en détail dans les fichiers suivants.
Fichier | Description |
---|---|
framework/common/tcuPlatform.hpp |
Classe de base pour tous les ports de la plate-forme |
framework/opengl/gluPlatform.hpp |
Interface de plate-forme OpenGL |
framework/egl/egluPlatform.hpp |
Interface de la plate-forme EGL |
framework/platform/tcuMain.cpp |
Point d'entrée d'application standard |
La classe de base pour tous les ports de la plate-forme est tcu::Platform
. Le port de la plateforme peut
prennent en charge les interfaces spécifiques GL et EGL en option. Voir
Le tableau suivant vous donne un aperçu de ce qui doit être mis en œuvre pour
exécuter les tests.
Module | interface |
---|---|
Modules de test OpenGL (ES) |
Interface de la plate-forme GL |
Module de test EGL |
Interface de la plate-forme EGL |
Vous trouverez des instructions détaillées sur la mise en œuvre des ports de la plate-forme dans les des en-têtes de couche de portage.
Service d'exécution de test
Pour utiliser l'infrastructure d'exécution de test deqp ou l'exécuteur de ligne de commande,
le service d'exécution de test doit être disponible sur la cible. Un C++ portable
du service est fournie dans le répertoire execserver
. La solution
est créé dans le cadre du module de test deqp
pour les PC cibles. Vous pouvez modifier execserver/CMakeLists.txt
pour activer une compilation sur
d'autres cibles.
La version C++ du service d'exécution de test accepte deux lignes de commande paramètres:
-
--port=<port>
définit le port TCP sur lequel le serveur écoute. La valeur par défaut est 50016. -
--single
met fin au processus serveur lorsque le client se déconnecte. Par défaut, le processus serveur reste actif pour traiter les demandes d'exécution de test supplémentaires.
Exécuter les tests
Cette page fournit des instructions pour exécuter des tests deqp sous Linux et Windows en utilisant des arguments de ligne de commande package d'application.
Environnements Linux et Windows
Commencez par copier les fichiers et répertoires suivants sur la cible.
Module | Répertoire | Target |
---|---|---|
Serveur d'exécution | build/execserver/execserver |
<dst>/execserver |
Module EGL | build/modules/egl/deqp-egl |
<dst>/deqp-egl |
Module GLES2 | build/modules/gles2/deqp-gles2 |
<dst>/deqp-gles2 |
data/gles2 |
<dst>/gles2 |
|
Module GLES3 | build/modules/gles3/deqp-gles3 |
<dst>/deqp-gles3 |
data/gles3 |
<dst>/gles3 |
|
Module GLES 3.1 | build/modules/gles31/deqp-gles31 |
<dst>/deqp-gles31 |
data/gles31 |
<dst>/gles31 |
|
Module GLES 3.2 | build/modules/gles32/deqp-gles32 |
<dst>/deqp-gles32 |
data/gles32 |
<dst>/gles32 |
Vous pouvez déployer le service d'exécution et les binaires de test n'importe où dans la cible Système de fichiers Toutefois, les binaires de test s'attendent à trouver des répertoires de données répertoire de travail actuel. Lorsque vous êtes prêt, démarrez le service d'exécution de test sur le appareil cible. Pour en savoir plus sur le démarrage du service, consultez Tester service d'exécution.
Arguments de ligne de commande
Le tableau suivant répertorie les arguments de ligne de commande qui affectent l'exécution de toutes des programmes de test.
Argument | Description |
---|---|
--deqp-case=<casename> |
Exécute les cas correspondant à un modèle donné. Les caractères génériques (*) sont acceptés. |
--deqp-log-filename=<filename> |
Écrivez les résultats du test dans le fichier dont vous indiquez le nom. L'exécution du test service définit le nom du fichier lors du démarrage d'un test. |
--deqp-stdin-caselist |
Lire la liste de cas à partir de stdin ou d'un argument donné. L'exécution du test service définira l'argument en fonction de la requête d'exécution reçue. Voir la section suivante pour une description du format de la liste des demandes. |
--deqp-test-iteration-count=<count> |
Remplacez le nombre d'itérations pour les tests qui prennent en charge un nombre variable de itérations. |
--deqp-base-seed=<seed> |
Valeur de base pour les scénarios de test qui utilisent la randomisation. |
Arguments spécifiques à GLES2 et GLES3
Le tableau suivant répertorie les arguments spécifiques à GLES2 et GLES3.Argument | Description |
---|---|
--deqp-gl-context-type=<type> |
Type de contexte OpenGL. Les types de contextes disponibles dépendent de la plate-forme. Activé
plates-formes compatibles avec EGL, vous pouvez utiliser la valeur egl pour sélectionner
le contexte EGL. |
--deqp-gl-config-id=<id> |
Exécutez des tests pour l'ID de configuration GL fourni. L'interprétation est selon la plate-forme. Sur la plate-forme EGL, il s'agit de l'ID de configuration EGL. |
--deqp-gl-config-name=<name> |
Exécutez des tests pour une configuration GL nommée. L'interprétation est
selon la plate-forme. Pour EGL, le format est
rgb(a)<bits>d<bits>s<bits> Par exemple, un
la valeur de rgb888s8 sélectionne la première configuration où
le tampon de couleur est RVB888 et le tampon de pochoir contient 8 bits. |
--deqp-gl-context-flags=<flags> |
Crée un contexte. Spécifiez robust ou debug . |
--deqp-surface-width=<width> |
Essayez de créer une surface d'une taille donnée. La prise en charge de ce paramètre est facultative. |
--deqp-surface-type=<type> |
Utilisez un type de surface donné comme cible de rendu de test principale. Possible
types sont window , pixmap , pbuffer ,
et fbo . |
--deqp-screen-rotation=<rotation> |
l'orientation de l'écran par incréments de 90 degrés pour les plates-formes qui le supporter. |
Format de la liste des scénarios de test
La liste des scénarios de test peut être fournie sous deux formats. La première consiste à lister le nom complet de chaque test sur une ligne distincte dans un fichier ASCII standard. En tant que dans vos ensembles de test, les préfixes répétitifs peuvent s'avérer fastidieux. Pour éviter les répétitions les préfixes, utilisez la syntaxe trie (également appelée arborescence des préfixes) illustrée ci-dessous.
{nodeName{firstChild{…},…lastChild{…}}}
Exemple :
{dEQP-EGL{config-list,create_context{rgb565_depth_stencil}}}
À traduire en deux scénarios de test:
dEQP-EGL.config_list dEQP-EGL.create_context.rgb565_depth_stencil
Android
Le package d'application Android contient tous les composants requis, y compris
le service d'exécution de test, les binaires de test et les fichiers de données. L'activité de test est
Une NativeActivity
qui utilise EGL (nécessite Android 3.2 ou version ultérieure).
Le package d'application peut être installé à l'aide de la commande suivante (nom est le nom de l'APK dans le package Android CTS. dont le nom dépend de la compilation):
adb –d install –r com.drawelements.deqp.apk
Pour lancer le service d'exécution de test et configurer le transfert de port, utilisez la méthode suivantes:
adb –d forward tcp:50016 tcp:50016
adb –d shell am start –n com.drawelements.deqp/.execserver.ServiceStarter
Pour activer les impressions de débogage, exécutez la commande suivante avant de lancer la tests:
adb –d shell setprop log.tag.dEQP DEBUG
Exécuter des tests sur Android sans Android CTS
Pour lancer manuellement l'activité d'exécution de test, créez un intent Android
ciblant android.app.NativeActivity
. Ces activités peuvent être
se trouvant dans le package com.drawelements.deqp
. La ligne de commande
être fournie en tant que chaîne supplémentaire avec la clé "cmdLine"
dans l'intent.
Un journal de test est écrit dans /sdcard/dEQP-log.qpa
. Si l'exécution du test
ne démarre pas normalement, des informations de débogage supplémentaires sont disponibles dans l'appareil
journal.
Vous pouvez lancer une activité à partir de la ligne de commande à l'aide de l'am
utilitaire. Par exemple, pour exécuter des tests dEQP-GLES2.info
sur une plate-forme
compatible avec NativeActivity,
, utilisez les commandes suivantes.
adb -d shell am start -n com.drawelements.deqp/android.app.NativeActivity -e \ 'cmdLine "deqp --deqp-case=dEQP-GLES2.info.* --deqp-log-filename=/sdcard/dEQP-Log.qpa"'
Déboguer sur Android
Pour exécuter les tests avec le débogueur GDB sur Android, commencez par compiler et installer la version de débogage en exécutant les deux scripts suivants:
python android/scripts/build.py --native-build-type=Debug
python android/scripts/install.py
Une fois la version de débogage installée sur l'appareil, lancez les tests sous En exécutant GDB sur l'hôte, exécutez la commande suivante:
python android/scripts/debug.py \ --deqp-commandline="--deqp-log-filename=/sdcard/TestLog.qpa --deqp-case=dEQP-GLES2.functional.*"
La ligne de commande deqp dépend des scénarios de test à exécuter et d'autres
paramètres obligatoires. Le script ajoute un point d'arrêt par défaut au début de
l'exécution de deqp (tcu::App::App
).
Le script debug.py
accepte plusieurs arguments de ligne de commande pour
des actions telles que la définition de points d'arrêt pour le débogage, la connexion à gdbserver
et les chemins d'accès aux binaires supplémentaires à déboguer (utilisez debug.py
--help
pour tous les arguments et explications). Le script copie également certaines
les bibliothèques par défaut de l'appareil cible pour obtenir des listes de symboles.
Pour parcourir le code du pilote (par exemple, lorsque GDB doit connaître les emplacements
des binaires avec toutes les informations de débogage), ajoutez d'autres bibliothèques via
Paramètres de ligne de commande debug.py
. Ce script écrit un
pour le GDB, à partir de la ligne 132 du fichier de script. Toi
peut fournir des chemins d'accès supplémentaires vers des binaires, etc., mais en fournissant une commande
les paramètres de ligne devraient suffire.
Remarque:Sous Windows, le binaire GDB nécessite
libpython2.7.dll
Avant de lancer debug.py
, ajoutez
<path-to-ndk>/prebuilt/windows/bin
à la variable PATH.
Remarque:Le débogage du code natif ne fonctionne pas sur Android 4.3 pour obtenir des solutions de contournement, reportez-vous à la page ce bug public. Android 4.4 et versions ultérieures ne contiennent pas ce bug.
Automatiser les tests
Les modules de test Deqp peuvent être intégrés aux systèmes de test automatisés de plusieurs manières. La meilleure approche dépend de l'infrastructure de test existante et de la cible environnement.
La sortie principale d'une exécution de test est toujours le fichier journal du test, c'est-à-dire le fichier
avec un suffixe .qpa
. Les résultats complets du test peuvent être analysés à partir du journal de test. La sortie de la console est
aux informations de débogage uniquement. Il est possible qu'elles ne soient pas disponibles sur toutes les plates-formes.
Les binaires de test peuvent être appelés directement à partir d'un système d'automatisation des tests. Le test le binaire peut être lancé pour un cas spécifique, pour un ensemble de test disponibles. Si une erreur fatale se produit pendant l'exécution (comme certaines API ou un plantage), l'exécution du test s'interrompt. Pour les tests de régression, la meilleure approche consiste à appeler les binaires de test pour des cas individuels ou pour des petits tests séparément, afin d'obtenir des résultats partiels, même dans les cas de défaillance permanente.
Deqp est fourni avec des outils d'exécution de test en ligne de commande qui peuvent être utilisés dans avec le service d'exécution pour obtenir une intégration plus robuste. L'exécuteur détecte l'arrêt du processus de test et reprendra l'exécution du test le le prochain cas disponible. Un seul fichier journal est généré à partir du test complet. session. Cette configuration est idéale pour les systèmes de test légers de reprise après sinistre.
Outils d'exécution de tests en ligne de commande
L'ensemble actuel d'outils de ligne de commande inclut un outil d'exécution de test à distance, un générateur de comparaison de journaux pour l'analyse de régression, un convertisseur test-log-to-CSV, un convertisseur test-log-to-XML et un convertisseur testlog-vers-JUnit.
Le code source de ces outils se trouve dans le répertoire executor
, et les binaires sont
dans le répertoire <builddir>/executor
.
Exécuteur de test en ligne de commande
L'exécuteur de test de ligne de commande est un outil C++ portable permettant de lancer une exécution de test
sur un appareil et collecter les journaux
qui en résultent via TCP/IP. L'exécuteur
communique avec le service d’exécution (execserver) sur l’appareil cible.
Ensemble, ils fournissent des fonctionnalités telles que la récupération après des plantages de processus de test.
Les exemples suivants montrent comment utiliser l'exécuteur de test de la ligne de commande
(utilisez --help
pour en savoir plus):
Exemple 1: Exécuter des tests fonctionnels GLES2 sur un appareil Android
executor --connect=127.0.0.1 --port=50016 --binaryname= com.drawelements.deqp/android.app.NativeActivity --caselistdir=caselists --testset=dEQP-GLES2.* --out=BatchResult.qpa --cmdline="--deqp-crashhandler=enable --deqp-watchdog=enable --deqp-gl-config-name=rgba8888d24s8"
Exemple 2: Poursuivre l'exécution locale d'un test OpenGL ES 2 partiel
executor --start-server=execserver/execserver --port=50016 --binaryname=deqp-gles2 --workdir=modules/opengl --caselistdir=caselists --testset=dEQP-GLES2.* --exclude=dEQP-GLES2.performance.* --in=BatchResult.qpa --out=BatchResult.qpa
Exporter et comparer les journaux de test au format CSV
Deqp dispose d'un outil permettant de convertir les journaux de test (fichiers .qpa
) en fichiers CSV. Le fichier CSV
contient une liste de scénarios de test et leurs
résultats. L'outil peut également comparer plusieurs résultats par lot et ne répertorier que les
scénarios de test ayant des codes d'état différents dans les résultats du lot d'entrée. La
comparaison affichera également
le nombre de cas correspondants.
La sortie au format CSV est très pratique pour un traitement ultérieur avec des
utilitaires de ligne de commande
ou avec un éditeur de feuille de calcul. Une couche supplémentaire, lisible par l'humain,
le format texte brut peut être sélectionné à l'aide de l'argument de ligne de commande suivant: --format=text
Exemple 1: Exporter un journal de test au format CSV
testlog-to-csv --value=code BatchResult.qpa > Result_statuscodes.csv
testlog-to-csv --value=details BatchResult.qpa > Result_statusdetails.csv
Exemple 2: Lister les différences de résultats de test entre deux journaux de test
testlog-to-csv --mode=diff --format=text Device_v1.qpa Device_v2.qpa
Remarque:L'argument --value=code
génère le test
un code de résultat, tel que "Pass" ou "Échec". L'argument --value=details
sélectionne
Explication du résultat ou de la valeur numérique produite par un test de performance, de capacité ou de justesse
Exportation au format XML des journaux de test
Les fichiers journaux de test peuvent être convertis en documents XML valides à l'aide de l'testlog-to-xml
utilitaire. Deux modes de sortie sont acceptés:
- Mode Documents distincts, où chaque scénario de test et le résumé
caselist.xml
documents sont écrits dans un répertoire de destination - Mode de fichier unique, où tous les résultats du fichier
.qpa
sont écrits dans un seul document XML.
Vous pouvez afficher les fichiers journaux de test exportés dans un navigateur à l'aide d'une feuille de style XML.
Des exemples de feuilles de style (testlog.xsl
et testlog.css
) sont fournis
dans le répertoire doc/testlog-stylesheet
. Pour afficher les fichiers journaux dans un navigateur, copiez
deux fichiers de feuille de style dans le même répertoire que les documents XML exportés.
Si vous utilisez Google Chrome, les fichiers doivent être accessibles via HTTP en tant que Chrome
limite l'accès aux fichiers locaux pour des raisons de sécurité. L'installation Python standard
comprend un serveur HTTP de base qui peut être lancé pour diffuser
à l'aide de la commande python –m SimpleHTTPServer 8000
. Après avoir lancé le serveur,
il vous suffit de faire pointer le navigateur Chrome vers http://localhost:8000
pour afficher le journal de test.
Conversion en journal de test JUnit
De nombreux systèmes d'automatisation des tests peuvent générer des rapports sur les résultats des tests depuis JUnit de sortie. Les fichiers journaux de test deqp peuvent être convertis au format de sortie JUnit à l'aide de l'outil testlog-to-junit.
L'outil ne permet actuellement que de traduire les résultats du scénario de test. En tant que JUnit prend en charge uniquement "pass" et "échouer" un résultat de passage de deqp est mappé par "JUnit pass". et d'autres résultats sont considérés comme des échecs. La deqp d'origine le code de résultat est disponible dans la sortie JUnit. D'autres données, telles que les messages de journal et les images de résultats, ne sont pas conservées lors de la conversion.
Utiliser des groupes de test spéciaux
Certains groupes de test peuvent nécessiter ou prendre en charge des options de ligne de commande spéciales, ou nécessiter une attention particulière lorsqu’elle est utilisée sur certains systèmes.
Tests de contrainte sur l'allocation de mémoire
Les tests de contrainte sur l'allocation de mémoire mettent à l'épreuve les problèmes de saturation de la mémoire en alloue certaines ressources jusqu'à ce que le pilote signale une erreur de mémoire insuffisante.
Sur certaines plates-formes, comme Android et la plupart des variantes Linux, les attributs
peut se produire: le système d'exploitation peut arrêter
le processus de test au lieu d'autoriser
pour gérer ou fournir une erreur de saturation de la mémoire. Sur ces
plates-formes, les tests conçus pour provoquer des erreurs de saturation de la mémoire sont désactivés
par défaut. Vous devez l'activer à l'aide de l'argument de ligne de commande --deqp-test-oom=enable
.
Nous vous recommandons d'exécuter ces tests manuellement
vérifier si le système se comporte
correctement en cas de pression sur les ressources. Toutefois, dans ces
dans une situation donnée, le plantage d'un processus de test
doit être interprété comme une réussite.
Groupes de test
dEQP-GLES2.stress.memory.* dEQP-GLES3.stress.memory.*
Tests de contrainte sur le rendu de longue durée
Les tests de contrainte de rendu sont conçus pour déceler les problèmes de robustesse en cas de
la charge de rendu. Par défaut, les tests n'exécutent que quelques itérations, mais
vous pouvez les configurer pour qu'elles s'exécutent indéfiniment en fournissant le --deqp-test-iteration-count=-1
un argument de ligne de commande. Le watchdog de test doit être désactivé (--deqp-watchdog=disable
)
lorsque vous exécutez ces tests
sur une longue période.
Groupes de test
dEQP-GLES2.stress.long.* dEQP-GLES3.stress.long.*