TestNg记者信息在surefire测试结果输出中重复

时间:2014-12-04 18:38:18

标签: java maven jenkins testng maven-surefire-plugin

我有一套硒测试,使用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运行时随机重复。任何帮助,将不胜感激!提前谢谢!

1 个答案:

答案 0 :(得分:0)

我已经解决了这里发生的事情,以防万一将来偶然发现这件事。

看起来每次出现故障,并且调用了覆盖,就会为每个存在的实例调用它。例如,如果@Listeners标签存在于3个类中,则输出将重复三次。

我解决了这个问题,删除了Classes中存在的所有@Listener标记,并将以下内容添加到嵌套在SureFire插件中的pom.xml中:

<properties>
    <property>
        <name>listener</name>
        <value>utilities.TestOverride</value>
    </property>
</properties>

现在,所有自定义输出仅显示一次。