Site icon Blog Zenika

Mise en oeuvre de TestNG : Ant versus Gradle

TestNG est un framework de test basé sur Junit apportant plusieurs fonctionnalités comme

Ce billet montre un exemple de mise en œuvre du framework TestNG avec le builder Ant et le builder Gradle.

Dans l’exemple de ce billet, nous avons en entrée la structure suivante

  1. <suite name=« SuiteExample » verbose=« 1 » >
  2. <test name=« TestSetApp » annotations=« JDK » verbose=« 1 »>
  3. <classes>
  4. <class name=« com.zenika.example1.AppTest » />
  5. </classes>
  6. </test>
  7. </suite>

Ce fichier sera utilisé uniquement dans le cadre de Ant. En Gradle, nous avons choisis de générer dynamiquement ce fichier.

Cas du builder Ant

  1. <project name=« testng-example »>
  2. <property name=« test.src » value=« src/test/java »/>
  3. <property name=« test.resources.dir » value=« src/test/resources »/>
  4. <property name=« build.dir » value=« build »/>
  5. <property name=« test.build.dir » value=« ${build.dir}/test-classes »/>
  6. <property name=« testng.result.dir » value=« ${build.dir}/test-results »/>
  7. <property name=« testng.report.dir » value=« ${build.dir}/reports/tests »/>
  8. <path id=« testng.classpath »>
  9. <pathelement location=« lib/testng-5.8-jdk15.jar »/>
  10. </path>
  11. <path id=« test.compile »>
  12. <path refid=« testng.classpath »/>
  13. </path>
  14. <path id=« test.run »>
  15. <path refid=« test.compile »/>
  16. <path location=« ${test.build.dir} »/>
  17. </path>
  18. <target name=« clean »>
  19. <delete dir=« ${testng.result.dir} »/>
  20. <delete dir=« ${testng.report.dir} »/>
  21. <delete dir=« ${test.build.dir} »/>
  22. <delete dir=« ${build.dir} »/>
  23. </target>
  24. <target name=« test-init »>
  25. <mkdir dir=« ${build.dir} »/>
  26. <mkdir dir=« ${test.build.dir} »/>
  27. <mkdir dir= « ${testng.result.dir} »/>
  28. <mkdir dir=« ${testng.report.dir} »/>
  29. </target>
  30. <target name=« test-compile » depends=« test-init »>
  31. <javac srcdir=« ${test.src} » source=« 1.5 » target=« 1.5 » destdir=« ${test.build.dir} »>
  32. <classpath refid=« test.compile »/>
  33. </javac>
  34. </target>
  35. <target name=« test-run » depends=« test-compile »>
  36. <taskdef name=« testng »
  37. classname=« org.testng.TestNGAntTask » classpathref=« testng.classpath »/>
  38. <testng classpathref=« test.run »
  39. outputDir=« ${testng.report.dir} »>
  40. <xmlfileset dir=« ${test.resources.dir} » includes=« testng.xml »/>
  41. </testng>
  42. </target>
  43. <target name=« test-report » depends=« test-run »>< /span>
  44. <junitreport todir=« ${testng.result.dir} »>
  45. <fileset dir=« ${testng.report.dir} »>
  46. <include name=« */*.xml »/>
  47. </fileset>
  48. <report format=« noframes » todir=« ${testng.report.dir} »/>
  49. </junitreport>
  50. </target>
  51. </project>

Nous définissons plusieurs paths dont un path « testng.classpath » contenant la librairie « testng ». La librairie est située à la racine du projet dans un répertoire « lib ». Ensuite, le script Ant contient les cibles suivantes

Appel

L’invocation de la commande « ant clean test-report » détruit tous les éventuels résultats précédents, puis lance les tests; enfin un rapport Junit HTML est produit.

Cas du builder Gradle

Avec le builder Gradle, nous avons le script suivant

  1. usePlugin(‘java’)
  2. repositories {
  3. flatDir name: ‘localRepository’, dirs: ‘lib’
  4. }
  5. dependencies {
  6. testCompile « :testng:5.8:jdk15 »
  7. }
  8. test {
  9. setStopAtFailuresOrErrors(false)
  10. enableTestReport()
  11. useTestNG() {
  12. suiteXmlBuilder().suite(name: ‘testing-testng’& #41; {
  13. test (name : ‘testing-testng’, annotations : ‘JDK’, verbose:‘1’) {
  14. classes {
  15. ‘class’ (name: ‘com.zenika.example1.AppTest’)
  16. }
  17. }
  18. }
  19. }
  20. }
  21. task reportTests(dependsOn:test) <<{
  22. ant{
  23. junitreport(todir:testResultsDir){
  24. fileset(dir:testReportDir){
  25. include(name:« **/*.xml »)
  26. }
  27. report(format:« noframes », todir:testReportDir)
  28. }
  29. }
  30. }

Tout premièrement, nous définissions l’utilisation du plugin « java » qui fournit les conventions de répertoires (en particulier « src/test/java » pour les sources Java des tests) et un ensemble de tâches (en particulier « compileTests » et « test » pour la compilation et l’exécution des tests).
Nous avons ensuite la section suivante décrivant les entrepôts de librairies et la récupération de ces librairies.

  1. repositories {
  2. flatDir name: ‘localRepository’, dirs: ‘lib’
  3. }
  4. dependencies {
  5. testCompile « :testng:5.8:jdk15 »
  6. }

Nous déclarons l’utilisation de la librairie « testng » dans un repository local, localisé dans le répertoire « lib » à la racine du projet.
Puis dans la tâche « test », nous définissions explicitement les points suivant

Enfin, nous définissions une tâche de reporting pour produire un rapport Junit HTML de nos tests TestNG. Pour cela, nous avons redéfinit la tâche Ant junitreport.

Appel

L’invocation de la commande « gradle clean reportTests » détruit tous les éventuels résultats précédents, puis lance les test
s; enfin un rapport Junit HTML est produit.

Auteur/Autrice

Quitter la version mobile