I have 3 '@Test' methods in three different classes that extends one base class.
Тест 1:
@Test(groups = "group1")
public void test1() {
System.out.println("Test1 value : " + var);
}
Тест 2:
@Test(groups = "group2",dependsOnGroups={"group1"})
public void test2() {
System.out.println("Test2 value : " + var);
}
Тест 3:
@Test
public void test3() {
System.out.println("Test3 value : " + var);
}
Базовый класс:
открытый класс TestBase {
public int var = 0;
@BeforeGroups(value = { "group1", "group2" })
void initialize() {
System.out.println("Before group");
var = 1;
}
}
Мне понадобится метод initialize()
чтобы выполнить выполнение до того, как "test1()" и "test2()". Значение переменной var
используется только в этих методах.
Ожидаемый результат:
Тест: перед группой
Значение Test1:1
Значение Test3: 0
Тест: перед группой
Значение Test2: 1
Но с приведенным выше кодом значение var в test2 также равно 0. Как исправить код для инициализации переменной для методов, относящихся к группам group1 и group2?
Во-первых, TestNG создает один экземпляр дочерними классами, где var
равно 0.
Затем он вызывает @BeforeGroups
только один раз на одном экземпляре, который он создал ранее.
Если TestNG работает должным образом, вы должны найти var=1
где-нибудь. Если вы хотите разделить значение по всему экземпляру, вы можете использовать static
var или, лучше, использовать тестовый контекст: http://testng.org/doc/documentation-main.html#native-dependency-injection и http://testng.org/javadocs/org/testng/ITestContext.html
Это то, что вы хотите:
package practise;
import org.testng.annotations.BeforeGroups;
import org.testng.annotations.Test;
class TestBase {
public int var = 0;
@BeforeGroups(value = { "group1", "group2" })
void initialize() {
System.out.println("Running Before group");
var = 1;
}
}
/**
* @author mrunal
*
*/
public class SO39910848 extends TestBase {
@Test(groups = "group1")
public void test1() {
System.out.println("Running test1 with value of var as: " + var);
}
@Test(groups = "group2",dependsOnGroups={"group1"})
public void test2() {
System.out.println("Running test2 with value of var as: " + var);
}
public void test3() {
}
}
Вывод:
Запуск до группы
Запуск test1 со значением var as: 1
Запуск до группы
Запуск test2 со значением var as: 1
PASSED: test1
PASSED: test2===============================================
Тест по умолчаниюПробеги: 2, Неудачи: 0, Пропуски: 0
===============================================
Набор по умолчанию
Всего прогонов тестов: 2, Ошибки: 0, Пропуски: 0
Ответ:
var
как public
глобальную переменную в вашем базовом классе.var
в @BeforeGroups
методе @BeforeGroups
.var
в подклассах.Но несколько вещей в вашем тестовом наборе настроены,
var
с разными значениями во время выполнения тестов. Если ответ на оба вопроса заключается в том, чтобы получить значение var
в нескольких тестах, вы можете подумать о возможности использования TestNG
для передачи параметров методам, аннотированным одной из аннотаций TestNG
.
Таким образом, ваш код будет выглядеть более чистым и скомпонованным. Вы можете посмотреть, как настроить параметры в TestNG?