ReportNG 是一个配合 TestNG 运行 case 后自动帮你在 test-output 文件内生成一个相对较为美观的测试报告!
ReportNG 里面 Log 是不支持中文的,我改过 ReportNG.jar 源码,具体方法看最下面,也可以找我直接要 jar!
话不多说直接上

环境准备:
1,你需要这些架包

解释:有人会问现在 ReportNG 版本不是 1.1.4 吗?为什么我这里是 1.1.5 呢,这里是因为我改过这里面的源码,(为什么要改源码?后面告诉你)
修复 ReportNG 中文乱码问题包下载地址:地址
2,先写一个简单的 case,比如打开百度,下面这个代码看上去不难吧!这是第二步前提是你能运行它

package Test;
import org.junit.After;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.openqa.selenium.firefox.FirefoxProfile;
import org.testng.annotations.Test;


public class case1 {

    WebDriver driver;

    @Test
    public void Open() throws InterruptedException 
    {

        System.setProperty("webdriver.friefox.bin","C:\\Program Files\\Mozilla Firefox\\friefox.exe");

        FirefoxProfile fp = new FirefoxProfile();
        WebDriver driver = new FirefoxDriver(fp);
        driver.get("http://www.baidu.com");
        driver.findElement(By.id("kw")).sendKeys("testerhome");

    }


        @Test
    public void Open() throws InterruptedException 
    {

        System.setProperty("webdriver.friefox.bin","C:\\Program Files\\Mozilla Firefox\\friefox.exe");

        FirefoxProfile fp = new FirefoxProfile();
        WebDriver driver = new FirefoxDriver(fp);
        driver.get("http://www.baidu.com");
        driver.findElement(By.id("kw")).sendKeys("testerhome");
        Reporter.log("测试1通过");

    }


    @Test
    public void Open1() throws InterruptedException 
    {

        System.setProperty("webdriver.friefox.bin","C:\\Program Files\\Mozilla Firefox\\friefox.exe");

        FirefoxProfile fp = new FirefoxProfile();
        WebDriver driver = new FirefoxDriver(fp);
        driver.get("http://www.baidu.com");
        driver.findElement(By.id("kw")).sendKeys("testerhome");
        Reporter.log("测试2通过");

    }


    @Test
    public void Open2() throws InterruptedException 
    {

        System.setProperty("webdriver.friefox.bin","C:\\Program Files\\Mozilla Firefox\\friefox.exe");

        FirefoxProfile fp = new FirefoxProfile();
        WebDriver driver = new FirefoxDriver(fp);
        driver.get("http://www.baidu.com");
        driver.findElement(By.id("k1w")).sendKeys("testerhome");
        Reporter.log("测试3通过");

    }


    @After

    public void quit() throws InterruptedException 
    {


        driver.quit();

    }

}

3,配置 testNG.xml,这个文件是 testNG 的配置文件,

<?xml version="1.0" encoding="UTF-8"?>
<suite name="test" parallel="true">

<test name="test" preserver-order="true">
<classes>
//你也可以多个
<class name="包名.case名字"/>
<class name="包名.case名字"/>
<class name="包名.case名字"/>
</classes>

<listeners>
//这是你需要加的东西
<listener class-name="org.uncommons.reportng.HTMLReporter" />
<listener class-name="org.uncommons.reportng.JUnitXMLReporter" />
</listeners>
</test> <!-- Test -->
</suite> <!-- Suite -->

4,然后运行 testNG.XML ,再看 test-output 文件夹 里面的 html 文件下面的 index.html

报错信息:

你自己 System.out 的东西都可以写到这里:


如果你的报告是乱码,那么你不要急,方法在下面:

在使用 ReportNG 替换 TestNG 自带报告时如果报告中含中文,则会乱码,很是不爽,所以把 ReportNG 的源码下载下来调试。

原来以为是 velocity 模板的问题,结果对比发现模板没有任何问题,再通过跟踪生成报告过程的代码发现是在将模板文件替换后输出到页面时未转码导致的,修改方法如下:

修改 AbstractReporter 中的 generateFile 这个方法中的代码如下:
现在是这样的:


protected void generateFile(File file,
                                String templateName,
                                VelocityContext context) throws Exception
    {
        Writer writer = new BufferedWriter(new FileWriter(file));
        try
        {
            Velocity.mergeTemplate(classpathPrefix + templateName,
                                   ENCODING,
                                   context,
                                   writer);
            writer.flush();
        }
        finally
        {
            writer.close();
        }
    }

修改成下面这样,然后编译好新的 jar 文件


protected void generateFile(File file,
                                String templateName,
                                VelocityContext context) throws Exception
    {
        //Writer writer = new BufferedWriter(new FileWriter(file)); 
        //encoding to utf-8
        OutputStream out=new FileOutputStream(file);
        Writer writer = new BufferedWriter(new OutputStreamWriter(out,"utf-8"));
        try
        {
            Velocity.mergeTemplate(classpathPrefix + templateName,ENCODING,context,writer);

            writer.flush();
        }
        finally
        {
            writer.close();
        }
    }

这样生成的报告就不会乱码了。

改造过的 架包:
https://yunpan.cn/ckgZ9Sx7GZ7nt(提取码:e2f9)如果失效可以去我的公众号上获取~那边会实时更新

欢迎一起交流,一起进步 可以关注我的微信公众号:


↙↙↙阅读原文可查看相关链接,并与作者交流