我正在尝试使用TestNg并行运行测试。我有3个类(两个扩展了BaseTest类的测试类)
BaseTest类只有“设置”和“拆卸”,没有其他东西。
当我尝试像这样并行运行测试时,一个带有测试的类运行,而另一个类只打开一个浏览器(但不执行测试)
但是当我从BaseTest类中剪切代码并将其直接放到我的每个测试类中(因此不扩展BaseTClass)时,代码工作,测试并行运行
为什么?我根本没有做任何代码更改。。。当我希望不并行地运行测试时(只是一个接一个),那么使用扩展BaseTest类就可以了
在测试中。xml试图将parallel=“methods”“tests”“true”。。。
下面是我的课程和测试。xml
public class BaseTest {
public static WebDriver driver;
public static WebDriverWait wait;
@BeforeClass
public static void setup() {
System.setProperty("webdriver.gecko.driver", System.getProperty("user.dir") + "\\src\\files\\geckodriver.exe");
driver = new FirefoxDriver();
wait = new WebDriverWait(driver, 10);
driver.manage().window().maximize();
}
@AfterClass
public static void teardown() {
driver.quit();
}
}
-----------------------
public class HomePageHotelsSearchTest extends BaseTest {
@Test
public void giveNameProperly() throws IOException {
HomePage homePage = new HomePage(driver, wait);
homePage.openUrl("https://www.phptravels.net/");
homePage.openHotelsSearchTab();
homePage.inputCityInHotelsSearch("London");
homePage.selectCityFromSearchResult(0);
homePage.inputCheckInDateInHotelsSearch("23/08/2018");
homePage.inputCheckOutDateInHotelsSearch("27/08/2018");
homePage.openPeopleAmountTabInHotelsSearch();
homePage.addAdultsInHotelsSearch(1);
homePage.startSearchingHotels();
homePage.elementClickable(By.linkText("Grand Plaza Apartments"));
String firstResult = homePage.readText(By.linkText("Grand Plaza Apartments"));
Assert.assertEquals("Grand Plaza Apartments", firstResult);
//Reporter.log("Test owned!", true);
}
}
-----------------------
public class LoginTest extends BaseTest {
@Test
public void loginTest() throws InterruptedException, IOException {
HomePage homePage = new HomePage(driver, wait);
homePage.openUrl("https://www.phptravels.net/");
LoginPage loginPage = homePage.goToLoginPage();
loginPage.waitForPageToLoad("Login");
loginPage.inputEmail("user@phptravels.com");
loginPage.inputPassword("demouser");
loginPage.login();
loginPage.waitForPageToLoad("My Account");
String myAccountPageTitle = driver.getTitle();
Assert.assertEquals(myAccountPageTitle, "My Account");
//Reporter.log("Test owned!", true);
}
}
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE suite SYSTEM "http://beust.com/testng/testng-1.0.dtd" >
<suite name="Suite" thread-count="2" parallel="true">
<test name="test1">
<classes>
<class name="tests.LoginTest" />
<class name="tests.HomePageHotelsSearchTest"/>
</classes>
</test>
</suite>
感谢所有快速回复,它现在工作:-)
基本上现在BaseTest类只有启动/创建webdriver对象和启动浏览器会话的方法。后来的测试类有自己的webdriver实例,并使用这些方法来启动它们
必须在要调用以执行的每个类中定义TestNG注释。不能在BaseTest中定义@BeforeClass@AfterClass注释。你可以称之为BaseTest方法。请使用以下示例参考您的代码:
public class BaseTest {
public WebDriver driver;
public WebDriverWait wait;
public void setup() {
....
}
public void teardown() {
driver.quit();
}
}
public class HomePageHotelsSearchTest extends BaseTest {
@BeforeClass
public void startTest(){
setup();
}
@Test
public void giveNameProperly() {
...
}
@AfterClass
public void stopTest(){
teardown();
}
}
您可以不使用对象直接调用BaseTest方法,因为您已经扩展了BaseTest类。
public class HomePageHotelsSearchTest {
BaseTest testObj = new BaseTest();
@BeforeClass
public void startTest(){
testObj.setup();
}
@Test
public void giveNameProperly() {
...
}
@AfterClass
public void stopTest(){
testObj.teardown();
}
}
如果不扩展BaseTest类,则需要调用这些方法来引用对象。
因此,在每个类中都必须有@BeforeClass和@AfterClass注释,所以TestNG将在@Test execution之前调用它。
我试图用TestNG并行运行一个示例测试项目。但它是在一个线程中顺序执行的。我漏掉什么了吗? 谢了。
我正在尝试运行配置套件文件的并行测试。测试是针对使用Selenium的web应用程序。套件文件由多个测试组成。每个测试都包含多个测试类。每个测试中的第一个类用于初始化(@beforetest)WebDriver并关闭它(@aftertest)。WebDriver是静态的,以便将其传递给其他类(原因是我们需要从最后一个测试类结束的地方继续测试)。 当套件配置为按顺序运行测试时,测试将成功运行。但是当
我试图使用testng并行运行测试,但我的配置有一些问题。 我有一个包含许多类文件的项目,每个类文件包含许多测试。 我目前正在使用parallel='methods'标志运行测试,以最大化在给定时间运行的测试数量。 我的目标是避免同一类的测试同时运行,同时最大化并行测试的数量。 因此,给定一个示例xml文件: 给定40个可用线程,我希望在任何给定时间运行40个测试。 我使用了一个方法拦截器来随机化
我有一个testNG方法,如下所示: 我的数据提供程序返回10个元素。我的方法将在一个线程中执行10次。这怎么可能平行?举个例子 我想有5个并行的方法。网络驱动程序应该同时打开5个浏览器。在这5个测试并行后,应执行其他5个测试 或 webdriver应该打开10个浏览器,并并行执行所有10个元素 有人有主意吗?
我一个类有5到6个方法,想在不同的节点上并行运行方法,我有网格2设置,里面有4个节点。 下面是我的测试。xml 我有一个测试工具,它初始化了login、common和utils类 在我的测试类中,我扩展了测试工具,在@Beforemethod中,我调用了inilze方法 如果我运行测试,我会看到以下问题 两个浏览器在每个节点中打开一个,但只有一个浏览器启动应用程序,另一个不启动。 如果我遗漏了什么
我已经使用selenium创建了测试用例,之前我可以使用maven(从命令行和eclipse)执行我的测试用例。但是现在它不起作用了。请帮助 请在下面找到控制台日志:(运行为- 我没有得到任何错误,它成功地构建了一个项目。但是跳过所有测试用例 请找到我的pom。xml配置如下: 请找到E2E。xml如下: