当前位置: 首页 > 知识库问答 >
问题:

Cucumber没有与Maven并驾齐驱

慎俊艾
2023-03-14

我试图运行我的cucumber测试与硒并行使用Maven。我尝试了maven surefire插件和故障保护插件,甚至旧cucumberjvm并行插件。我得到了同样的结果。我的测试按顺序运行,没有并行化。

我试着配置maven surefire插件,然后配置maven failsafe插件。没什么帮助。

这是我的pom.xml档案

        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.8.1</version>
                <configuration>
                    <source>1.8</source>
                    <target>1.8</target>
                    <encoding>UTF-8</encoding>
                    <fork>true</fork>
                </configuration>
            </plugin>

            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-surefire-plugin</artifactId>
                <version>2.22.0</version>
                <configuration>
                    <forkCount>2</forkCount>
                    <reuseForks>true</reuseForks>
                    <includes>
                        <include>**/RunnerTest.class</include>
                    </includes>

                </configuration>
            </plugin>
        </plugins>
    </build>

    <dependencies>
        <dependency>
            <groupId>org.junit.jupiter</groupId>
            <artifactId>junit-jupiter-api</artifactId>
            <version>5.4.1</version>
            <scope>test</scope>
        </dependency>

        <dependency>
            <groupId>io.github.bonigarcia</groupId>
            <artifactId>webdrivermanager</artifactId>
            <version>3.3.0</version>
            <scope>test</scope>
        </dependency>

        <dependency>
            <groupId>org.seleniumhq.selenium</groupId>
            <artifactId>selenium-java</artifactId>
            <version>3.141.59</version>
        </dependency>

        <dependency>
            <groupId>io.cucumber</groupId>
            <artifactId>cucumber-picocontainer</artifactId>
            <version>4.2.5</version>
            <scope>test</scope>
        </dependency>

        <dependency>
            <groupId>io.cucumber</groupId>
            <artifactId>cucumber-junit</artifactId>
            <version>4.2.6</version>
            <scope>test</scope>
        </dependency>

        <dependency>
            <groupId>io.cucumber</groupId>
            <artifactId>cucumber-java</artifactId>
            <version>4.2.6</version>
        </dependency>

        <dependency>
            <groupId>io.rest-assured</groupId>
            <artifactId>rest-assured</artifactId>
            <version>3.3.0</version>
            <scope>test</scope>
        </dependency>

        <dependency>
            <groupId>com.microsoft.sqlserver</groupId>
            <artifactId>mssql-jdbc</artifactId>
            <version>7.3.0.jre8-preview</version>
            <scope>test</scope>
        </dependency>

        <dependency>
            <groupId>net.masterthought</groupId>
            <artifactId>cucumber-reporting</artifactId>
            <version>4.7.0</version>
        </dependency>
    </dependencies>

