如何更改关于测试结果的Jenkins输出?

时间:2015-09-19 11:04:18

标签: java selenium jenkins selenium-webdriver testng

我正在使用selenium webdriver 2.47.1& TestNG用于自动化过程。在我的代码中,我有12个不同的测试和在每次测试结束时,我使用if else循环检查测试是否通过。示例代码如下:

@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构建成功完成,即使测试失败。如何改变这个?

3 个答案:

答案 0 :(得分: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()。断言和记录器是你的朋友。

答案 1 :(得分:0)

正如我之前在评论中所说,你应该使用断言。那么你不需要为你的jenkins构建添加任何自定义配置,因为如果结果不正确,测试实际上会失败。

因此,您应该执行:

,而不是if-else块
assertEquals(ActTitle, ExpTitle);

虽然应该有一个替代,但如果你真的想使用你的if-else,那么testNG框架会提供一个fail()方法。我自己还没有使用它,但如果你改变你的if else块,它也应该失败jenkins构建:

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

我建议使用第一个提供的解决方案。

答案 2 :(得分: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();}