Automatisation avec JUnit
Référence du test dans Squash TM
Pour lier un cas de test Squash TM à un test automatisé JUnit, le champ Référence du test automatisé du bloc Automatisation du cas de test doit avoir la forme suivante :
[1] / [2] # [3]
Avec :
-
[1]
: Nom du projet sur le dépôt de source. -
[2]
: Nom qualifié de la classe de test. -
[3]
: Nom de la méthode à tester dans la classe de test. Ce paramètre est optionnel.
Ci-dessous un exemple de classe de test Junit et l’automatisation du cas de test Squash TM associé :
JUnit 5
JUnit 5 est un framework de test très riche et offre une importante combinatoire de configurations possibles.
Squash Orchestrateur utilise mvn test -Dtest=testclass#testmethod
pour lancer chaque test.
Si vous utilisez la plateforme JUnit 5 de façon simple, cette ligne de commande fonctionne.
Exemple 1 :
Fichier pom.xml
pour lancer des tests écrits en JUnit 5 :
<project>
<modelVersion>4.0.0</modelVersion>
<groupId>…</groupId>
<artifactId>…</artifactId>
<version>…</version>
<dependencies>
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-engine</artifactId>
<version>5.8.2</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-api</artifactId>
<version>5.8.2</version>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.22.2</version>
</plugin>
</plugins>
</build>
</project>
Exemple 2 :
Fichier pom.xml
pour lancer des tests écrits en JUnit 4 (dans un environnement JUnit 5) :
<project>
<modelVersion>4.0.0</modelVersion>
<groupId>…</groupId>
<artifactId>…</artifactId>
<version>…</version>
<dependencies>
<dependency>
<groupId>org.junit.vintage</groupId>
<artifactId>junit-vintage-engine</artifactId>
<version>5.8.2</version>
<scope>test</scope>
</dependency>
</dependencies>
</project>
Si vous utilisez une configuration plus complexe, par exemple avec junit-platform-surefire-provider
ou avec junit-platform-runner
, veuillez vérifier que mvn test -Dtest=testclass#testmethod
fonctionne.
Nature des paramètres Squash TM exploitables
Les paramètres Squash TM exploitables dans un script JUnit vont différer suivant si vous utilisez les composants Squash DEVOPS Community ou Squash DEVOPS Premium.
Voici le tableau des paramètres exploitables (ces paramètres sont transmis en tant que paramètres de test, voir ci-dessous, Squash TM ne génère pas de paramètres globaux) :
Nature | Clé | Community | Premium |
---|---|---|---|
Nom du jeu de données | DSNAME | ✅ | ✅ |
Paramètre d'un jeu de données | DS_[nom] | ✅ | ✅ |
Référence du cas de test | TC_REFERENCE | ✅ | ✅ |
Champ personnalisé du cas de test | TC_CUF_[code] | ✅ | ✅ |
Champ personnalisé de l'itération | IT_CUF_[code] | ❌ | ✅ |
Champ personnalisé de la campagne | CPG_CUF_[code] | ❌ | ✅ |
Champ personnalisé de la suite de tests | TS_CUF_[code] | ❌ | ✅ |
Légende :
[code]
: valeur renseignée dans le champ “Code” d’un champ personnalisé[nom]
: nom du paramètre tel que renseigné dans Squash TM
Comme indiqué, Squash TM ajoute un préfixe au code du champ personnalisé transmis. Assurez-vous de le prendre en compte.
Voir la documentation de Squash TM pour plus d'information sur les champs personnalisés.
Utilisation de paramètres
Il est possible lors de l’exécution d’un test JUnit d’exploiter des paramètres au sein de celui-ci. Un paramètre peut être un paramètre de test ou un paramètre global. Squash TM ne transmet que des paramètres de test. Des paramètres de test et des paramètres globaux peuvent être utilisés dans Squash DEVOPS avec l'action junit/params
.
Pour cela, il faut suivre les étapes suivantes :
-
Importer la libraire opentestfactory-java-param-library dans le projet Maven contenant les tests à exécuter en ajoutant au fichier
pom.xml
:- le dépôt Maven suivant :
<repositories> <repository> <id>org.squashtest.repo.release</id> <name>Squashtest repository for releases</name> <url>https://repo.squashtest.org/maven2/release</url> </repository> </repositories>
- la dépendance Maven suivante :
<dependencies> <dependency> <groupId>org.opentestfactory.util</groupId> <artifactId>opentestfactory-java-param-library</artifactId> <version>1.0.2</version> </dependency> </dependencies>
-
Vous pouvez ensuite récupérer la valeur d’un paramètre du type souhaité en utilisant la syntaxe suivante :
ParameterService.INSTANCE.getString("paramName"); ParameterService.INSTANCE.getInt("paramName"); ParameterService.INSTANCE.getFloat("paramName"); ParameterService.INSTANCE.getDouble("paramName"); ParameterService.INSTANCE.getBoolean("paramName");
Les méthodes ci-dessus recherchent le paramètre souhaité dans les paramètres de tests ; si elles ne le trouvent pas, elles le cherchent ensuite dans les paramètres globaux.
Ces méthodes propagent uneParameterNotFoundException
si le paramètre n'est pas trouvé. Si le paramètre est trouvé mais ne peut être converti dans le type souhaité, uneParameterFormatException
est propagée. Pensez à gérer ces exceptions dans vos classes de tests.
Attention : la conversion de données booléennes renvoietrue
lorsque la chaîne de caractères à convertir est égale à"true"
(quelqu'en soit la casse),false
dans tous les autres cas ; mais elle ne propage jamais d'exception. -
Il est aussi possible de définir une valeur par défaut dans le cas où le paramètre n'est pas trouvé en utilisant la syntaxe suivante :
ParameterService.INSTANCE.getString("paramName", defaultValue); ParameterService.INSTANCE.getInt("paramName", defaultValue); ParameterService.INSTANCE.getFloat("paramName", defaultValue); ParameterService.INSTANCE.getDouble("paramName", defaultValue); ParameterService.INSTANCE.getBoolean("paramName", defaultValue);
Les méthodes ci-dessus ne propagent donc pas de
ParameterNotFoundException
quand le paramètre recherché n'est pas trouvé mais propagent uneParameterFormatException
si le paramètre est bien trouvé, mais ne peut être converti dans le type souhaité. -
Il est également possible de cibler un paramètre de test ou un paramètre global avec des méthodes spécifiques. Comme pour les méthodes précedentes, elles sont disponibles dans des versions avec et sans valeur par défaut. En voici quelques exemples :
ParameterService.INSTANCE.getTestString("paramName"); ParameterService.INSTANCE.getGlobalInt("paramName"); ParameterService.INSTANCE.getTestFloat("paramName", defaultValue); ParameterService.INSTANCE.getGlobalBoolean("paramName", defaultValue);
Exemple
Ci-dessous un exemple de fichier de test JUnit et l’automatisation du cas de test Squash TM associé :
Versions supportées
Squash AUTOM et Squash DEVOPS ont été validés avec
- JUnit 4.12, toute version plus récente de JUnit 4 devrait fonctionner
- JUnit 5.3.2, toute version de JUnit 5 devrait fonctionner
De plus, il est recommandé d'utiliser Surefire 2.19.1 ou supérieur.