2015-09-19 42 views
0

我正在使用selenium webdriver 2.47.1 & TestNG for automation process。在我的代碼中,我有12個不同的測試&在每個測試結束時,我檢查了測試是否通過使用if else循環。示例代碼如下。如何更改關於測試結果的Jenkins輸出?

@Test(priority = 0) 
public void Login() { 
    String UserName = ex.getExcelValue(scenarioName, 2, 4); 
    cd.findElement(By.xpath("//body/center/form/table/tbody/tr/td/div/div[2]/table/tbody/tr[1]/td[2]/input")).sendKeys(UserName); 
    String PassWord = ex.getExcelValue(scenarioName, 3, 4); 
    cd.findElement(By.xpath("//body/center/form/table/tbody/tr/td/div/div[2]/table/tbody/tr[2]/td[2]/input")).sendKeys(PassWord); 
    cd.findElement(By.xpath("//body/center/form/table/tbody/tr/td/div/div[2]/table/tbody/tr[3]/td[2]/input")).click(); 
    cd.manage().timeouts().implicitlyWait(15, TimeUnit.SECONDS); 
    String ExpTitle = "Demo Practice"; 
    String ActTitle = cd.getTitle(); 
    if(ExpTitle.equals(ActTitle)) { 
     ex.setExcelValue(scenarioName, 2, 8, "PASSED"); 
     System.out.println("PASSED : User Logged in Successfully"); 
    } else { 
     ex.setExcelValue(scenarioName, 2, 8, "FAILED"); 
     System.out.println("FAILED : User Not Logged in"); 
    } 
} 

我正在使用Jenkins進行持續集成。現在,當我運行上述腳本時,Jenkins構建成功完成,即使測試失敗。如何改變這一點?

+1

如果別人爲什麼要設置通過/失敗?你爲什麼不使用斷言? – Reins

+0

我認爲'testng'斷言在這裏工作得更好。這樣你就不必擔心你的Jenkins顯式設置。斷言會使測試失敗。 – Segmented

+0

你認爲使用斷言解決我的問題..? – Karthik

回答

1

我覺得你要找的東西可以這樣處理。使用testng斷言進行測試。這樣你的持續集成環境可以顯示你的測試失敗。

@Test 
public void Login() { 
    String UserName = ex.getExcelValue(scenarioName, 2, 4); 
    cd.findElement(By.xpath("//body/center/form/table/tbody/tr/td/div/div[2]/table/tbody/tr[1]/td[2]/input")).sendKeys(UserName); 
    String PassWord = ex.getExcelValue(scenarioName, 3, 4); 
    cd.findElement(By.xpath("//body/center/form/table/tbody/tr/td/div/div[2]/table/tbody/tr[2]/td[2]/input")).sendKeys(PassWord); 
    cd.findElement(By.xpath("//body/center/form/table/tbody/tr/td/div/div[2]/table/tbody/tr[3]/td[2]/input")).click(); 
    cd.manage().timeouts().implicitlyWait(15, TimeUnit.SECONDS); 
    String ExpTitle = "Demo Practice"; 
    String ActTitle = cd.getTitle(); 
    ex.setExcelValue(scenarioName, 2, 8, "FAILED"); 
    assertEquals(ActTitle, ExpTitle, "Expected: "+ExpTitle+" but found: "+ActTitle); 
    ex.setExcelValue(scenarioName, 2, 8, "PASSED"); 

} 

幾件事情,我想我會避免:

  • 在測試中使用的priority。使他們依賴,你將無法使方法並行運行
  • 避免System.out.println()。斷言和記錄器是你的朋友在這裏。
+0

您的assertEquals應該是另一種方式,正如testNG文檔所述:'assertEquals(java.lang.String actual,java.lang.String expected)'。老實說,這很令人困惑,因爲JUnit有另一種方式。 – Reins

+0

@Reins True!我犯了一個愚蠢的錯誤。感謝您指出。修復。 – Segmented

+0

'String TesteNote1 = cd.findElement(By.xpath(「// table/tbody/tr [2]/td [5]」))。getText(); \t StringBuffer object1 = new StringBuffer(TesteNote1); \t String ActeNote1 = object1.substring(108); \t String ExpeNote1 = ex.getExcelValue(scenarioName,75,4); \t ex.setExcelValue(scenarioName,75,8,「FAILED」); \t assertEquals(ActeNote1,ExpeNote1,「Expected:」+ ExpeNote1 +「but found:」+ ActeNote1); \t ex.setExcelValue(scenarioName,75,8,「PASSED」);'上述測試的結果是FAIL。每當我在腳本上面運行時,它的結果就是PASS ..上面代碼中的錯誤是什麼? – Karthik

0

正如我在前面的評論中所說的,你應該使用斷言。那麼你不應該有任何自定義配置添加到你的jenkins構建中,因爲如果結果不正確,測試實際上會失敗。

所以不是的if-else語句塊,你應該做的:

assertEquals(ActTitle, ExpTitle); 

雖然應該有一個替代,如果你真的想使用你的if-else,TestNG的框架提供了一個失敗() 方法。我沒有用它自己,但如果你改變你的if else塊,它也應該失敗詹金斯建設:

if(ExpTitle.equals(ActTitle)) { 
     ex.setExcelValue(scenarioName, 2, 8, "PASSED"); 
     System.out.println("PASSED : User Logged in Successfully"); 
    } else { 
     ex.setExcelValue(scenarioName, 2, 8, "FAILED"); 
     fail("FAILED : User Not Logged in"); 
    } 
} 

更多關於TestNG的斷言信息:http://testng.org/javadoc/org/testng/Assert.html

我會建議與去首個提供的解決方案。

+0

失敗()方法不起作用...在我的情況下,12個測試中有一個測試失敗,但jenkins結果顯示所有12個測試都通過了。 – Karthik

+0

您好我使用Assertions Assert.assertEquals(Expected,Actual);'。測試失敗並且執行在那裏停止。我想在測試失敗後繼續執行......如何做到這一點> – Karthik

+0

@Karthik如果這還不遲,回覆。 「斷言」被設計爲當它們失敗時停止執行測試。也許你可以調整你的邏輯。 – Segmented

0

我用try/finally塊像下面......它解決了我的問題

try { 
     Assert.assertEquals(ExpeNote1, ActeNote1); 
     ex.setExcelValue(scenarioName, 75, 8, "PASSED"); 
    } 
    catch(Exception e) { 
     ex.setExcelValue(scenarioName, 75, 8, "FAILED"); 
    }finally{ 
     cd.switchTo().defaultContent();} 
+1

我很高興你找到了解決方案。在catch塊內編碼不是一個好習慣。它會導致生產中不必要的問題。例如,如果在代碼中拋出異常,則只需簡單地使測試用例失敗,而無需查看拋出異常的原因。只是一個建議;) – Segmented

相關問題