web-dev-qa-db-fra.com

Comment exécuter des fichiers de fonctionnalités de concombre unique via l'invite de commande et via jenkins en utilisant Maven?

Je suis un peu nouveau sur Cucumber/Maven, j'ai donc besoin d'aide pour exécuter des cas de test. J'ai développé une suite d'automatisation dans Eclipse en utilisant Cucumber et Selenium. Pour exécuter des fichiers de fonctionnalités spécifiques/classe runner Junit, je fais un clic droit sur les fichiers dans Eclipse et je les exécute.

Mais comment l'exécuter via l'invite de commandes ou Jenkins en donnant des commandes spécifiques pour exécuter 2-3 fichiers de fonctionnalités (ou) 2-3 classes de runner Junit sur 50 fichiers de fonctionnalités ou classes JUnit par exemple?

Vous trouverez ci-dessous l'explorateur de packages sur la façon dont j'ai structuré Eclipse.

enter image description here

Ci-dessous est le POM.xml

<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.perspecsys</groupId>
    <artifactId>salesforce</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <packaging>jar</packaging>

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

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    </properties>


    <dependencies>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.11</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>info.cukes</groupId>
            <artifactId>cucumber-Java</artifactId>
            <version>1.1.2</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>info.cukes</groupId>
            <artifactId>cucumber-picocontainer</artifactId>
            <version>1.1.2</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>info.cukes</groupId>
            <artifactId>cucumber-junit</artifactId>
            <version>1.1.2</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.seleniumhq.Selenium</groupId>
            <artifactId>Selenium-Java</artifactId>
            <version>2.48.2</version>
        </dependency>

    </dependencies>
</project>
12
Ronnie

Vous pouvez exécuter un seul fichier de fonction en utilisant cucumber.options qui remplacera toutes les options que vous avez dans le @CucumberOptions annotation:

mvn test -Dcucumber.options="src/test/features/com/perspecsys/salesforce/featurefiles/Account.feature"
20

Vous pouvez exécuter un seul fichier de fonctionnalités à l'aide de cucumber.options

mvn test -Dcucumber.options="--tags @TestTag"
5
user6939

Si vous le vouliez codé en dur, vous pourriez faire quelque chose comme:

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

@RunWith(Cucumber.class)
@CucumberOptions(
        features={"src/test/resources/features/belly.feature"}  
        ,glue =  "steps"   //whatever the name of your steps package is
        )
public class RunCukesTest 
{
}
3
William

Étant donné que vous utilisez Maven et que vous avez déjà une classe de runner distincte par fonctionnalité, vous pouvez simplement utiliser le plug-in Failsafe ou le Plugin Surefire pour passer un paramètre de la ligne de commande comme celui-ci, et sélectionnez le runner à exécuter.

Version à sécurité intégrée:

-Dit.test=Account*Test,Login*Test

Version Surefire:

-Dtest=Account*Test,Login*Test

Notez que vous pouvez utiliser des caractères génériques, passer une liste de tests séparés par des virgules et référencer l'emplacement complet et filtrer par package.

-Dit.test=com.perpecsys.salesforce.*Test

Pour cela, j'utiliserais normalement le plugin Failsafe, car le Cucumber teste plus comme des tests d'intégration (des tests de bout en bout vraiment), et c'est à cela que sert le plugin, tandis que le plugin Surefire est conçu pour exécuter des tests unitaires.

Plus d'informations sur les deux plugins:

http://maven.Apache.org/surefire/maven-failsafe-plugin/examples/single-test.html

http://maven.Apache.org/surefire/maven-surefire-plugin/examples/single-test.html

Depuis Jenkins, c'est exactement la même chose, utilisez simplement le plugin Maven Project pour créer un nouveau projet Maven et dans la section Build, sous le champ Objectif et options spécifiez la commande maven comme:

clean verify -Dit.test=Account*Test

https://wiki.jenkins-ci.org/display/JENKINS/Maven+Project+Plugin

Sinon, ajoutez simplement l'étape Invoke maven target à la build si vous n'utilisez pas le plug-in de projet Maven, et ajoutez-y les options.

J'espère que cela t'aides.

2
Pedro Lopez