Maison > Java > javaDidacticiel > 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
Libérer: 2024-10-29 16:49:02
original
1089 Les gens l'ont consulté

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>
Copier après la connexion
  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>
Copier après la connexion

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>
Copier après la connexion

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 de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal