web-dev-qa-db-fra.com

Comment exécuter des tests concombre-jvm avec maven

Comment puis-je exécuter les tests de concombre que j'ai dans les emplacements suivants avec Maven.

Les dossiers source 'src/main/Java' et 'src/main/ressources' incluent des définitions d'étape et des fichiers de fonctionnalités dans le package 'com.testing.TestProject.login' créé dans chaque dossier source.

J'ai inclus des plugins et des dépendances dans le fichier POM mais lorsque j'exécute le test d'intégration de phase maven, les tests de concombre ne sont pas exécutés.

Je suis nouveau chez Maven. Veuillez me faire savoir quoi inclure dans le fichier POM pour exécuter les tests de concombre avec Maven.

Voici mon fichier POM:

   <project xmlns="http://maven.Apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.Apache.org/POM/4.0.0 http://maven.Apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>

  <groupId>com.testing</groupId>
  <artifactId>MyMavenProject</artifactId>
  <version>1.0-SNAPSHOT</version>
  <packaging>jar</packaging>

  <name>MyMavenProject</name>
  <url>http://maven.Apache.org</url>

  <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <cucumber-jvm.version>1.1.5</cucumber-jvm.version>
    <Selenium.version>2.39.0</Selenium.version>
    <junit.version>4.11</junit.version>
  </properties>

    <build>

    <plugins>
        <plugin>
            <groupId>org.codehaus.mojo</groupId>
            <artifactId>exec-maven-plugin</artifactId>
            <version>1.2.1</version>
            <executions>
                <execution>
                    <phase>integration-test</phase>
                    <goals>
                        <goal>Java</goal>
                    </goals>
                </execution>
            </executions>
            <configuration>
                <executableDependency>
                    <groupId>info.cukes</groupId>
                    <artifactId>cucumber-core</artifactId>
                </executableDependency>
                <mainClass>cucumber.api.cli.Main</mainClass>
                <arguments>
                    <argument>--format</argument>
                    <argument>junit:target/cucumber-junit-report/allcukes.xml</argument>
                    <argument>--format</argument>
                    <argument>pretty</argument>
                    <argument>--format</argument>
                    <argument>html:target/cucumber-html-report</argument>
                    <argument>--tags</argument>
                    <argument>@login</argument>
                    <argument>--glue</argument>
                    <argument>com/</argument>
                    <argument>src/</argument>
                </arguments>
            </configuration>
            <dependencies>
                <dependency>
                    <groupId>info.cukes</groupId>
                    <artifactId>cucumber-core</artifactId>
                    <version>1.1.5</version>
                </dependency>
            </dependencies>
        </plugin>
    </plugins>
</build>  

  <dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>${junit.version}</version>
      <scope>test</scope>
    </dependency>
    <dependency>
        <groupId>org.seleniumhq.Selenium</groupId>
        <artifactId>Selenium-Java</artifactId>
        <version>${Selenium.version}</version>
    </dependency>
    <dependency>
        <groupId>info.cukes</groupId>
        <artifactId>cucumber-picocontainer</artifactId>
        <version>${cucumber-jvm.version}</version>
        <scope>test</scope>
    </dependency>
    <dependency>
        <groupId>info.cukes</groupId>
        <artifactId>cucumber-junit</artifactId>
        <version>${cucumber-jvm.version}</version>
        <scope>test</scope>
    </dependency>
    <dependency>
    <groupId>org.testng</groupId>
    <artifactId>testng</artifactId>
    <version>6.8.7</version>
</dependency>
<dependency>
    <groupId>log4j</groupId>
    <artifactId>log4j</artifactId>
    <version>1.2.16</version>
</dependency>
<dependency>
    <groupId>commons-logging</groupId>
    <artifactId>commons-logging</artifactId>
    <version>1.1.3</version>
</dependency>
</dependencies>
</project>

Merci d'avance.

10
user3188928

Vos classes de test doivent se terminer par le suffixe "Test".

18
Sergiu Indrie

La manière typique d'exécuter des tests JVM Cucumber à partir de Maven est de les faire passer par JUnit en fournissant une classe RunCukesTest qui déclenche Cucumber à partir de JUnit.

Une classe RunCukesTest typique peut ressembler à ceci:

package com.testing;

import cucumber.api.CucumberOptions;
import cucumber.api.junit.Cucumber;
import org.junit.runner.RunWith;

@RunWith(Cucumber.class)
@CucumberOptions(
        features = "src/test/resources/features",
        glue = "com.testing"
)
public class RunCukesTest { // NOSONAR SonarLint does not know about @RunWith(Cucumber.class)
}

Explication des détails:

  • @RunWith(Cucumber.class) indique à JUnit de ne pas exécuter cette classe de test avec son exécuteur par défaut, mais plutôt avec Cucumber qui est un exécuteur de test pour JUnit4 qui exécute Cucumber à partir de JUnit.
  • @CucumberOptions Indique à Cucumber où trouver son contenu. Les principales choses sont:
    • features indique à Cucumber où trouver les fichiers de fonctionnalités.
    • glue indique à Cucumber quels packages contiennent les définitions d'étape.
11
Christian Hujer

Selon les normes Maven, les tests doivent être en src/test/Java et pas dans src/main/Java. Votre pom.xml me va bien. Je soupçonne que si vous importez vos tests et ressources du dossier main dans le dossier test, vos tests devraient s'exécuter très bien.

4
nilesh