如何解决如何将 Extent 或 Junit 报告报告和集成到“For 循环”测试场景并添加断言报告通过和失败
我正在自动化电子商务网站。我正在使用 JUNIT-Selenium 框架。 他们是我正在处理的两个文件,第一个是提到我的测试步骤的“TestCase.java”,为了启动自动化,我运行这个文件,第二个文件是“TestMain.java”,它具有将由 First 使用的验证方法文件以验证并在 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 类扩展了 junit 测试,或者您自己在代码中实现了该方法,那么您只能期望 assertEquals()
工作。
无论如何,您似乎都在尝试使用 ExtentReports
。我对该库没有经验,但根据 javadoc for ExtentTest,您似乎应该根据测试结果自己调用 .pass()
或 .fail()
。
在您的测试用例中,我相信您想尝试维护一个布尔值来跟踪测试是否通过。
第一步是修改 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)
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。