我正在测试类中使用软断言,并从数据提供者获取测试数据。下面是示例代码:
@Test(dataProvider = "userPages")
public void validatePages(String pageName) {
try {
Reporter.log("Logged In User : " + userType, true);
//Page1 takes extra checks
if (pageName.equalsIgnoreCase("Page1")) {
System.out.println("Running in Page1 bloc ");
softAssert.assertEquals(page.isValidPage1(), true,
"Failed to loada : " + pageName);
} else {
System.out.println("Running in NON Page1 bloc .. Page Name is :: "+pageName);
softAssert.assertEquals(page.isValid(), true,
"Failed to load : " + pageName);
}
softAssert.assertAll(); ---> Appends page1 failures to all the subsequent passed page tests thus marking all of them failed.
} catch (InterruptedException e) {
Reporter.log("Test failed for : " + pageName);
}
//
}
TestNG依赖项是::
<dependency>
<groupId>org.testng</groupId>
<artifactId>testng</artifactId>
<version>${testng.version}</version>
</dependency>
在我的情况下,如果单个页面失败,那么即使所有后续页面都通过了,也都标记为失败。我尝试调试该问题,发现在SoftAssert类的assertAll()方法中,以前失败的测试数据的错误消息将被追加]]
public void assertAll() { if (!m_errors.isEmpty()) { StringBuilder sb = new StringBuilder("The following asserts failed:"); boolean first = true; for (Map.Entry<AssertionError, IAssert<?>> ae : m_errors.entrySet()) { if (first) { first = false; } else { sb.append(","); } sb.append("\n\t"); sb.append(ae.getKey().getMessage()); } throw new AssertionError(sb.toString()); }}
此问题在testNG报告中标记为错误错误。请帮助和咨询。
编辑1:
数据提供者
真正的失败@DataProvider(name = "userPageNames") public Object[] creatingObjects() { Map<String, String> pagesList = null; try { pagesList = //Populate Map } catch (Exception e) { Reporter.log("Failed to get Pages List for " + userType, true); } Object[] object = new Object[pagesList.keySet().size()]; Integer i = 0; for (String pageName : pagesList.keySet()) { object[i] = pageName; i++; } return object; }
报告:
登录用户:user1在Page1 bloc中运行。已验证页面:第1页java.lang.AssertionError:以下断言失败:无法加载:预期第1页[true],但找到[false]预期:真实际的:false在org.testng.asserts.SoftAssert.assertAll(SoftAssert.java:43)在web.dishaPages.ValidatePagesTestNew.validatePages(ValidatePagesTestNew.java:88)在java.base / jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(本机方法)在java.base / jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)在java.base / jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)在java.base / java.lang.reflect.Method.invoke(Method.java:567)在org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:124)在org.testng.internal.MethodInvocationHelper $ 1.runTestMethod(MethodInvocationHelper.java:230)在org.springframework.test.context.testng.AbstractTestNGSpringContextTests.run(AbstractTestNGSpringContextTests.java:175)在org.testng.internal.MethodInvocationHelper.invokeHookable(MethodInvocationHelper.java:242)在org.testng.internal.Invoker.invokeMethod(Invoker.java:576)在org.testng.internal.Invoker.invokeTestMethod(Invoker.java:716)在org.testng.internal.Invoker.invokeTestMethods(Invoker.java:988)在org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:125)在org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:109)在org.testng.TestRunner.privateRun(TestRunner.java:648)在org.testng.TestRunner.run(TestRunner.java:505)在org.testng.SuiteRunner.runTest(SuiteRunner.java:455)在org.testng.SuiteRunner.runSequentially(SuiteRunner.java:450)在org.testng.SuiteRunner.privateRun(SuiteRunner.java:415)在org.testng.SuiteRunner.run(SuiteRunner.java:364)在org.testng.SuiteRunnerWorker.runSuite(SuiteRunnerWorker.java:52)在org.testng.SuiteRunnerWorker.run(SuiteRunnerWorker.java:84)在org.testng.TestNG.runSuitesSequentially(TestNG.java:1208)在org.testng.TestNG.runSuitesLocally(TestNG.java:1137)在org.testng.TestNG.runSuites(TestNG.java:1049)在org.testng.TestNG.run(TestNG.java:1017)在org.testng.IDEARemoteTestNG.run(IDEARemoteTestNG.java:73)在org.testng.RemoteTestNGStarter.main(RemoteTestNGStarter.java:123)虚假失败报告:
登录用户:user1在NON Page1 bloc中运行。页面名称为:: ViewDMPage已验证页面:ViewDMPagejava.lang.AssertionError:以下断言失败:无法加载:预期第1页[true],但找到[false]预期:真实际的:false在org.testng.asserts.SoftAssert.assertAll(SoftAssert.java:43)在web.dishaPages.ValidatePagesTestNew.validatePages(ValidatePagesTestNew.java:88)在java.base / jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(本机方法)在java.base / jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)在java.base / jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)在java.base / java.lang.reflect.Method.invoke(Method.java:567)在org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:124)在org.testng.internal.MethodInvocationHelper $ 1.runTestMethod(MethodInvocationHelper.java:230)在org.springframework.test.context.testng.AbstractTestNGSpringContextTests.run(AbstractTestNGSpringContextTests.java:175)在org.testng.internal.MethodInvocationHelper.invokeHookable(MethodInvocationHelper.java:242)在org.testng.internal.Invoker.invokeMethod(Invoker.java:576)在org.testng.internal.Invoker.invokeTestMethod(Invoker.java:716)在org.testng.internal.Invoker.invokeTestMethods(Invoker.java:988)在org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:125)在org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:109)在org.testng.TestRunner.privateRun(TestRunner.java:648)在org.testng.TestRunner.run(TestRunner.java:505)在org.testng.SuiteRunner.runTest(SuiteRunner.java:455)在org.testng.SuiteRunner.runSequentially(SuiteRunner.java:450)在org.testng.SuiteRunner.privateRun(SuiteRunner.java:415)在org.testng.SuiteRunner.run(SuiteRunner.java:364)在org.testng.SuiteRunnerWorker.runSuite(SuiteRunnerWorker.java:52)在org.testng.SuiteRunnerWorker.run(SuiteRunnerWorker.java:84)在org.testng.TestNG.runSuitesSequentially(TestNG.java:1208)在org.testng.TestNG.runSuitesLocally(TestNG.java:1137)在org.testng.TestNG.runSuites(TestNG.java:1049)在org.testng.TestNG.run(TestNG.java:1017)在org.testng.IDEARemoteTestNG.run(IDEARemoteTestNG.java:73)在org.testng.RemoteTestNGStarter.main(RemoteTestNGStarter.java:123)
我正在测试类中使用软断言,并从数据提供者获取测试数据。下面是示例代码:@Test(dataProvider =“ userPages”)public void validatePages(String pageName){试试{...
问题出在您的测试代码中。