繁体   English   中英

如何更改有关测试结果的詹金斯输出?

[英]How to change Jenkins output regarding to Test result?

我正在使用硒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构建也已成功完成。 如何改变呢?

我认为您正在寻找的东西可以通过这种方式处理。 使用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() 断言和记录器是您的朋友。

正如我在前面的评论中所述,您应该使用断言。 然后,您无需在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

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

我已经使用了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();}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM