问题描述
当我从测试类运行所有测试用例时,我只得到一个测试用例结果,其他两个没有显示在范围报告中。如何在一份报告中获取所有测试用例结果?
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;
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();
}