Selenium Java(maven项目):TestNG结果与ReportNG不同

时间:2017-10-25 03:00:15

标签: java maven selenium testng reportng

我尝试运行Store,结果是:

  

===============================================

     

默认测试

     

测试运行:14,失败:6,跳过:0

     

默认套件

     

总测试运行:14,失败:6,跳过:0

     

===============================================

现在,我禁用了deafult TestNG侦听器并在testng.xml中添加了ReportNG列表器。 testng.xmltestng.xml。看起来像这样:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">
<suite name="Suite">
    <listeners>
        <listener class-name="org.uncommons.reportng.HTMLReporter" />
        <listener class-name="org.uncommons.reportng.JUnitXMLReporter" />
    </listeners>
    <test name="Test">
        <classes>
            <class name=".URL_Daily" />
        </classes>
    </test> <!-- Test -->
</suite> <!-- Suite -->

按照这些步骤,我在maven&#39; velocity中添加了guicereportngpom.xml个依赖关系。

执行测试套件testng.xml后,创建了以下文件夹(标记为红色框)。

enter image description here

打开index.html后,结果如下: enter image description here

正如预期的那样,ReportNG应该创建一个输出文件夹,这在我的场景中没有被注意到。其次,结果不同。

此外,报告index.html并未查看其实际情况。有人可以说出错误吗?

一些细节供您参考:

操作系统:Windows 7

Guice.jar版本:guice-4.1.0

ReportNG版本:reportng-1.1.4

Velocity版本:velocity-dep-1.4

TestNG版本:testng-6.11

Selenium版本:selenium-java-3.5.3

Eclipse:eclipse oxygen

我的测试用例如下:

public class MwSites {
WebDriver driver;

@BeforeTest     
public void setup ()    
{
    System.setProperty("webdriver.chrome.driver", "F:\\Automation\\Drivers\\Selenium Drivers\\chromedriver_win32\\chromedriver.exe");
    ChromeOptions options = new ChromeOptions();
    options.addArguments("test-type");
    options.addArguments("start-maximized");
    options.addArguments("--js-flags=--expose-gc");  
    options.addArguments("--enable-precise-memory-info"); 
    options.addArguments("--disable-popup-blocking");
    options.addArguments("--disable-default-apps");
    options.addArguments("test-type=browser");
    options.addArguments("disable-infobars");
    driver = new ChromeDriver(options);
    driver.manage().timeouts().implicitlyWait(60, TimeUnit.SECONDS);
}

@AfterTest
public void Quit () throws InterruptedException
{
    driver.quit();
}

@Test(priority = 0)     
public void MI_Demo () throws InterruptedException
{
    driver.navigate().to("http://demo.movingwalls.com/mi/#/login");
    Assert.assertEquals("Login", driver.getTitle());
    if (driver.getTitle()=="Login"){
        System.out.println("Failed to access MI in demo environment");
    }
    else{
        System.out.println("MI is successfully accessed in demo environment");
    }
}

2 个答案:

答案 0 :(得分:1)

当您的测试被跳过时,您可能需要首先检查测试结果xml以找出根本原因(例外)。

另一方面,我只是想知道使用图书馆的初衷是什么,而图书馆的维护期限为4年? ReportNG已经死了。这是事实。如果你看看它的来源,你会看到它使用的是哪个TestNG版本(6.8)。您可以轻松地假设其记者基于旧的TestNG API。

当你将TestNG 6.11作为依赖项添加时,jar发生地狱的可能性非常高。如果它是您问题的根本原因,我不会感到惊讶。

如果您尚未决定使用哪种报告系统,我建议您查看现代Allure 2框架。

否则,只需先检查堆栈跟踪,了解问题的根本原因。

答案 1 :(得分:0)

我能够使用指定版本解决此问题。

默认情况下,ReportNG报告是在surefire插件配置的target/surefire-reports文件夹下生成的。这可以通过surefire配置进行更改。

您可以添加任何测试类,但为了方便起见,我只包括pom文件和我使用过的两个示例类。

<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>com.rationaleemotions</groupId>
    <artifactId>46923243</artifactId>
    <version>1.0-SNAPSHOT</version>
    <packaging>jar</packaging>

