java - 如何将 Extent 或 Junit 报告报告和集成到“For 循环”测试场景并添加断言报告 Pass 和 Fail
问题描述
我正在自动化电子商务网站。我正在使用 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 之间的价格不匹配。
解决方案
assertEquals()
如果您的 TestCase 类扩展了 junit 测试,或者您自己在代码中实现该方法,您只能期望工作。
无论如何,您似乎正在尝试使用ExtentReports
. 我对该库没有经验,但根据ExtentTest 的 javadoc,您似乎应该根据测试结果调用.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)
}
推荐阅读
- angular - firebase 在推送对象时静默失败
- python - matplotlib/seaborn 散点图,x 轴上带有日期时间对象,天数带有多个条目
- c# - 如何通知 ReSharper 本地函数的返回值为 NotNull / CanBeNull?
- swift - 有没有办法在 Swift 中从具有多种返回类型的函数列表中随机选择一个函数?
- python-3.x - 用于存储多个玩家的累积分数的数据类型
- angular - 尝试在组件的 ts 中初始化 MapboxGeocoder 时出现“MapboxGeocoder 不是构造函数”
- google-cloud-platform - 无法使用 google kms typescript/node 解密,得到 emtpy 结果
- java - Heroku 战争:部署 - java.util.concurrent.ExecutionException
- javascript - Javascript 箭头函数中的参数名称
- node.js - 如何为 Discord.js 制作图像搜索命令?