Как охватить все тестовые случаи в отчете по экстентам?

У меня есть проблема в печати всех тестовых случаев в отчете степени. Я добавил два тестовых примера в файл тестового примера, но в отчете экстента отображается только последний тестовый пример. Ниже мой код. Я выполняю тестовые случаи, используя TestNG.

public class TC02_Login extends BaseClass {

    ExtentReports extent;
    ExtentTest logger;
    WebDriver driver;

    @BeforeMethod
    public void createReport() {
        ExtentHtmlReporter reporter = new ExtentHtmlReporter("./Reports/finalReport.html");
        extent = new ExtentReports();
        extent.attachReporter(reporter);
    }

    @Parameters({ "userName", "password" })
    @Test(priority = 1)
    public void login(String userName, String password) throws InterruptedException, IOException {

        logger = extent.createTest("Login Module");
        objSeleutils.click(objLogin.lbl_signin);
        objSeleutils.enterText(objLogin.txt_email, userName);
        objSeleutils.enterText(objLogin.txt_password, password);
        objSeleutils.click(objLogin.btn_signup);

        boolean txt_welcome = objSeleutils.existsElement(objLogin.ddl_welcome);
        Assert.assertEquals(txt_welcome, true);
    }

    @Test(priority = 2)
    public void dashboard() {

        logger = extent.createTest("Dashboard Verification.");
        boolean txt_welcome = objSeleutils.existsElement(objLogin.btn_findPet);
        Assert.assertEquals(txt_welcome, false);
    }

    @AfterMethod
    public void teardown(ITestResult results) throws IOException {
        if (results.getStatus() == ITestResult.FAILURE) {
            String path = System.getProperty("user.dir") + "/Screenshots/" + "Fail_" + System.currentTimeMillis()
                    + ".png";
            String temp = objSeleutils.tackScreenShot(path);
            logger.fail(results.getThrowable().getMessage(), MediaEntityBuilder.createScreenCaptureFromPath(temp).build());
            logger.log(Status.FAIL, "Test Case Failed.");
        }

        if (results.getStatus() == ITestResult.SUCCESS) {
            String path = System.getProperty("user.dir") + "/Screenshots/" + "Pass_" + System.currentTimeMillis()
                    + ".png";
            String temp = objSeleutils.tackScreenShot(path);
            logger.log(Status.PASS, "Test Case Passed.", MediaEntityBuilder.createScreenCaptureFromPath(temp).build());
        }
        extent.flush();
    }
}

Вот мой файл testNG, из которого я запускаю свой тестовый сценарий.

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">
<suite name="Web" verbose="2">

<parameter name="browserName" value="Chrome" />
<parameter name="projectURL" value="http://sitename.com" />
<parameter name="userName" value="ashishsavaliya@gmail.com" />
<parameter name="password" value="*********" />

<test name="Test">          
        <classes>
            <class name='testCase.TC02_Login' />
        </classes>
  </test>
</suite>

2 ответа

Решение

Это потому, что логика в вашем @BeforeMethod должна быть в @BeforeClass или @BeforeSuite, так как вы воссоздаете весь объект экстента с каждым новым тестом, как у вас сейчас.

Как вы определяете в BeforeMethod, он будет перезаписан Last @Test. Вы должны пройти некоторое дифференцирование, чтобы иметь оба отчета.

Например, вы можете использовать переменную Count

public class TC02_Login extends BaseClass {

        ExtentReports extent;
        ExtentTest logger;
        WebDriver driver;
        int count = 1;

        @BeforeMethod
        public void createReport() {
            ExtentHtmlReporter reporter = new ExtentHtmlReporter("./Reports/finalReport"+ count + ".html");
            extent = new ExtentReports();
            extent.attachReporter(reporter);
        }

    @AfterMethod
    public void teardown(ITestResult results) throws IOException {
    count++;
    }
}

Есть много способов сделать это. Один из способов, который вы можете использовать, - вызывать каждый отчет в каждом @Test с соответствующим именем теста.

Другие вопросы по тегам