Maison  >  Article  >  Java  >  Comment exécuter les fichiers de fonctionnalités Cucumber en parallèle avec différents navigateurs et balises ?

Comment exécuter les fichiers de fonctionnalités Cucumber en parallèle avec différents navigateurs et balises ?

Barbara Streisand
Barbara Streisandoriginal
2024-10-29 16:49:02991parcourir

How to execute Cucumber feature files in parallel with different browsers and tags?

Exécution des fichiers de fonctionnalités de concombre en parallèle

Problème : Plusieurs fichiers de fonctionnalités de concombre, chacun associé à des balises différentes, doivent être exécutés en parallèle, avec des fichiers spécifiques attribués à des navigateurs spécifiques.

Solution :

L'utilisation du cucumber-jvm-parallel-plugin open source fournit une fonctionnalité- solution riche pour l'exécution parallèle de tests de concombre.

  1. Configuration du plugin :

Ajoutez la configuration de plugin suivante au fichier pom Maven du projet :

<code class="xml"><dependency>
    <groupId>com.github.temyers</groupId>
    <artifactId>cucumber-jvm-parallel-plugin</artifactId>
    <version>2.1.0</version>
</dependency>
<plugin>
    <groupId>com.github.temyers</groupId>
    <artifactId>cucumber-jvm-parallel-plugin</artifactId>
    <version>2.1.0</version>
    <executions>
        <execution>
            <id>generateRunners</id>
            <phase>generate-test-sources</phase>
            <goals>
                <goal>generateRunners</goal>
            </goals>
            <configuration>
                <glue>foo, bar</glue>
                <outputDirectory>${project.build.directory}/generated-test-sources/cucumber</outputDirectory>
                <featuresDirectory>src/test/resources/features/</featuresDirectory>
                <cucumberOutputDir>target/cucumber-parallel</cucumberOutputDir>
                <format>json</format>
                <strict>true</monochrome>true</strict>
                <tags>@chrome,@firefox</tags>
                <filterFeaturesByTags>false</filterFeaturesByTags>
                <useTestNG>false</useTestNG>
                <namingScheme>simple</namingScheme>
                <parallelScheme>SCENARIO</parallelScheme>
            </configuration>
        </execution>
    </executions>
</plugin></code>
  1. Ajout d'un deuxième plugin :

Ajoutez un autre plugin qui invoquera les classes d'exécution générées par le plugin précédent :

<code class="xml"><plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-surefire-plugin</artifactId>
    <version>2.19</version>
    <configuration>
        <forkCount>5</forkCount>
        <reuseForks>true</reuseForks>
        <includes>
            <include>**/*IT.class</include>
        </includes>
    </configuration>
</plugin></code>

Classe WebDriver partagée :

Implémenter une classe WebDriver partagée :

<code class="java">public class SharedDriver extends EventFiringWebDriver {

    // Singleton WebDriver instance
    private static WebDriver REAL_DRIVER = null;

    // Closing hook for WebDriver
    private static final Thread CLOSE_THREAD = new Thread() {
        @Override
        public void run() {
            REAL_DRIVER.close();
        }
    };

    // WebDriver setup
    static {
        Runtime.getRuntime().addShutdownHook(CLOSE_THREAD);
    }

    public SharedDriver() {
        super(CreateDriver());
    }

    public static WebDriver CreateDriver() {
        if (REAL_DRIVER == null)
            REAL_DRIVER = new FirefoxDriver();
        setWebDriver(REAL_DRIVER);
        return REAL_DRIVER;
    }

    public static void setWebDriver(WebDriver webDriver) {
        SharedDriver.REAL_DRIVER = webDriver;
    }

    public static WebDriver getWebDriver() {
        return SharedDriver.REAL_DRIVER;
    }

    // Disable closing for shared driver
    @Override
    public void close() {
        if (Thread.currentThread() != CLOSE_THREAD) {
            throw new UnsupportedOperationException("Closing is handled by shutdown hook.");
        }
        super.close();
    }
}</code>

Considérations :

  • Le nombre de fork (threads parallèles) doit correspondre aux ressources matérielles disponibles et aux nœuds enregistrés.
  • Le hub de grille doit être démarré avec -DPOOL_MAX=512 ou supérieur pour exécuter un grand nombre (> 50) de threads. en parallèle.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn