web-dev-qa-db-fra.com

Comment exécuter le test du concombre à l'aide de Gradle

J'ai du mal à exécuter des tests de concombre à Gradle. J'utilise concombre-jvm.

La classe TestNGCucumberRunner étend les annotations AbstractTestNGCucumberTests et testng avec @beforesuite, @aftersuite ..

Je lance généralement le TestNGCucumberRunner.Java dans IntelliJ par un clic droit et il s'exécute avec succès. Maintenant je veux

  1. Appelez le TestNGCucumberRunner.Java dans gradle

ou

  1. Invoquer toutes les fonctionnalités de gradle

J'ai essayé d'exécuter le TestNGCucumberRunner.Java en tant que javaexec mais cela échoue.

J'ai essayé d'exécuter tous les fichiers de fonctionnalités du package. J'ai utilisé apply plugin: 'com.github.samueltbrown.cucumber' aussi.

10
user3350712

MISE À JOUR:

Ma nouvelle configuration utilise un autre plugin qui prend en charge l'exécution parallèle de scénarios, de meilleurs rapports et est toujours activement maintenu:

build.gradle

plugins {
  ...
  id "com.commercehub.cucumber-jvm" version "0.11"
}

addCucumberSuite 'cucumberTest'

dependencies {
  ...
  cucumberTestCompile 'info.cukes:cucumber-Java:1.2.5'  // or -Java8 if you prefer lambda notation

}

structure du répertoire :

└── src
    ├── cucumberTest
    │   ├── Java
    │   │   └── package1 
    │           └──       <- Glue
    │   └── resources    
    │       └── package2 
    │           └──       <- Features
    ├── main
    │   └── Java
    └── test
        └── Java

package1 et package2 noms (ainsi que de nombreux autres options ) peuvent être spécifiés dans le fichier build.gradle


VIEUX

Ma configuration précédente pour utiliser le concombre pour Java avec gradle.

build.gradle

plugins {
    id "Java"
    id "com.github.samueltbrown.cucumber" version "0.9"
  }   

dependencies {
    cucumberCompile 'info.cukes:cucumber-Java:1.2.4'
}

cucumber {
    formats = ['pretty','junit:build/cucumber.xml']
}

Disposition du répertoire

└── src
    ├── cucumber
    │   ├── Java         <- Glue
    │   └── resources    <- Features
    └── main
    │    └── Java
    └── test
        └── Java

Commande

gradle cucumber
9
Carlo Bellettini

J'ai choisi de ne pas utiliser com.github.samueltbrown.cucumberplugin, il a été mis à jour pour la dernière fois en août 2015. Au lieu de cela, j'ai créé un ensemble de sources "integrationTest" (concombre) que je peux créer indépendamment. C'est-à-dire un simple gradle build construira les ensembles source test et integrationTest. Si je souhaite uniquement exécuter des tests d'intégration, je peux exécuter gradle integrationTest -x test, ou je ne peux exécuter que le test avec gradle test -x integrationTest.

Les étapes que j'ai suivies sont ici: http://www.petrikainulainen.net/programming/gradle/getting-started-with-gradle-integration-testing/

Mais voici le résumé:

build.gradle

sourceSets {
    integrationTest {
        Java {
            compileClasspath += main.output + test.output
            runtimeClasspath += main.output + test.output
            srcDir file('src/integrationTest/Java')
        }
        resources.srcDir file('src/integrationTest/resources')
    }
}

//Ensure that the integrationTestCompile/integrationTestRuntime configuration contains the dependencies that are required to compile/run our unit tests.
configurations {
    integrationTestCompile.extendsFrom testCompile
    integrationTestRuntime.extendsFrom testRuntime
}

task integrationTest(type: Test) {
    testClassesDir = sourceSets.integrationTest.output.classesDir
    classpath = sourceSets.integrationTest.runtimeClasspath

    // Gradle skips tasks whose input and output are up to date.
    // To ensure that your integration tests are run every time,
    // tell Gradle that the outputs of the integrationTest task should always be considered out of date.
    outputs.upToDateWhen { false }
}

// Ensure that our integration tests are run before the check task and that the check task fails the build if there are failing integration tests.
// Ensure that our unit tests are run before our integration tests. This guarantees that our unit tests are run even if our integration tests fails.
check.dependsOn integrationTest
integrationTest.mustRunAfter test

// Ensure that the HTML reports of unit and integration tests are created to different report
// build/reports/integrationTest directory contains the HTML report that contains the test results of our integration tests.
tasks.withType(Test) {
    reports.html.destination = file("${reporting.baseDir}/${name}")
}

def cucumberVersion = "1.2.4"

dependencies {
    integrationTestCompile(
            'info.cukes:cucumber-core:' + cucumberVersion,
            'info.cukes:cucumber-Java:' + cucumberVersion,
            'info.cukes:cucumber-Java:' + cucumberVersion,
            'info.cukes:cucumber-junit:' + cucumberVersion,
            'info.cukes:cucumber-spring:' + cucumberVersion,
            'org.springframework:spring-beans:4.2.5.RELEASE'
    )
    integrationTestRuntime(
            'org.springframework:spring-context:4.2.5.RELEASE',
            'org.springframework:spring-test:4.2.5.RELEASE',
            'org.springframework:spring-tx:4.2.5.RELEASE'
    )
}
4
Miguel Reyes

vous pouvez lire le document officiel.

https://docs.cucumber.io/tools/Java/#gradle

3
hnrain