Есть ли способ дать зависимость от @BeforeMethod в @Test, потому что в моем сценарии разные TestMethod имеют разные настройки, и мне нужна одна настройка, зависит от TestMethod. Я добавляю здесь фрагмент кода для лучшего понимания
@BeforeMethod(groups = {"gp2"})
public void setUp1() {
System.out.println("SetUp 1 is done");
}
@BeforeMethod(groups = {"gp1"}, dependsOnGroups = {"tgp1"})
public void setUp2() {
System.out.println("SetUp 2 is done");
}
@Test(timeOut = 1, groups = {"tgp1"})
public void testMethod() throws InterruptedException {
Thread.sleep(2000);
System.out.println("TestMethod() From Group1");
}
@Test(dependsOnMethods = {"testMethod"}, groups = {"tgp2"})
public void anotherTestMethod() {
System.out.println("AnotherTestMethod()From Group1 and Group2");
}
Вывод
SetUp 1 выполняется SetUp 2
но мне нужно, чтобы setUp1() должен выполняться не setUp2(), потому что он зависит от группы tgp1.
Еще одна вещь, которую я наблюдаю, что, если я изменю зависимости от
@BeforeMethod(groups = {"gp1"}, dependsOnGroups = {"tgp1"})
в
@BeforeMethod(groups = {"gp1"}, dependsOnMethods = {"testMethod"})
тогда я получил исключение вроде
setUp2() is depending on method public void testMethod() throws java.lang.InterruptedException, which is not annotated with @Test or not included.
Мне нужно выполнить выполнение на этих шагах
SetUp1→ testMethod1() ---→ SetUp2-----→ testMethod2()
Мне нужно это, потому что разные TestMethods имеют другую работу, и у нее разные SetUp().
В вашем случае вы можете просто вызвать соответствующий метод setUp из соответствующего метода тестирования, поскольку у вас действительно нет общего @BeforeMethod
для каждого теста.
Или вы можете разделить эти два теста на разные классы тестов, каждый из которых имеет @BeforeMethod
.
Или вы можете выполнить вызов условной настройки на основе имени метода тестирования с помощью одного метода @BeforeMethod
как @BeforeMethod
ниже. Здесь @BeforeMethod
может объявить параметр типа java.lang.reflect.Method
. Этот параметр получит метод тестирования, который будет вызываться, как только этот @BeforeMethod заканчивается
@BeforeMethod
public void setUp(Method method) {
if (method.getName().equals("testMethod")) {
setUp1();
} else if (method.getName().equals("anotherTestMethod")) {
setUp2();
}
}
public void setUp2() {
System.out.println("SetUp 2 is done");
}
public void setUp1() {
System.out.println("SetUp 1 is done");
}
Цель метода @BeforeMethod
- запускать перед каждым тестовым методом, аннотированным с помощью @Test
и выполнять некоторую настройку. Поэтому несколько сбивает с толку, почему вы хотите создать зависимость, которая работает по-другому - выполнить тестовый метод перед настройкой. Обычный подход будет следующим:
@BeforeMethod
public void setUp() {
}
@Test
public void testMethod1() {
}
@Test
public void testMethod2() {
}
Скорее всего, создаст следующий список выполнения:
настроить()
testMethod1()
настроить()
testMethod2()
Если несколько @BeforeMethods
все они будут запущены до метода @Test
.
Теперь, если вы хотите запускать разные группы, вы должны аннотировать различные методы с разными группами и указывать, какие группы запускать. Однако для этого вам нужно будет предоставить либо testng.xml, либо указать, какие группы выполнить.
EDIT (на основе дополнительного комментария):
Я бы предложил один из следующих подходов:
@BeforeMethod
в каждом классе выполните требуемую настройку. Это особенно важно, если тесты охватывают разные области.Некоторые вещи, которые непонятны из вашего вопроса, но, если это уместно, могут извлечь пользу из предложенных подходов: