我有一套硒测试,使用TestNg放在一起,并使用Maven和Surefire在Jenkins上运行。
我正在尝试使用TestNg记者信息整理测试报告以包含自定义信息,但是遇到了一个问题,我发现使用Reporter.log()重复输出的任何内容。
如果我使用TestNg Eclipse插件运行报告,我会在报告输出下(在TestNg测试输出中)获得以下输出:
自定义输出到此处
如果我使用surefire(mvn clean test)运行,我会得到以下内容(在Surefire测试输出中):
自定义输出到此处
自定义输出到此处
自定义输出到此处
自定义输出到此处
这是我的故障覆盖,它创建了输出:
public class TestListeners extends TestListenerAdapter{
@Override
public void onTestFailure(ITestResult tr)
{
Reporter.log("Custom output goes here");
}
}
测试:
public class ReportTest extends TestBase{
@Test(groups="report")
public void reportTest()
{
driver.navigate().to("https://www.google.com");
driver.findElement(By.id("no-element-here"));
}
}
TestBase(用于设置和拆除驱动程序和环境):
@Listeners({TestListeners.class})
公共类TestBase {
private Configuration config = new Configuration();
protected String base_url;
public static WebDriver driver;
@BeforeClass(alwaysRun=true)
public void setUp()
{
driver = selectDriver();
driver.manage().timeouts().implicitlyWait(config.timeout, TimeUnit.SECONDS);
if(config.maximise)
{
driver.manage().window().maximize();
}
base_url = config.base_url;
}
@AfterClass(alwaysRun=true)
public void tearDown()
{
driver.quit();
}
也是pom,以防万一:
<build>
<plugins>
<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>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.18</version>
<configuration>
</configuration>
</plugin>
</plugins>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.testng</groupId>
<artifactId>testng</artifactId>
<version>6.1.1</version>
</dependency>
<dependency>
<groupId>org.seleniumhq.selenium</groupId>
<artifactId>selenium-java</artifactId>
<version>2.44.0</version>
</dependency>
我无法弄清楚为什么它在TestNg中运行时工作正常但在通过Surefire运行时随机重复。任何帮助,将不胜感激!提前谢谢!
答案 0 :(得分:0)
我已经解决了这里发生的事情,以防万一将来偶然发现这件事。
看起来每次出现故障,并且调用了覆盖,就会为每个存在的实例调用它。例如,如果@Listeners标签存在于3个类中,则输出将重复三次。
我解决了这个问题,删除了Classes中存在的所有@Listener标记,并将以下内容添加到嵌套在SureFire插件中的pom.xml中:
<properties>
<property>
<name>listener</name>
<value>utilities.TestOverride</value>
</property>
</properties>
现在,所有自定义输出仅显示一次。