即使由于脚本中的错误处理导致测试失败,Jenkins 也会显示“构建成功”

注意:我无法粘贴确切的框架和代码,因为我工作的服务器无法从外部访问。因此,我将尝试用简单的语言和例子来解释我的问题。


概述- 我创建了一个 Selenium 自动化框架,其中包括 TestNG、Maven (POM.XML)、测试数据文件、脚本和一些可重用的函数。


我面临的问题- 我使用 Jenkins 来执行我的脚本。Jenkins 调用 POM.XML 文件,该文件又调用 testng.xml 文件(在 testng.xml 文件中,我提到了要执行的脚本)


假设我必须执行登录操作


主要脚本


@Test

Public void maintest ()

{


//I use Extent reports for reporting purpose and hence I have created extent 

 //reporting reusable function which is called in the below fashion.


//If Login method returns pass, ExtentReportingFunc passes Pass to its 

 //function and displays Pass for that particular Login step in the report.


ExtentReportingFunc (Login(UserName, Password));

}

可重用函数


Public String Login (String UN, String Pass)

{

//Sendkeys and set UN

driver.findelement (By.id("username")).sendkeys(UN);


//Sendkeys and set Password

driver.findelement (By.id("password")).sendkeys(pass);


//Click Login

driver.findelement (By.id("login")).click ();


//Verifying the message "Welcome User" is displayed after login

   try 

   {

      if (driver.findlement (By.id("welcomemessage")).isdisplayed ();

      {

        return pass;

      }

   } catch (Exception e)



在这里,挑战是 - 在 catch 块中,如果我没有提到“throw e”,Jenkins 将不会理解失败已经发生并在其控制台输出中显示“BUILD PASSED”。我希望它在 Jenkins 控制台中显示“BUILD FAILURE”。我希望它显示“BUILD FAILED”的原因是 - 我已将 JIRA 与 Jenkins 集成。只有当 jenkins 显示 BUILD FAILED 时,它才会自动将错误记录到 JIRA。如果它是“BUILD PASSED”并且虽然完成状态是 UNSTABLE,Jenkins 的测试结果部分不会显示任何失败,它也会在 JIRA 中记录任何错误。


但是,那时我将无法将返回“失败”传递给主报告功能,以便它可以在报告中将登录步骤显示为失败。


我了解,根据 JAVA,我们可以在 catch 块中抛出或返回,但不能两者兼而有之。我们还有其他方法可以使这项工作吗?


我已经创建了端到端框架,但后来当我开始与 Jenkins 集成时意识到了这个问题(否则在那之前一切都很好)。


料青山看我应如是
浏览 317回答 2
2回答

慕勒3428872

为什么不在 catch 语句中添加断言失败,这样当它在 catch 语句中时,你会强制 testng 测试失败org.testng.Assert.fail("我在这里失败是因为......你可以在这里添加你的电子邮件");只需添加之前的代码行return "fail";并保持其余功能不变

慕慕森

你可以通过使用断言来解决这个问题,所以只要你的条件不满足,断言就会失败,你的测试用例和詹金斯也会将构建的状态显示为“UNSTABLE”而不是“PASS”。例如,在上面的示例中,不是在 try 中使用 try catch 和 if 条件,而是可以通过一行 assert 来解决,这也将为您提供所需的构建状态。您可以将上面的代码替换为:Assert.assertTrue(driver.findElement(By.id("welcomemessage")).isDisplayed(), "Element is not present on the page");因此,在这种情况下,如果页面上未显示该元素,则断言将失败,因为它期望值为真,但会变为假,并且您的詹金斯构建状态将显示为不稳定。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java