问题描述
任何人都使用过maven surefire插件或任何其他机制来重新运行失败的方案.我在Serenity和Maven中使用黄瓜.我尝试了以下不同方法,以便在没有任何人工干预的情况下重新运行失败的场景.
例如:如果5个测试用例中有2个测试用例出错,那么我的脚本应自动执行这2个失败的方案,然后生成最终的宁静报告
1. Maven surefire
我在pom.xml文件中添加了以下行
Has anyone used maven surefire plug-in or any other mechanism for rerunning failed scenario.I am using Cucumber with Serenity and Maven. I tried below different ways in order to rerun failed scenario without any manual intervention
For example: If out of 5 test cases 2 test cases are getting error out then automatically my script should execute these 2 failed scenario before generating final serenity report
1. Maven surefire
I have added below lines in pom.xml file
<properties>
<failsafe.rerunFailingTestsCount>2</failsafe.rerunFailingTestsCount>
<surefire.rerunFailingTestsCount>2</surefire.rerunFailingTestsCount>
</properties>
OR
<plugin>
<artifactId>maven-failsafe-plugin</artifactId>
<version>2.19.1</version>
<configuration>
<includes>
<include>**/*.java</include>
</includes>
<argLine>-Xmx512m</argLine>
<systemPropertyVariables>
<webdriver.driver>${webdriver.driver}</webdriver.driver>
</systemPropertyVariables>
<systemProperties>
<webdriver.driver>${webdriver.driver}</webdriver.driver>
<surefire.rerunFailingTestsCount>${surefire.rerunFailingTestsCount}</surefire.rerunFailingTestsCount>
<surefire.rerunFailingTestsCount>${surefire.rerunFailingTestsCount}</surefire.rerunFailingTestsCount>
</systemProperties>
</configuration>
<executions>
<execution>
<goals>
<goal>integration-test</goal>
<goal>verify</goal>
</goals>
</execution>
</executions>
</plugin>
然后我尝试执行以下命令(我的场景由@RunThis标记注释)
mvn -Dcucumber.options =-tags @RunThis" -Dfailsafe.rerunFailingTestsCount = 2测试
Then I tried to execute below command (my scenario is annoted by @RunThis tag)
mvn -Dcucumber.options="--tags @RunThis" -Dfailsafe.rerunFailingTestsCount=2 test
执行上述命令后,我希望失败的场景应重新执行,但不会重新执行
After executing above command I am expecting that failed scenario should get executed again but it is not re-executing
2.使用黄瓜格式化程序生成rerun.txt并执行
按照另一种解决方案,我已经使用黄瓜格式化程序生成了rerun.txt.出现错误的方案将在rerun.txt中列出,然后由第二跑步者类选择并执行那些失败的方案.
我能够成功生成rerun.txt,但是第二个跑步者类既未执行,也未得到任何错误
2. Generating rerun.txt using cucumber formatter and executing it
As per another solution, I have generate rerun.txt using cucumber formatter. Scenario which are getting error out will be listed down in rerun.txt which should be then picked up by second runner class and execute those failed scenario.
I am able to generated rerun.txt successfully but second runner class is neither getting executed nor I am getting any kind of error
亚军1级
Runnerclass 1
@RunWith(CucumberWithSerenity.class)
@CucumberOptions(
features = "src/test/resources/features",
tags = "@RunThis",
monochrome = true
,plugin = { "json:target/cucumber-report-composite.json", "pretty",
"html:target/cucumber/","rerun:target/rerun.txt" })
public class AcceptanceTest {
}
RunnerClass 2
@RunWith(CucumberWithSerenity.class)
@CucumberOptions(strict = true,
glue = { "src/test/resources/features" },
features = { "@target/rerun.txt" },
plugin = { "json:target/cucumber-report-composite.json", "pretty",
"html:target/cucumber/"})
public class AcceptanceTest2 {
}
3.使用@ExtendCucumberOptions
根据另一种解决方案,我们可以在pom.xml文件
3. Using @ExtendCucumberOptions
As per one more solution we can add below dependancy on pom.xml file
<dependency>
<groupId>com.github.mkolisnyk</groupId>
<artifactId>cucumber-runner</artifactId>
<version>1.3.1</version>
</dependency>
然后我们的跑步者课应该是这样
Then our runner class should be like this
@RunWith(CucumberWithSerenity.class)
@ExtendedCucumberOptions(jsonReport = "target/cucumber.json",
retryCount = 3,
jsonUsageReport = "target/cucumber-usage.json",
outputFolder = "target")
@CucumberOptions(
features = "src/test/resources/features",
tags = "@RunThis",
monochrome = true
,plugin = { "json:target/cucumber-report-composite.json", "pretty",
"html:target/cucumber/","rerun:target/rerun.txt" })
public class AcceptanceTest {
}
然后我在命令
下执行 mvn -Dcucumber.options =-标记@RunThis"
再次我看不到失败的场景正在重新执行
Then I am executing below command
mvn -Dcucumber.options="--tags @RunThis"
again I could not see that failed scenario is getting re-executed
完整的POM.xml文件
complete POM.xml file
<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>GROUPNAME</groupId>
<artifactId>ARTIFACTNAME</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>jar</packaging>
<name>Serenity project using Cucumber and WebDriver</name>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<failsafe.rerunFailingTestsCount>2</failsafe.rerunFailingTestsCount>
<surefire.rerunFailingTestsCount>2</surefire.rerunFailingTestsCount>
<serenity.version>1.6.3</serenity.version>
<serenity.cucumber.version>1.5.9</serenity.cucumber.version>
<serenity.maven.version>1.2.1</serenity.maven.version>
<webdriver.driver>chrome</webdriver.driver>
</properties>
<repositories>
<repository>
<snapshots>
<enabled>false</enabled>
</snapshots>
<id>central</id>
<name>bintray</name>
<url>http://jcenter.bintray.com</url>
</repository>
</repositories>
<pluginRepositories>
<pluginRepository>
<snapshots>
<enabled>false</enabled>
</snapshots>
<id>central</id>
<name>bintray-plugins</name>
<url>http://jcenter.bintray.com</url>
</pluginRepository>
</pluginRepositories>
<dependencies>
<!-- <dependency> <groupId>net.serenity-bdd.maven.plugins</groupId> <artifactId>serenity-maven-plugin</artifactId>
<version>1.5.0-rc.1</version> </dependency> -->
<dependency>
<groupId>net.serenity-bdd</groupId>
<artifactId>serenity-core</artifactId>
<version>${serenity.version}</version>
</dependency>
<dependency>
<groupId>net.serenity-bdd</groupId>
<artifactId>serenity-cucumber</artifactId>
<version>${serenity.cucumber.version}</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
<version>1.7.25</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.assertj</groupId>
<artifactId>assertj-core</artifactId>
<version>1.7.0</version>
</dependency>
<dependency>
<groupId>com.googlecode.lambdaj</groupId>
<artifactId>lambdaj</artifactId>
<version>2.3.3</version>
</dependency>
<dependency>
<groupId>org.json</groupId>
<artifactId>json</artifactId>
<version>20171018</version>
</dependency>
<dependency>
<groupId>com.qpid.automation</groupId>
<artifactId>AutomationToolKit</artifactId>
<version>1.0.0-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>com.github.mkolisnyk</groupId>
<artifactId>cucumber-runner</artifactId>
<version>1.3.1</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.19.1</version>
<configuration>
<!-- <skip>true</skip> -->
<argLine>-Dfile.encoding="UTF-8"</argLine>
</configuration>
</plugin>
<plugin>
<artifactId>maven-failsafe-plugin</artifactId>
<version>2.19.1</version>
<configuration>
<includes>
<include>**/*.java</include>
</includes>
<argLine>-Xmx512m</argLine>
<systemPropertyVariables>
<webdriver.driver>${webdriver.driver}</webdriver.driver>
</systemPropertyVariables>
<systemProperties>
<webdriver.driver>${webdriver.driver}</webdriver.driver>
<surefire.rerunFailingTestsCount>${surefire.rerunFailingTestsCount}</surefire.rerunFailingTestsCount>
<surefire.rerunFailingTestsCount>${surefire.rerunFailingTestsCount}</surefire.rerunFailingTestsCount>
</systemProperties>
</configuration>
<executions>
<execution>
<goals>
<goal>integration-test</goal>
<goal>verify</goal>
</goals>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.2</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
</configuration>
</plugin>
<!-- Generate the test reports after the integration tests -->
<plugin>
<groupId>net.serenity-bdd.maven.plugins</groupId>
<artifactId>serenity-maven-plugin</artifactId>
<version>${serenity.version}</version>
<executions>
<execution>
<id>serenity-reports</id>
<phase>post-integration-test</phase>
<goals>
<goal>aggregate</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project>
推荐答案
我可以使用以下代码实现重新运行.
I could achieve the rerun using below code.
@RunWith(CucumberWithSerenity.class)
@CucumberOptions(
features = "src/test/resources/features", tags = "@Smoke1",
monochrome = true,
plugin = {"pretty", "html:target/cucumber-reports", "json:target/cucumber.json","rerun:rerun.txt"})
public class AcceptanceTest {
}
在上述插件(@CucumberOptions)中添加重新运行后,我只是执行以下命令
I just execute below command, after adding rerun in above plug in(@CucumberOptions)
mvn clean verify -Dcucumber.options="--tags @Smoke1"
,它将自动重新执行失败的方案.我无需编写另一个运行程序类并手动运行它.
and it automatically re-execute failed scenario. I no need to write another runner class and run it manually.
我的pom.xml是:
My pom.xml is:
<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>GROUPID</groupId>
<artifactId>ARTIFACTID</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>jar</packaging>
<name>Serenity project using Cucumber and WebDriver</name>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<serenity.version>1.9.2</serenity.version>
<serenity.cucumber.version>1.9.3</serenity.cucumber.version>
<serenity.maven.version>1.8.21</serenity.maven.version>
<webdriver.driver>chrome</webdriver.driver>
</properties>
<repositories>
<repository>
<snapshots>
<enabled>false</enabled>
</snapshots>
<id>central</id>
<name>bintray</name>
<url>http://jcenter.bintray.com</url>
</repository>
</repositories>
<pluginRepositories>
<pluginRepository>
<snapshots>
<enabled>false</enabled>
</snapshots>
<id>central</id>
<name>bintray-plugins</name>
<url>http://jcenter.bintray.com</url>
</pluginRepository>
</pluginRepositories>
<dependencies>
<dependency>
<groupId>net.serenity-bdd</groupId>
<artifactId>serenity-core</artifactId>
<version>${serenity.version}</version>
</dependency>
<dependency>
<groupId>net.serenity-bdd</groupId>
<artifactId>serenity-cucumber</artifactId>
<version>${serenity.cucumber.version}</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
<version>1.7.25</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-api</artifactId>
<version>5.1.0</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.assertj</groupId>
<artifactId>assertj-core</artifactId>
<version>1.7.0</version>
</dependency>
<dependency>
<groupId>com.googlecode.lambdaj</groupId>
<artifactId>lambdaj</artifactId>
<version>2.3.3</version>
</dependency>
<dependency>
<groupId>org.json</groupId>
<artifactId>json</artifactId>
<version>20171018</version>
</dependency>
<dependency>
<groupId>com.qpid.automation</groupId>
<artifactId>AutomationToolKit</artifactId>
<version>1.0.0</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.18.1</version>
<configuration>
<!-- <skip>true</skip> -->
<argLine>-Dfile.encoding="UTF-8"</argLine>
</configuration>
</plugin>
<plugin>
<artifactId>maven-failsafe-plugin</artifactId>
<version>2.18.1</version>
<configuration>
<includes>
<include>**/*.java</include>
</includes>
<argLine>-Xmx512m</argLine>
<systemPropertyVariables>
<webdriver.driver>${webdriver.driver}</webdriver.driver>
</systemPropertyVariables>
</configuration>
<executions>
<execution>
<goals>
<goal>integration-test</goal>
<goal>verify</goal>
</goals>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.2</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
</configuration>
</plugin>
<!-- Generate the test reports after the integration tests -->
<plugin>
<groupId>net.serenity-bdd.maven.plugins</groupId>
<artifactId>serenity-maven-plugin</artifactId>
<version>${serenity.version}</version>
<executions>
<execution>
<id>serenity-reports</id>
<phase>post-integration-test</phase>
<goals>
<goal>aggregate</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project>
这篇关于使用Maven/Cucumber/Serenity重新运行失败的方案的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!