这里是我的故障保护插件配置。但它失效了

                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-failsafe-plugin</artifactId>
                <version>2.22.0</version>
                <executions>
                    <execution>
                        <id>acceptance-test</id>
                        <phase>integration-test</phase>
                        <goals>
                            <goal>integration-test</goal>
                            <goal>verify</goal>
                        </goals>
                        <configuration>
                            <rerunFailingTestsCount>1</rerunFailingTestsCount>
                            <testFailureIgnore>true</testFailureIgnore>
                            <includes>
                                <include>**/RunnerTest.class</include>
                                <include>**/*IT.class</include>
                            </includes>
                            <forkCount>2</forkCount>
                            <reuseForks>true</reuseForks>
                            <perCoreThreadCount>false</perCoreThreadCount>
                            <reportsDirectory>target</reportsDirectory>
                        </configuration>
                    </execution>
                </executions>
            </plugin>

还有我的跑步课

@RunWith(Cucumber.class)
@CucumberOptions(
        features = "src/test/java/features",
        glue = "step_definitions",
        plugin = {"pretty", "html:target/cucumberHtmlReport", "json:target/cucumber-report.json"},
        monochrome = true,
        strict = true
)
public class RunnerTest {

}

要在Maven中运行测试,我使用以下命令:

mvn clean verify "-Dcucumber.options=--tags @Test-1,@Test-2" -Dbrowser=chrome

此外,我可以说我使用静态webDriver和Singleton类处理属性。我不知道它会产生什么影响,但仅供参考。如果需要,我可以提供代码

目前,我希望在forks中运行测试,因为线程处理是另一件大事。

共有1个答案

董俊
2023-03-14

请按照以下步骤操作。

  • 我们不能直接混在一起

首先,使用正确的io.cucumber依赖项更新POM. xml。

 <dependency>
    <groupId>io.cucumber</groupId>
    <artifactId>cucumber-junit</artifactId>
    <version>4.2.6</version>
</dependency>

<dependency>
    <groupId>io.cucumber</groupId>
    <artifactId>cucumber-picocontainer</artifactId>
    <version>4.2.6</version>
</dependency>

需要注意的是,可能存在这样的问题,即一切正常,但测试仍然不能并行执行,并且如果pom.xml对testng具有直接/可传递的依赖关系,则可能存在这种问题。因为testNG导致Surefire忽略JUnit包装类。如果您有testng依赖项,那么请删除testng依赖项,或者您可以调用2 define 2 execution-For testng

第二,根据您的框架需要定制Runner类

package com.jacksparrow.automation.suite.runner;

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

@RunWith(Cucumber.class)
@CucumberOptions(features = "classpath:features/functional/",
                     glue = {"com.jacksparrow.automation.steps_definitions.functional" },
                   plugin = { "pretty","json:target/cucumber-json/cucumber.json",
                            "junit:target/cucumber-reports/Cucumber.xml", "html:target/cucumber-reports"},
                   tags = { "@BAMS_Submitted_State_Guest_User" },
                   junit ={ "--step-notifications"},
                   strict = false,
                   dryRun = false,
               monochrome = true)

public class RunCukeTest {
}

第三,实现maven surefire插件,该插件实际上可以并行运行测试

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-surefire-plugin</artifactId>
    <version>3.0.0-M3</version>
    <configuration>
        <parallel>methods</parallel>
        <threadCount>2</threadCount>
        <reuserForks>false</reuserForks>
        <testFailureIgnore>true</testFailureIgnore>
        <includes>
            <include>**/*RunCukeTest.java</include>
        </includes>
    </configuration>
</plugin>

第四,实现Hooks.java

import cucumber.api.Scenario;
import cucumber.api.java.Before;
import cucumber.api.java.After;

public class Hooks {

    @Before
    public void setUpScenario(String browser){
        //BaseSteps.getInstance().getBrowserInstantiation(browser); your browser setup method
    }
    @After
    public void afterScenario(Scenario scenario){
    // more code goes here  
    }
   }
 类似资料:
  • 嘿,我在POM中做了这个配置。xml文件并行运行测试。但当我使用cmd进行“mvn验证”时,只有一个浏览器正在运行一个功能,而在完成一个功能文件的执行后,另一个功能正在运行。这是我的代码和pom。xml请建议我怎么做? 我正在使用cucumber 这是我的pom.xml代码: 提前感谢。

  • Cucumber测试没有并行运行(Cucumber jvm并行插件)? 如果我使用runner类执行测试,一次将执行一个功能文件,但是当将以下插件添加到POM文件时,似乎没有功能文件执行? 即使我指向了正确的功能文件文件夹? 我的POM文件:

  • 在我的项目中,我使用的是Mavencucumber测试。 我有个试跑员 对于 jenkins 上的日常运行,我使用特定功能“mvn clean test -s -Dcucumber.filter.tags=”tag_from_feture_file“”。一切正常。 但是,有时我需要执行不包含在Jenkins中的小测试,它们不在功能文件中写入。例如: 问题是 - 当我将带有注释 (@Test) 的测

  • 我正在努力获得Cucumber-JVM V4.0.0与JUnit/Maven一起工作的新并行执行特性。 如前所述,如果在POM中相应地配置和,并使用依赖项注入来共享状态(我使用的是Pico Continer),那么Cucumber特性应该并行执行。 如果有用的话,下面是我的runner类(com.softwareAutomation.world是DI类) 请参阅下面从Maven运行时的失败堆栈跟踪

  • 我正在使用SeleniumWebDriver(2.53.0版)的Java实现对web应用程序运行一些自动化测试。测试使用Cucumber的Java实现(版本1.2.3)以行为驱动测试格式编写。我使用Maven(3.3.9版)导入我的所有依赖项,并构建和运行测试。使用cucumber标签将测试分为不同类别。例如,我可以使用以下命令从命令行运行一类标有@JohnnyBravo的测试: 在做了一些研究后

  • 我试图将一个maven插件cucumber-jvm-parallel-plugin合并到我的Cucumber-JVM代码中,但遇到了一些问题...我认为我已经正确地配置了,但是我的cucumber特性仍然是一个接一个地运行,而不是并行地运行。 我遵循了两个教程,但找不到哪里出错了,或者如果这是意料之中的: https://opencredo.com/test-automation-concepts