    <name>46923243</name>
    <url>http://maven.apache.org</url>

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <maven.compiler.source>1.8</maven.compiler.source>
        <maven.compiler.target>1.8</maven.compiler.target>
    </properties>

    <dependencies>
        <!-- https://mvnrepository.com/artifact/velocity/velocity-dep -->
        <dependency>
            <groupId>org.seleniumhq.selenium</groupId>
            <artifactId>selenium-java</artifactId>
            <version>3.5.3</version>
        </dependency>
        <!-- https://mvnrepository.com/artifact/com.google.inject/guice -->
        <dependency>
            <groupId>com.google.inject</groupId>
            <artifactId>guice</artifactId>
            <version>3.0</version>
        </dependency>
        <dependency>
            <groupId>org.testng</groupId>
            <artifactId>testng</artifactId>
            <version>6.12</version>
            <scope>test</scope>
        </dependency>
        <!-- https://mvnrepository.com/artifact/org.uncommons/reportng -->
        <dependency>
            <groupId>org.uncommons</groupId>
            <artifactId>reportng</artifactId>
            <version>1.1.4</version>
            <scope>test</scope>
        </dependency>
    </dependencies>
    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-surefire-plugin</artifactId>
                <version>2.20.1</version>
                <configuration>
                    <!-- Suite testng xml file to consider for test execution -->
                    <suiteXmlFiles>
                        <suiteXmlFile>src/test/resources/testng.xml</suiteXmlFile>
                    </suiteXmlFiles>
                    <properties>
                        <property>
                            <name>usedefaultlisteners</name>
                            <value>false</value>
                        </property>
                    </properties>
                </configuration>

            </plugin>
        </plugins>
    </build>
    <repositories>
        <repository>
            <id>jcenter</id>
            <name>jcenter</name>
            <url>http://jcenter.bintray.com</url>
        </repository>
    </repositories>
</project>

我用过的测试类

package com.rationaleemotions;

import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.chrome.ChromeOptions;
import org.testng.Assert;
import org.testng.annotations.AfterClass;
import org.testng.annotations.BeforeClass;
import org.testng.annotations.Test;

import java.util.concurrent.TimeUnit;

public class MwSites {
    private WebDriver driver;

    @BeforeClass
    public void setup() {
        ChromeOptions options = new ChromeOptions();
        options.addArguments("test-type");
        options.addArguments("start-maximized");
        options.addArguments("--js-flags=--expose-gc");
        options.addArguments("--enable-precise-memory-info");
        options.addArguments("--disable-popup-blocking");
        options.addArguments("--disable-default-apps");
        options.addArguments("test-type=browser");
        options.addArguments("disable-infobars");
        driver = new ChromeDriver(options);
        driver.manage().timeouts().implicitlyWait(60, TimeUnit.SECONDS);
    }

    @AfterClass
    public void Quit() throws InterruptedException {
        driver.quit();
    }

    @Test
    public void MI_Demo() throws InterruptedException {
        driver.navigate().to("http://demo.movingwalls.com/mi/#/login");
        Assert.assertEquals("Login", driver.getTitle());
        if ("Login".equals(driver.getTitle())) {
            System.out.println("Failed to access MI in demo environment");
        } else {
            System.out.println("MI is successfully accessed in demo environment");
        }
    }
}
package com.rationaleemotions;

import org.testng.Assert;
import org.testng.Reporter;
import org.testng.annotations.Test;

public class TestClassWithMultipleResults {
    @Test
    public void testMethodWillPass() {
        Reporter.log("This test method will pass", true);
    }

    @Test
    public void testMethodWillFail() {
        Reporter.log("This test method will fail", true);
        Assert.fail();
    }

    @Test(dependsOnMethods = "testMethodWillFail")
    public void testMethodWillSkip() {
    }
}

我使用的套件xml:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">
<suite name="Suite">
    <listeners>
        <listener class-name="org.uncommons.reportng.HTMLReporter"/>
        <listener class-name="org.uncommons.reportng.JUnitXMLReporter"/>
    </listeners>
    <test name="Test">
        <classes>
            <class name="com.rationaleemotions.MwSites"/>
            <class name="com.rationaleemotions.TestClassWithMultipleResults"/>
        </classes>
    </test> <!-- Test -->
</suite> <!-- Suite -->

以下是ReportNG报告的截图

Overview Summary

Overview Detail

Index Summary

Index Detail