Le test d’interface utilisateur personnalisé est une fonctionnalité facultative qui vous permet de créer et d’exécuter automatiquement des tests d’interface utilisateur pour vos applications.
AEM fournit une suite intégrée de points de contrôle de qualité Cloud Manager pour garantir la fluidité de la mise à jour des applications personnalisées. En particulier, les points de contrôle informatiques prennent déjà en charge la création et l’automatisation des tests personnalisés à l’aide des API d’AEM.
Les tests de l’interface utilisateur sont conditionnés dans une image Docker afin de permettre un large choix de langage et de structures (comme Cypress, Selenium, Java et Maven, et JavaScript). En outre, un projet de tests d’interface utilisateur peut être facilement généré à l’aide de l’archétype de projet AEM.
Adobe encourage l’utilisation de Cypress, car il offre un rechargement en temps réel et une attente automatique, ce qui permet de gagner du temps et d’améliorer la productivité pendant les tests. Cypress fournit également une syntaxe simple et intuitive, ce qui facilite l'apprentissage et l'utilisation, même pour ceux qui sont nouveaux à tester.
Les tests de l’interface utilisateur sont exécutés dans le cadre d’un point de contrôle qualité spécifique pour chaque pipeline Cloud Manager avec une étape de Tests de l’interface utilisateur personnalisée dans les pipelines de production ou dans les pipelines hors production. Les tests de l’interface utilisateur, y compris les régressions et les nouvelles fonctionnalités, permettent de détecter et de signaler des erreurs.
Contrairement aux tests fonctionnels personnalisés qui sont des tests HTTP écrits en Java, les tests de l’interface utilisateur peuvent être une image Docker avec des tests écrits dans n’importe quelle langue, à condition qu’ils respectent les conventions définies dans la section Création de tests d’interface utilisateur.
Adobe recommande d’utiliser Cypress pour le test de l’interface utilisateur, en respectant le code fourni dans la section AEM Référentiel d’exemples de test.
Adobe fournit également des exemples de module de test d’interface utilisateur basés sur JavaScript avec WebdriverIO (voir AEM Archétype de projet) et Java avec WebDriver (voir AEM Référentiel d’exemples de test).
Cette section décrit les étapes requises pour configurer des tests d’interface utilisateur pour une exécution dans Cloud Manager.
Définissez le langage de programmation que vous souhaitez utiliser.
Pour Cypress, utilisez l’exemple de code du AEM Référentiel d’exemples de test.
Pour JavaScript et WDIO, utilisez l’exemple de code généré automatiquement dans le dossier ui.tests
de votre référentiel Cloud Manager.
Si votre référentiel a été créé avant la création automatique des dossiers ui.tests
par Cloud Manager, vous pouvez également générer la dernière version en date à l’aide de l’archétype de projet AEM.
Pour Java et WebDriver, utilisez l’exemple de code du Référentiel d’exemples de test AEM.
Pour d’autres langages de programmation, voir la section Création de tests d’interface utilisateur dans ce document pour configurer le projet test.
Assurez-vous que le test de l’interface utilisateur est activé conformément à la section Accord préalable client de ce document.
Développez vos cas de test et exécuter les tests localement.
Validez votre code dans le référentiel Cloud Manager et exécutez un pipeline Cloud Manager.
Un projet Maven génère un contexte de build Docker. Ce contexte de build Docker décrit comment créer une image Docker contenant les tests de l’interface utilisateur que les utilisateurs et utilisatrices de Cloud Manager utilisent pour générer une image Docker contenant les tests de l’interface utilisateur réels.
Cette section décrit les étapes à suivre pour ajouter un projet de tests de l’interface utilisateur à votre référentiel.
Le AEM Archétype de projet Vous pouvez générer pour vous un projet de tests d’interface utilisateur, conforme à la description suivante, si vous n’avez pas d’exigences spéciales pour le langage de programmation.
Pour générer un contexte de création Docker, vous avez besoin d’un module Maven qui :
Dockerfile
et tout autre fichier nécessaire pour créer l’image Docker avec vos tests.ui-test-docker-context
.La méthode la plus simple pour y parvenir consiste à configurer le plug-in Maven Assembly pour créer l’archive de contexte de création Docker et lui affecter le classificateur approprié.
Vous pouvez créer des tests de l’interface utilisateur avec différentes technologies et structures, mais cette section suppose que votre projet est présenté de la même manière que le suivant.
├── Dockerfile
├── assembly-ui-test-docker-context.xml
├── pom.xml
├── test-module
│ ├── package.json
│ ├── index.js
│ └── wdio.conf.js
└── wait-for-grid.sh
Le fichier pom.xml
prend en charge la création Maven. Ajoutez une exécution au module d’extension Maven Assembly semblable à celle qui suit.
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-assembly-plugin</artifactId>
<configuration>
<descriptors>
<descriptor>${project.basedir}/assembly-ui-test-docker-context.xml</descriptor>
</descriptors>
<tarLongFileMode>gnu</tarLongFileMode>
</configuration>
<executions>
<execution>
<id>make-assembly</id>
<phase>package</phase>
<goals>
<goal>single</goal>
</goals>
</execution>
</executions>
</plugin>
Cette exécution indique au module d’extension Maven Assembly de créer une archive basée sur les instructions contenues dans assembly-ui-test-docker-context.xml
, nommée descripteur d’assemblage dans le jargon du plug-in. Le descripteur d’assemblage répertorie tous les fichiers qui doivent faire partie de l’archive.
<assembly>
<id>ui-test-docker-context</id>
<includeBaseDirectory>false</includeBaseDirectory>
<formats>
<format>tar.gz</format>
</formats>
<fileSets>
<fileSet>
<directory>${basedir}</directory>
<includes>
<include>Dockerfile</include>
<include>wait-for-grid.sh</include>
</includes>
</fileSet>
<fileSet>
<directory>${basedir}/test-module</directory>
<excludes>
<exclude>node/**</exclude>
<exclude>node_modules/**</exclude>
<exclude>reports/**</exclude>
</excludes>
</fileSet>
</fileSets>
</assembly>
Le descripteur d’assemblage demande au module d’extension de créer une archive de type .tar.gz
et lui affecte le classificateur ui-test-docker-context
. En outre, il répertorie les fichiers qui doivent être inclus dans l’archive, parmi lesquels les éléments suivants.
Dockerfile
, obligatoire pour la création de l’image Dockerwait-for-grid.sh
dont les objectifs sont décrits ci-dessoustest-module
Le descripteur d’assemblage exclut également certains fichiers qui pourraient être générés lors de l’exécution locale des tests de l’interface utilisateur. Cela garantit une archive plus petite et accélère la création.
L’archive contenant le contexte de création Docker est automatiquement récupérée par Cloud Manager, qui crée l’image Docker contenant vos tests pendant ses pipelines de déploiement. Cloud Manager exécute ensuite l’image Docker pour réaliser les tests de l’interface utilisateur sur votre application.
Le build doit produire zéro ou une archive. S’il ne produit aucune archive, l’étape de test est effectuée par défaut. Si le build produit plusieurs archives, celle qui est sélectionnée est non déterministe.
Pour que Cloud Manager génère et exécute vos tests d’interface utilisateur, vous devez souscrire à cette fonctionnalité en ajoutant un fichier à votre référentiel.
testing.properties
.ui-tests.version=1
.pom.xml
du sous-module de tests de l’interface utilisateur.tar.gz
créé.Les tests de l’interface utilisateur sont générés et les exécutions sont ignorées si ce fichier n’est pas présent.
Pour inclure un fichier testing.properties
dans l’artefact de build, ajoutez une instruction include
dans le fichier assembly-ui-test-docker-context.xml
.
[...]
<includes>
<include>Dockerfile</include>
<include>wait-for-grid.sh</include>
<include>testing.properties</include> <!-- opt-in test module in Cloud Manager -->
</includes>
[...]
Si votre projet n’inclut pas cette ligne, vous devrez modifier ce fichier pour souscrire au test de l’interface utilisateur.
Il se peut que ce fichier contienne une ligne vous conseillant de ne pas le modifier. Cela est dû au fait qu’il a été introduit dans votre projet avant l’introduction du test de l’interface utilisateur de souscription et que les clients n’étaient pas censés modifier le fichier. Vous pouvez l’ignorer en toute sécurité.
Si vous utilisez les exemples fournis par Adobe :
Pour le dossier ui.tests
JavaScript généré à partir de l’archétype de projet AEM, vous pouvez exécuter la commande ci-dessous pour ajouter la configuration requise.
echo "ui-tests.version=1" > testing.properties
if ! grep -q "testing.properties" "assembly-ui-test-docker-context.xml"; then
awk -v line=' <include>testing.properties</include>' '/<include>wait-for-grid.sh<\/include>/ { printf "%s\n%s\n", $0, line; next }; 1' assembly-ui-test-docker-context.xml > assembly-ui-test-docker-context.xml.new && mv assembly-ui-test-docker-context.xml.new assembly-ui-test-docker-context.xml
fi
Les exemples de test Cypress et Java Selenium fournis par Adobe disposent déjà de l’indicateur d’inclusion.
Cette section décrit les conventions que l’image Docker contenant vos tests de l’interface utilisateur doit respecter. L’image Docker est créée à partir du contexte de création Docker décrit dans la section précédente.
Les variables d’environnement suivantes sont transmises à votre image Docker au moment de l’exécution, selon votre structure.
Variable | Exemples | Description | Cadre de test |
---|---|---|---|
SELENIUM_BASE_URL |
http://my-ip:4444 |
URL du serveur Selenium | Selenium uniquement |
SELENIUM_BROWSER |
chrome |
Implémentation du navigateur utilisée par le serveur Selenium | Selenium uniquement |
AEM_AUTHOR_URL |
http://my-ip:4502/context-path |
URL de l’instance de création AEM | Tous |
AEM_AUTHOR_USERNAME |
admin |
Nom d’utilisateur pour la connexion à l’instance de création AEM | Tous |
AEM_AUTHOR_PASSWORD |
admin |
Mot de passe de connexion à l’instance de création AEM | Tous |
AEM_PUBLISH_URL |
http://my-ip:4503/context-path |
URL de l’instance de publication AEM | Tous |
AEM_PUBLISH_USERNAME |
admin |
Nom d’utilisateur pour la connexion à l’instance de publication AEM | Tous |
AEM_PUBLISH_PASSWORD |
admin |
Mot de passe de connexion à l’instance de publication AEM | Tous |
REPORTS_PATH |
/usr/src/app/reports |
Chemin d’accès où le rapport XML des résultats du test doit être enregistré. | Tous |
UPLOAD_URL |
http://upload-host:9090/upload |
L’URL vers laquelle le fichier doit être chargé afin de le rendre accessible à la structure de test. | Tous |
Les exemples de test d’Adobe fournissent des fonctions d’assistance pour accéder aux paramètres de configuration :
Cypress.env('VARIABLE_NAME')
L’image Docker doit générer des rapports de test au format XML JUnit et les enregistrer dans le chemin spécifié par la variable d’environnement REPORTS_PATH
. Le format XML JUnit est un format largement utilisé pour rapporter les résultats des tests. Si l’image Docker utilise Java et Maven, les modules de test standard tels que le plug-in Maven Surefire et le plug-in Maven Failsafe peuvent générer ces rapports prêts à l’emploi.
Si l’image Docker est implémentée avec d’autres langages de programmation ou des exécuteurs de tests, consultez la documentation des outils choisis pour savoir comment générer des rapports XML JUnit.
Le résultat de l’étape de test de l’interface utilisateur est évalué uniquement en fonction des rapports de test. Veillez à générer le rapport en conséquence pour l’exécution de votre test.
Utilisez des assertions au lieu de simplement consigner une erreur dans STDERR ou de renvoyer un code de sortie non nul. Autrement, votre pipeline de déploiement pourra continuer normalement.
Pour exécuter les tests fonctionnels à partir de votre ordinateur local, créez un utilisateur ou une utilisatrice avec des autorisations de type administration afin d’obtenir le même comportement.
Type | Valeur | Description |
---|---|---|
Processeur | 2.0 | Quantité de temps réservé au processeur par exécution de test |
Mémoire | 1Gi | Quantité de mémoire allouée au test, valeur en gibioctets |
Expiration | 30m | Durée au bout de laquelle le test est terminé. |
Durée recommandée | 15m | Adobe recommande d’écrire les tests pour qu’ils ne prennent pas plus de temps que cette durée. |
Si vous avez besoin de davantage de ressources, créez un cas d’assistance clientèle et décrivez votre cas d’utilisation. Adobe examinera votre demande et fournira une assistance appropriée.
Cette section s’applique uniquement lorsque Selenium est l’infrastructure de test choisie.
Avant le début des tests, l’image Docker doit garantir que le serveur Selenium est opérationnel. L’attente du service de Selenium est un processus en deux étapes.
SELENIUM_BASE_URL
.Une fois que le point d’entrée du statut de Selenium donne une réponse positive, les tests peuvent débuter.
Les exemples de test de l’interface utilisateur Adobe s’en occupent avec le script wait-for-grid.sh
, qui est exécuté au démarrage de Docker et ne lance l’exécution réelle du test qu’une fois la grille prête.
L’image Docker peut générer une sortie de test supplémentaire (par exemple, des captures d’écran ou des vidéos) et les enregistrer dans le chemin spécifié par la variable d’environnement. REPORTS_PATH
. Tout fichier situé sous la variable d’environnement REPORTS_PATH
est inclus dans l’archive des résultats du test.
Les exemples de test fournis par Adobe créent par défaut des captures d’écran pour tout test ayant échoué.
Vous pouvez utiliser les fonctions d’assistance pour créer des captures d’écran durant vos tests.
Si une archive de résultats de test est créée lors de l’exécution d’un test de l’interface utilisateur, vous pouvez la télécharger à partir de Cloud Manager. Pour cela, cliquez sur le bouton Download Details
sous l’étape Tests de l’interface utilisateur personnalisée.
Les tests doivent parfois charger des fichiers vers l’application en cours de test. Pour que le déploiement de Selenium reste flexible par rapport à vos tests, il n’est pas possible de télécharger directement une ressource vers Selenium. Au lieu de cela, le chargement d’un fichier nécessite de suivre les étapes suivantes.
UPLOAD_URL
.
curl -X POST ${UPLOAD_URL} -F "data=@file.txt"
.200 OK
de type text/plain
.
<input>
pour tester les chargements de fichiers dans votre application.Avant d’activer les tests de l’interface utilisateur dans un pipeline Cloud Manager, il est recommandé d’exécuter localement les tests de l’interface utilisateur vers
le SDK AEM as a Cloud Service
ou dans une instance AEM as a Cloud Service réelle.
Ouvrez une interface shell et accédez au dossier ui.tests/test-module
dans votre référentiel.
Installer Cypress et d’autres prérequis
npm install
Définition des variables d’environnement requises pour l’exécution du test
export AEM_AUTHOR_URL=https://author-<program-id>-<environment-id>.adobeaemcloud.com
export AEM_AUTHOR_USERNAME=<user>
export AEM_AUTHOR_PASSWORD=<password>
export AEM_PUBLISH_URL=https://publish-<program-id>-<environment-id>.adobeaemcloud.com
export AEM_PUBLISH_USERNAME=<user>
export AEM_PUBLISH_PASSWORD=<password>
export REPORTS_PATH=target/
Exécutez des tests avec l’une des commandes suivantes :
npm test # Using default Cypress browser
npm run test-chrome # Using Google Chrome browser
npm run test-firefox # Using Firefox browser
Les fichiers journaux sont stockés dans le dossier target/
de votre référentiel.
Pour plus d’informations, voir AEM Référentiel d’exemples de test.
Ouvrez une interface shell et accédez au dossier ui.tests
dans votre référentiel.
Exécutez la commande ci-dessous pour lancer les tests à l’aide de Maven.
mvn verify -Pui-tests-local-execution \
-DAEM_AUTHOR_URL=https://author-<program-id>-<environment-id>.adobeaemcloud.com \
-DAEM_AUTHOR_USERNAME=<user> \
-DAEM_AUTHOR_PASSWORD=<password> \
-DAEM_PUBLISH_URL=https://publish-<program-id>-<environment-id>.adobeaemcloud.com \
-DAEM_PUBLISH_USERNAME=<user> \
-DAEM_PUBLISH_PASSWORD=<password>
target/reports
de votre référentielPour plus d’informations, voir Référentiel AEM archétype de projet.
Ouvrez une interface shell et accédez au dossier ui.tests/test-module
dans votre référentiel.
Exécutez les commandes ci-dessous pour lancer les tests à l’aide de Maven.
# Start selenium docker image (for x64 CPUs)
docker run --platform linux/amd64 -d -p 4444:4444 selenium/standalone-chrome-debug:latest
# Start selenium docker image (for ARM CPUs)
docker run -d -p 4444:4444 seleniarm/standalone-chromium
# Run the tests using the previously started Selenium instance
mvn verify -Pui-tests-local-execution -DSELENIUM_BASE_URL=http://<server>:4444
Les fichiers journaux sont stockés dans le dossier target/reports
de votre référentiel.
Pour plus d’informations, voir AEM Référentiel d’exemples de test.