我正在使用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构建成功完成,即使测试失败。如何改变这个?
答案 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();}