Я пытаюсь создать тестовый дизайн, используя Selenium и TestNG , я помещаю каждый @ Test в отдельный класс и использую один раз @ BeforeSuite & @ AfterSuite для всех классов, причина:
- Код прост в обслуживании
- Управляемый данными, чтобы иметь возможность выбрать, какие классы запускать через файл
xml
.
Тогда я думаю, что я могу войти в систему только один раз, и сеанс может использоваться всеми последующими тестами, что Я сделал так:
База класс:
public class Base {
protected static WebDriver driver;
@BeforeSuite
public void setup() {
System.setProperty("webdriver.chrome.driver", "/Users/.../chromedriver");
driver = new ChromeDriver();
}
@AfterSuite
public void tearDown() {
driver.quit();
}
}
LoginApps класс:
public class LoginApps extends Base{
@Test(groups= {"logintest"})
@Parameters({"data"})
public void loginApps(String data) {
driver.get("https://TheUrl.com/");
//some code here
}
}
Case1 класс:
public class Case1 extends Base{
@Test(dependsOnGroups= {"logintest"})
@Parameters({"data"})
public void case1(String data) {
driver.get("https://TheUrl.com/");
//some code here
}
}
Примечание : приведенный выше код прекрасно работает, если он запускается с одним <test>
в комплекте.
Проблема в том, что он работает параллельно, как в следующей конфигурации xml
.
testng. xml:
<suite name="SuiteTest" parallel="tests" thread-count="2">
<test name="Test1">
<parameter name="data" value="data1"></parameter>
<classes>
<class name="com.main.LoginApps"/>
<class name="com.main.Case1"/>
.....
More class
</classes>
</test>
<test name="Test2">
<parameter name="data" value="data2"></parameter>
<classes>
<class name="com.main.LoginApps"/>
<class name="com.main.Case1"/>
.....
More class
</classes>
</test>
</suite>
Код выполняется путем создания driver
экземпляра только один раз, и оба <test>
работают с перекрытием в одном сеансе. Я думаю, что это из-за способа, которым я объявляю driver
как static
в Base классе. Но если я удаляю static
, это усугубит ситуацию, все равно создавая экземпляр driver
только один раз, и код запускает только первый @Test
(в данном случае только LoginApps ) все последующие тесты получат исключение NullPointerException
.
Я использую TestNG v7.0.0 с Maven :
<dependency>
<groupId>org.testng</groupId>
<artifactId>testng</artifactId>
<version>7.0.0</version>
<scope>compile</scope>
</dependency>
Чтобы запустить проект, который я представил параллельно, как я могу это исправить?