【问题标题】:How to capture all test cases in extent report?如何在范围报告中捕获所有测试用例?
【发布时间】:2019-03-07 14:44:04
【问题描述】:

我在打印范围报告中的所有测试用例时遇到问题。我在测试用例文件中添加了两个测试用例,但只有最后一个测试用例显示在范围报告中。下面是我的代码。我正在使用 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>

【问题讨论】:

    标签: java selenium testng extentreports


    【解决方案1】:

    正如您在 BeforeMethod 中定义的那样,它将被 Last @Test 覆盖。您需要通过一些差异来获得这两个报告。

    like,你可以使用 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 中使用相关的测试名称调用每个报告。

    【讨论】:

      【解决方案2】:

      这是因为 @BeforeMethod 中的逻辑应该在 @BeforeClass 或 @BeforeSuite 中,因为您现在使用每个新测试重新创建整个范围对象。

      【讨论】:

      • 每次执行测试用例时,我都会在打开浏览器时打开@BeforeSuite 方法。那么根据您的要求,我的代码是什么?如果你在这里写信或通过 ashishsavaliya56@gmail.com 给我发电子邮件会很好。
      • 如果您打算在所有测试中使用相同的浏览器实例,通常您确实希望在 @BeforeSuite 中创建浏览器,但这也是您应该实例化您的范围报告对象的地方,因为所有您的测试也将转到一个报告输出文件。只需将您当前在 @BeforeMethod 中的三行代码移动到您的 @BeforeSuite,您的测试应该可以正常运行并报告,而无需进行任何其他更改。
      • 是的,现在更正它的工作。我已经在@BeforeSuite 方法中设置了我的报告代码,现在它工作正常。所有测试用例都显示在报告中。谢谢。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-03-06
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多