亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

即使由于腳本中的錯誤處理導致測試失敗,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 關注
  • 436 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號