0

范围报告版本 - 3.0 语言 - Java 和 TestNG 类

我有一堂课——ExtentManager.java

    package framewrk;

import com.aventstack.extentreports.ExtentReports;
import com.aventstack.extentreports.ExtentTest;
import com.aventstack.extentreports.reporter.ExtentHtmlReporter;

public class ExtentManager {

    private static ExtentReports extent;
    private static ExtentTest test;
    private static ExtentHtmlReporter htmlReporter;
    private static String filePath = "./extentreport.html";

    public static ExtentReports GetExtent(){
        extent = new ExtentReports();

        htmlReporter = new ExtentHtmlReporter(filePath);

        // make the charts visible on report open
        htmlReporter.config().setChartVisibilityOnOpen(true);

        // report title
        String documentTitle = prop.getProperty("documentTitle", "aventstack - Extent");
        htmlReporter.config().setDocumentTitle(documentTitle);
}

    public static ExtentTest createTest(String name, String description){
        test = extent.createTest(name, description);
        return test;
    }

    public static ExtentTest createTest(String name){
        test = extent.createTest(name, "");
        return test;
    }
}

和 2 个 testNG 类如下 TC1.java

package framewrk;

import org.testng.annotations.AfterClass;
import org.testng.annotations.BeforeClass;
import org.testng.annotations.Test;
import com.aventstack.extentreports.ExtentReports;
import com.aventstack.extentreports.ExtentTest;
import com.aventstack.extentreports.Status;

public class TC1 {
    static ExtentReports extent;
    static ExtentTest test;

    @BeforeClass
    public void setup(){
        extent = ExtentManager.GetExtent();
    }

    @Test
    public void OpenUT(){
        test = extent.createTest("Testing how fail works");
        test.log(Status.INFO, "fail check started");
        test.fail("Test fail");
    }

    @AfterClass
    public void tear()
    {
        extent.flush();
    }
}

TC2.java

package framewrk;

import org.testng.annotations.AfterClass;
import org.testng.annotations.BeforeClass;
import org.testng.annotations.Test;
import com.aventstack.extentreports.ExtentReports;
import com.aventstack.extentreports.ExtentTest;
import com.aventstack.extentreports.Status;

public class TC2 {
    static ExtentReports extent;
    static ExtentTest test;

    @BeforeClass
    public void setup(){
    extent = ExtentManager.GetExtent();
    }

    @Test
    public void OpenUT(){
        test = extent.createTest("Testing how pass works");
        test.log(Status.INFO, "pass check started");
        test.pass("Passed");
    }

    @AfterClass
    public void tear()
    {
        extent.flush();
    }
}

如果运行这两个测试用例,我只得到最后一个测试用例结果,对于第一个测试用例结果,它不会显示在范围报告中。请注意,范围报告 3.0 没有附加参数。如何在范围报告上获取所有测试用例结果?

仅显示最后一个测试用例结果,如何获取所有测试结果

4

4 回答 4

2

在上述方法中,您将在每个类中创建一个新的范围报告。这就是为什么您只能获得最新执行的测试结果。

您可以为 TC1 和 TC2 类创建一个公共超类。在超类中,您可以创建 @AfterClass 和 @BeforeClass 函数。然后它应该工作。

希望能帮助到你!

于 2017-01-16T11:52:34.793 回答
1

我有一种效果很好的方法,第一次检查是否已经创建了范围对象?如果是,则返回对象而不重新初始化范围对象,这是它的外观

在ExtentManager类下【如题所示】,添加这个代码块

public static ExtentReports getInstance() {
        if(extent == null) {
            GetExtent();
        }   
        return extent;
    }

现在在你的testNG测试下,在类注解之前,调用上面的方法

 @BeforeClass
    public void setup(){
        extent = ExtentManager.getInstance();
    }
于 2019-04-12T06:53:15.443 回答
0

在您的情况下, ExtentManager.GetExtent()此方法会覆盖先前创建的报告,因此只有最后一个测试结果显示在报告中。确保仅在整个测试开始期间调用此方法,最好的方法是通过实现 ITestListener

于 2020-10-29T11:23:34.010 回答
-1
Use this method extent.flush() in @aftersuite. because this statement generates the result

 {   
public class TC1 
{
    static ExtentReports extent;
    static ExtentTest test;

    @BeforeClass
    public void setup(){
        extent = ExtentManager.GetExtent();
    }

    @Test
    public void OpenUT(){
        test = extent.createTest("Testing how fail works");
        test.log(Status.INFO, "fail check started");
        test.fail("Test fail");
    }

    @Test
    public void OpenUT1(){
        test = extent.createTest("Testing how pass works");
        test.log(Status.INFO, "pass check started");
        test.pass("Passed");
    }

    @aftersuite
    public void tear()
    {
        extent.flush();
    }
}
于 2019-03-29T12:45:46.547 回答