【问题标题】:How to report and integrate Extent or Junit report to "For loop" test scenarios and add assertion report Pass and Fail如何将 Extent 或 Junit 报告报告和集成到“For 循环”测试场景并添加断言报告 Pass 和 Fail
【发布时间】:2021-04-17 01:56:30
【问题描述】:

我正在自动化电子商务网站。我正在使用 JUNIT-Selenium 框架。 它们是我正在使用的两个文件,第一个是“TestCase.java”,其中提到了我的测试步骤,为了启动自动化,我运行这个文件,第二个文件是“TestMain.java”,它具有首先使用的验证方法文件以在 UI 中验证和输入数据(主要使用 If ..else 验证)。

第一个文件由自动化启动代码组成,它使用 Hashmap 读取 excel、范围报告启动和刷新,并使用 testMain.java 中的方法输入数据并通过 if...else 语句进行验证。

TestCase.java 看起来像这样:

public class TestCase extends AppTest {

private StringBuffer verificationErrors = new StringBuffer();

@Override
@Before
public void setUp() throws Exception {
    super.setUp();
    preparation = new Prep();
    application = new AppToTest();
    user = new Environment();
}

@Test
public void testLAP_Creamix() throws Exception {
    try {
        launchMainApplication();

        Test_frMain Test_frMainPage = new Test_frMain(tool, test, user, application);

        HashMap<String, ArrayList<String>> win = CreamixWindowsDataset.main();
        SortedSet<String> keys = new TreeSet<>(win.keySet());
        ExtentHtmlReporter htmlReporter = new ExtentHtmlReporter("Test_Report.html");
        ExtentReports extent = new ExtentReports();
        extent.attachReporter(htmlReporter);

        ExtentTest test1 = extent.createTest("Creamix test");

        for (String i : keys) {
            System.out.println("########### Test = " + win.get(i).get(0) + " ###########");
            Lapeyre_frMainPage.EnterTaille(win.get(i).get(1));
            Lapeyre_frMainPage.SelectCONFIGURATION(win.get(i).get(2));
            Lapeyre_frMainPage.SelectPLANVASQUE(win.get(i).get(3));
            Lapeyre_frMainPage.SelectCOULEUR(win.get(i).get(4));
            Lapeyre_frMainPage.SelectPOIGNEES(win.get(i).get(5));
            Lapeyre_frMainPage.SelectTYPE_DE_MEUBLE(win.get(i).get(6));
            Lapeyre_frMainPage.SelectCHOISISSEZ(win.get(i).get(7));

            Lapeyre_frMainPage.VerifyREFERENCE(win.get(i).get(8));(FROM HERE Validation Starts)
            Lapeyre_frMainPage.VerifyQUANTITY(win.get(i).get(9));
            Lapeyre_frMainPage.VerifyREFERENCETwo(win.get(i).get(10));
            Lapeyre_frMainPage.VerifyQUANTITYTwo(win.get(i).get(11));
            Lapeyre_frMainPage.VerifyREFERENCEThree(win.get(i).get(12));
            Lapeyre_frMainPage.VerifyQUANTITYThree(win.get(i).get(13));
            Lapeyre_frMainPage.VerifyREFERENCEFour(win.get(i).get(14));
            Lapeyre_frMainPage.VerifyQUANTITYFour(win.get(i).get(15));
            Lapeyre_frMainPage.VerifyREFERENCEFive(win.get(i).get(16));
            Lapeyre_frMainPage.VerifyQUANTITYFive(win.get(i).get(17));
            Lapeyre_frMainPage.VerifyREFERENCESix(win.get(i).get(18));
            Lapeyre_frMainPage.VerifyQUANTITYSix(win.get(i).get(19));
            Lapeyre_frMainPage.VerifyREFERENCESeven(win.get(i).get(20));
            Lapeyre_frMainPage.VerifyQUANTITYSeven(win.get(i).get(21));
            Lapeyre_frMainPage.VerifyPanierPrice(win.get(i).get(22));
            Lapeyre_frMainPage.VerifyECO_PARTPrice(win.get(i).get(23));

            Lapeyre_frMainPage.ClickCREAMIXReinit();(Reset button to test next scenario)

            test1.pass("Scenario " + win.get(i).get(0) + " is passed");
            System.out.println("########### Test End ##############");
            extent.flush();----------(Extent report over)

        }

        test.setResult("pass");
    } catch (AlreadyRunException e) {
    } catch (Exception e) {
        verificationErrors.append(e.getMessage());
        throw e;
    }

}

@Override
@After
public void tearDown() throws Exception {
    super.tearDown();
}

}

(请注意,一个循环是我自定义和验证产品价格然后单击重置按钮到下一个场景进行相同操作的场景)

还有,

“TestMain.java”从我使用方法验证的地方

其中一种方法如下所示

public void VerifyREFERENCE(String REF_1) throws Exception {
    System.out.println("Verifying reference article");
    if (REF_1.equals("SKIP")) {
        System.out.println("SKIPPED");
    } else {
        WebElement referenceOne = tool.searchUsingXPath("//tbody//tr[1]//td//div[2]");
        String Ref1 = referenceOne.getText().trim();
        System.out.println("ref 1 is " + Ref1);
        if (Ref1.equals("Ref. de l'article : " + REF_1)) {
            System.out.println("Reference 1 is correct");
        } else {
            System.out.println("Reference 1 is incorrect");
        }
    }
}

