ExtentReport как показать все тестовые кассы из тестового класса в одном рапорте?

#java #selenium #extentreports #selenium-extent-report

#java #селен #extentreports #selenium-extent-report

Вопрос:

Когда я запускаю все тестовые примеры из тестового класса, я получаю только один результат тестового набора, а два других не отображаются в отчете об экстенте. Как я могу получить все результаты тестового примера в одном отчете?

 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());
    }

}

 

Ответ №1:

Вот как я решил эту проблему. Я добавил @testInstance(жизненный цикл.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();
    }