在我的下面的代码中 - 报告总是将testcase显示为Pass,虽然我在BeforeMethod上的测试用例失败了。请帮我解决这个问题
public class practice extends Test_CommonLib {
WebDriver driver;
ExtentReports logger;
String Browser="FireFox";
@BeforeMethod
public void setUp() throws Exception{
logger=eno_TestResport(this.getClass().getName(),Browser);
logger.startTest(this.getClass().getSimpleName());
Assert.assertTrue(false); //intentionally failing my BeforeMethod
}
@Test
public void CreateObject() throws Exception{
System.out.println("Test");
}
@AfterMethod(alwaysRun=true)
public void tearDown(ITestResult result) throws Exception{
if (ITestResult.FAILURE==result.getStatus()) {
logger.log(LogStatus.FAIL, "Test case failed");
}else if(ITestResult.SKIP==result.getStatus()){
logger.log(LogStatus.SKIP, "Test case skipped");
}else {
logger.log(LogStatus.PASS, "Aweosme Job");
}
}
}
答案 0 :(得分:0)
嗯,你所观察到的是正确的。当Assertion失败时,其余代码不会被执行。你的情况也是如此。无论你的断言是否通过/失败,驱动程序都不再执行该方法中的任何代码。直接来自@BeforeMethod Annotation并转移到@Test Annotation下的方法。
此外,您的报告将始终将Testcase显示为“Pass”,因为@Test Annotation中的Testcase将成功执行。
@AnandKakhandaki您需要在此页面后遵循TestNG的某些指导原则 - https://www.tutorialspoint.com/testng/testng_basic_annotations.htm
值得一提的是,BeforeMethod
Annotation中的代码段将在执行任何方法之前每次执行。同样适用于BeforeSuite
,BeforeClass
,BeforeTest
& BeforeGroups
。同样,AfterMethod
注释中的代码段将在执行任何方法后每次执行。同样适用于AfterSuite
,AfterClass
,AfterTest
& AfterGroups
。这些提到的注释中的代码应该用于在实际测试执行开始/结束之前和之后配置被测试的应用程序系统。这些注释可能包括用于选择测试执行的浏览器,使用某些属性打开/关闭浏览器,打开URL,切换到其他URL,关闭URL等的代码,这些是执行测试执行的强制配置。
验证/验证或断言绝不应成为这些注释的一部分。相反,断言应该在Test
注释范围内。确切地说,断言也应该在Test
注释之外,在一个单独的库中。因此,Test
注释中的代码仅包含测试步骤。
如果这回答了你的问题,请告诉我。
答案 1 :(得分:0)