我在 TestCase.java 中使用范围报告(请检查上面的代码)来报告我的场景,但问题是它将所有测试用例显示为 PASS,如果发生任何故障,它不会报告(它终止)。

原因是我没有在任何地方使用断言,但是我如何在这个框架中应用这样的断言

总结:

1- 我需要在报告中添加价格验证检查 2- 我尝试在 TestCase.java "assertEquals("Verify REFERENCE 1", win.get(i).get(8), Lapeyre_frMainPage.GetREFERENCE());" 中使用这一行,但我不能在 TestCase.java 中使用断言(它不允许我)。 3- 请告诉我报告此类框架通过和失败的替代方法,在报告范围内我可以显示 excel 和 UI 之间的价格不匹配。

【问题讨论】:

  • 您的 TestCase 扩展了 AppTestAppTest 是什么?
  • AppTest 包括其他方法和 webdriver 启动
  • 我每次都从我的 verifyREFERENCE 方法中得到返回为“真”,但现在我现在可以失败测试用例,需要知道为什么我的方法返回为真吗?
  • 也许它总是返回 true 因为你的测试用例通过了?你有失败的测试数据吗?此外,如果您的评论与该答案相关,您可能应该针对答案而不是原始问题发表评论。

标签: java selenium junit reporting build-automation


【解决方案1】:

如果您的 TestCase 类扩展了 junit 测试,或者您自己在代码中实现该方法,您只能期望 assertEquals() 工作。

无论如何,您似乎都在尝试使用ExtentReports。我对那个库没有经验,但根据javadoc for ExtentTest,根据您的测试结果,您似乎应该自己致电.pass().fail()

在您的 TestCase 中,我相信您想尝试维护一个布尔值来跟踪测试是否通过。

第一步是修改VerifyREFERENCE() 以返回一个布尔值,指示它是通过还是失败,而不是无效。

public boolean VerifyREFERENCE(String REF_1) throws Exception {
    System.out.println("Verifying reference article");
    if (REF_1.equals("SKIP")) {
        System.out.println("SKIPPED");
    } else {
        WebElement referenceOne = tool.searchUsingXPath("//tbody//tr[1]//td//div[2]");
        String Ref1 = referenceOne.getText().trim();
        System.out.println("ref 1 is " + Ref1);
        if (Ref1.equals("Ref. de l'article : " + REF_1)) {
            System.out.println("Reference 1 is correct");
            return true;
        } else {
            System.out.println("Reference 1 is incorrect");
            return false;
        }
    }
}

然后,在您的 TestCase 中,在循环之前将布尔值初始化为 true。在循环内部,对每个 VerifyREFERENCE() 调用的返回值执行逻辑与 (&&)。最后,在循环结束后,测试布尔值,并酌情通过或失败 ExtentTest:

ExtentTest test1 = extent.createTest("Creamix test");
boolean passed = true;

for (String i : keys) {
    System.out.println("########### Test = " + win.get(i).get(0) + " ###########");
    Lapeyre_frMainPage.EnterTaille(win.get(i).get(1));
    ....
    Lapeyre_frMainPage.SelectCHOISISSEZ(win.get(i).get(7));

    passed = passed && Lapeyre_frMainPage.VerifyREFERENCE(win.get(i).get(8));(FROM HERE Validation Starts)
    passed = passed && Lapeyre_frMainPage.VerifyQUANTITY(win.get(i).get(9));
    ...
    passed = passed && Lapeyre_frMainPage.VerifyECO_PARTPrice(win.get(i).get(23));

    Lapeyre_frMainPage.ClickCREAMIXReinit();(Reset button to test next scenario)

    if(passed) {
       test1.pass("Scenario " + win.get(i).get(0) + " is passed");
    } else {
       test1.fail("Scenario " + win.get(i).get(0) + " is failed");
    }
    System.out.println("########### Test End ##############");
    extent.flush();----------(Extent report over)
}

【讨论】:

  • 对不起之前的评论,让我总结一下,实际上我可以在 jenkins 中看到我的控制台显示我的方法显示参考不匹配,但即使返回 false 为什么我的测试步骤不能“Lapeyre_frMainPage. VerifyREFERENCE(win.get(i).get(8))" 不认为它是假的????
  • 请注意,在我的测试用例中,我的测试步骤失败了,我想在范围报告中表明,由于参考号与 Excel 中的参考号不匹配,因此该测试用例失败了,在 public 的帮助下boolean VerifyREFERENCE(String REF_1) 方法。
  • 很奇怪,希望我理解正确。我可以提出的一个建议是只关注其中一项检查,然后删除或注释掉其余的检查,直到您从单个检查 win.get(i).get(8) 获得预期的行为。在您的 TestCase 循环中,在调用 VerifyREFERENCE() 之后,执行 System.out.println("VerifyREFERENCE 8 is " + passed);。这在控制台中显示了什么值?
  • 还是一样,Extent 报告显示测试用例已通过。而日志显示我验证参考文章 ref 1 是 Ref。 de l'article : 1241998 参考1不正确###########测试结束##############
猜你喜欢
  • 2017-05-02
  • 1970-01-01
  • 2014-09-26
  • 2023-03-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多