我有一个使用testNG的测试类,有4种测试方法,测试一个网站用于4种不同的浏览器,如下面的代码:
public class MyTest {
@Test
public void acceptanceFFTest()
{
}
@Test
public void acceptanceChromeTest()
{
}
@Test
public void acceptanceIETest()
{
}
@Test
public void acceptanceSafariTest()
{
}
@AfterMethod
public void tearDown()
{
webDriver.quit();
}
}
一个测试方法完成后,该浏览器的webdriver将在@AfterMethod中被杀死,下一个浏览器将分别以新的webdriver启动,依此类推。
我的问题是:如果我逐个运行这些测试方法,那么它们总是被传递。但是,如果我从测试类级别作为带有4个测试方法的测试套件运行,那么有时其中一个或两个会因NoElementException而失败,但异常并不总是在一个页面或一个元素,有时在这里,有时在那里。如果我再次单独运行失败的测试,那么它们就会通过。
我认为对于测试类级别,也许http信号有时很快,有时很慢,测试类级别不稳定作为单一测试方法,我不确定。
无论如何要稳定它们?谢谢。
答案 0 :(得分:1)
我会重写测试,以便您在所有浏览器上运行一个测试。您可能在浏览器中遇到一些细微差别,但我认为这种整体方法更好,更易于管理。这是一个如何做到这一点的简单示例。对于这个例子,我只是硬编码了一个字符串browserType
。我假设你会传递它或从文件或其他任何东西读取它。基本的想法是,您将driver
变量定义为通用WebDriver
。确定运行所需的浏览器后,实例化特定驱动程序并执行测试。
String browserType = "firefox"; // hardcoded for the example
WebDriver driver;
switch (browserType)
{
case "firefox":
driver = new FirefoxDriver();
break;
case "ie":
driver = new InternetExplorerDriver();
break;
case "chrome":
driver = new ChromeDriver();
break;
default:
throw new Exception("browserType: " + browserType + " not defined.");
}
// do test case
driver.get("http://www.google.com");
// ... and so on