[英]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.