Java + Selenium + TestNg + Gradle
Добрый день, запускаю тесты в TeamCity в 2 потока, при выводе результатов они определяются в неправильный package/suite. В build log так же творится вакханалия, вижу как идет тест1, а названия у него от теста2.
Вот так выглядит testng.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">
<suite name="MySuiteName">
<test name="MyTest" parallel="classes" thread-count="2">
<classes>
<class name="ru.company.tests.operator.Operator_Other_Checks" />
<class name="ru.company.tests.operator.Operator_Call_Back" />
</test>
</suite>
Например тест Operator_Call_Back.main001 при последовательном запуске попадает в директорию
MySuiteName: MyTest: ru.company.tests.operator,
при параллельном запуске попадает в директорию с названием
MySuiteName: MyTest: ru.company.tests.operator.Operator_Call_Back: ru.company.tests.operator
Вот так выглядит базовый класс от которого унаследованы все тесты, никаких статиков в нем нет.
public class TestNgGroup implements IInvokedMethodListener{
private WebDriver active_driver;
private int pull_size = 1;
private HashMap<Integer,WebDriver> drivers_pull = new HashMap<>();
private String methodName = "";
private String className = "";
private static final ThreadLocal<MySoftAssert> softAssert = new ThreadLocal<>();
public TestNgGroup() {
}
@Override
public void beforeInvocation(final IInvokedMethod method, final ITestResult testResult) {
}
@Override
public void afterInvocation(final IInvokedMethod method, final ITestResult testResult) {
if (method.isTestMethod()) {
try {
getAssert().assertAll();
} catch (AssertionError e) {
if (testResult.getStatus() == ITestResult.FAILURE) {
e.printStackTrace();
}else {
testResult.getTestContext().getPassedTests().removeResult(testResult.getMethod());
testResult.setStatus(TestResult.FAILURE);
testResult.setThrowable(e);
}
}
softAssert.remove();
}
}
@BeforeClass (alwaysRun = true)
public void setUpMainClass() {
System.out.println("BeforeClass");
for (int i=0; i < pull_size; i++) {
WebDriver drv = SDK.init_driver_chrome(screen_x, screen_y);
System.out.println("Браузер " + (i+1) + " из " +pull_size + " запущен");
drivers_pull.put(i, drv);
}
active_driver = drivers_pull.get(0); //выбирает первый активный драйвер, нужно если нет вначале setActiveDriver
}
@BeforeMethod (alwaysRun = true)
public void setUpMainMethod(ITestContext result, Method method) {
System.out.println("BeforeMethod");
methodName = method.getName();
className = this.getClass().getName();
if (softAssert.get() == null) {
softAssert.set(new MySoftAssert(active_driver, className, methodName));
}
}
@AfterMethod (alwaysRun = true)
public void finishMainMethod(ITestResult testResult) {
System.out.println("AfterMethod");
System.out.println("Finished url - " + active_driver.getCurrentUrl());
if (testResult.getStatus() == ITestResult.FAILURE) {
SDK.TakeScreenshot(active_driver, className, methodName);
}
}
@AfterClass(alwaysRun = true)
public void finishMainClass() {
System.out.println("AfterClass");
Collection<WebDriver> obj = drivers_pull.values();
for (WebDriver drv : obj) {
try {
drv.quit();
System.out.println("quite driver");
}catch (NullPointerException e){
System.out.println("NullPointerException quite driver");
}
}
}
public void setActiveDriver(int i){
active_driver = drivers_pull.get(i);
if (softAssert.get() == null){
softAssert.set(new MySoftAssert(active_driver, className, methodName));
}else {
softAssert.get().init(active_driver, className, methodName);
}
}
public WebDriver getDriver(){
return active_driver;
}
public String getClassName() {
return className;
}
public String getMethodName() {
return methodName;
}
public MySoftAssert getAssert() {
return softAssert.get();
}
public void setPull_size(int pull_size1) {
pull_size = pull_size1;
}
public void restart_driver(int drivercode){
WebDriver drv = drivers_pull.get(drivercode);
drv.quit();
drv = SDK.init_driver_chrome(screen_x, screen_y);
drivers_pull.replace(drivercode, drv);
System.out.println("Браузер " + (drivercode+1) + " перезапущен");
}
Так же иногда тесты в TeamCity отображаются, как запущенный два раза и в отчет могут не попасть.
Что нужно сделать чтобы тесты перестали путаться? уже всю голову сломал.