ExtentReport 如何在一个报告中显示来自测试类的所有测试用例?

问题描述

当我从测试类运行所有测试用例时,我只得到一个测试用例结果,其他两个没有显示在范围报告中。如何在一份报告中获取所有测试用例结果?

import com.aventstack.extentreports.ExtentReports;
import com.aventstack.extentreports.reporter.ExtentHtmlReporter;
import org.junit.jupiter.api.*;
import org.openqa.selenium.WebDriver;
import pl.me.automation.config.WebDriverType;
import pl.me.automation.page.ContactPage;
import pl.me.automation.page.HomePage;
import pl.me.automation.utils.TestDataReader;
import static org.junit.jupiter.api.Assertions.assertTrue;

我有一个测试类 ContactPageTest:

public class ContactPageTest extends TestDataReader {
    private WebDriver webDriver;
    private HomePage homePage;
    private ExtentHtmlReporter reporter;
    private ExtentReports reports;

@BeforeEach 和 @AfterEach 函数是否可能是我只获得最新执行的测试结果的原因? 我尝试为所有测试用例创建基类 @BeforeMethod@AfterMethod @BeforeTest 和@AfterTest,但也没有用。

 @BeforeEach
    public void init() {
        webDriver = WebDriverType.CHROME.create();
        webDriver.get("https://www.store.com");
        homePage = new HomePage(webDriver);
        homePage.clickCookie();
        reporter = new ExtentHtmlReporter("src//main//resources//reports//index.html");
        reports = new ExtentReports();
        reports.attachReporter(reporter);

    }

    @AfterEach
    public void destroy() {
        webDriver.close();
        reporter.flush();
        reports.flush();
    }

我想在一个报告中显示三个测试用例:

    @Test
    public void shouldFillInAndSendForm() {
        reports.createTest("ContactPageTest - Fill in and send form");
        ContactPage contactPage = homePage.clickContact();
        contactPage.enterUserName(contact.getContactPageEnterUserName());
        contactPage.enterUserLastName(contact.getContactPageEnterUserLastName());
        contactPage.selectMessageSubject(contact.getContactPageSelectMessageSubject());
        contactPage.enterEmailAddress(contact.getContactPageEnterEmailAddress());
        contactPage.enterMessage(contact.getContactPageSelectMessageSubject());
        contactPage.clickSendMessageButton();
        assertTrue(contactPage.isContactMessagedisplayed());
    }

    @Test
    public void shouldSendEmptyForm() {
        reports.createTest("ContactPageTest - Send Empty Form");
        ContactPage contactPage = homePage.clickContact();
        contactPage.clickSendMessageButton();
        assertTrue(contactPage.isEmailValidationErrordisplayed());
        assertTrue(contactPage.isNameValidationError());
        assertTrue(contactPage.isMessageValidationError());
    }

    @Test
    public void shouldSendFormWithIncorrectEmail() {
        reports.createTest("ContactPageTest - Send Form With Incorrect Email");
        ContactPage contactPage = homePage.clickContact();
        contactPage.enterUserName(contact.getContactPageEnterUserName());
        contactPage.enterUserLastName(contact.getContactPageEnterUserLastName());
        contactPage.selectMessageSubject(contact.getContactPageSelectMessageSubject());
        contactPage.enterEmailAddress(contact.getContactPageEnterIncorrectEmailAddress());
        contactPage.enterMessage(contact.getContactPageEnterMessage());
        contactPage.clickSendMessageButton();
        assertTrue(contactPage.isEmailValidationErrordisplayed());
    }

}

解决方法

我就是这样解决这个问题的。我添加了@TestInstance(Lifecycle.PER_CLASS)

@TestInstance(Lifecycle.PER_CLASS)
public class ContactPageTest extends Forms {
    private WebDriver webDriver;
    private HomePage homePage;
    private ExtentHtmlReporter reporter;
    private ExtentReports reports;

比@BeforeAll、@BeforeEach、@AfterEach、@AfterAll 注释

   @BeforeEach
    public void init() {
        webDriver = WebDriverType.CHROME.create();
        webDriver.get("https://www.store.com");
        homePage = new HomePage(webDriver);
        homePage.clickCookie();

    }

    @BeforeAll
    public void TearUpReporter(){
        reporter = new ExtentHtmlReporter("src//main//resources//reports//index.html");
        reports = new ExtentReports();
        reports.attachReporter(reporter);
    }

    @AfterEach
    public void destroy() {
        webDriver.quit();
    }

    @AfterAll
    public void tearDownReporter(){
        reporter.flush();
        reports.flush();
    }