为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

料青山看我应如是 2022-06-08 17:34:41
注意:我无法粘贴确切的框架和代码,因为我工作的服务器无法从外部访问。因此,我将尝试用简单的语言和例子来解释我的问题。概述- 我创建了一个 Selenium 自动化框架,其中包括 TestNG、Maven (POM.XML)、测试数据文件、脚本和一些可重用的函数。我面临的问题- 我使用 Jenkins 来执行我的脚本。Jenkins 调用 POM.XML 文件,该文件又调用 testng.xml 文件(在 testng.xml 文件中,我提到了要执行的脚本)假设我必须执行登录操作主要脚本@TestPublic 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 UNdriver.findelement (By.id("username")).sendkeys(UN);//Sendkeys and set Passworddriver.findelement (By.id("password")).sendkeys(pass);//Click Logindriver.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 集成时意识到了这个问题(否则在那之前一切都很好)。
查看完整描述

2 回答

?
慕勒3428872

TA贡献1848条经验 获得超6个赞

为什么不在 catch 语句中添加断言失败,这样当它在 catch 语句中时,你会强制 testng 测试失败

org.testng.Assert.fail("我在这里失败是因为......你可以在这里添加你的电子邮件");

只需添加之前的代码行

return "fail";

并保持其余功能不变


查看完整回答
反对 回复 2022-06-08
?
慕慕森

TA贡献1856条经验 获得超17个赞

你可以通过使用断言来解决这个问题,所以只要你的条件不满足,断言就会失败,你的测试用例和詹金斯也会将构建的状态显示为“UNSTABLE”而不是“PASS”。

例如,在上面的示例中,不是在 try 中使用 try catch 和 if 条件,而是可以通过一行 assert 来解决,这也将为您提供所需的构建状态。

您可以将上面的代码替换为:
Assert.assertTrue(driver.findElement(By.id("welcomemessage")).isDisplayed(), "Element is not present on the page");

因此,在这种情况下,如果页面上未显示该元素,则断言将失败,因为它期望值为真,但会变为假,并且您的詹金斯构建状态将显示为不稳定。


查看完整回答
反对 回复 2022-06-08
  • 2 回答
  • 0 关注
  • 316 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信