Как добавить группировку и зависимость в @BeforeMethod On TestNG

1

Есть ли способ дать зависимость от @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().

Теги:
unit-testing
selenium-webdriver
testng

2 ответа

0
Лучший ответ

В вашем случае вы можете просто вызвать соответствующий метод 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");
}    
  • 0
    спасибо за вашу помощь, я уже делаю это, чтобы избежать этой ситуации ---- :) но мой вопрос не состоит в том, чтобы избежать таким образом, я использую @BeforeMethod и делаю то, что я хочу, потому что согласно документации инфраструктуры TestNG это обеспечивает этот метод Вы можете помочь мне понять правильную причину этого ...... еще раз спасибо за вашу помощь.
  • 1
    Обновлен ответ с параметром метода. Надеюсь это поможет
Показать ещё 1 комментарий
0

Цель метода @BeforeMethod - запускать перед каждым тестовым методом, аннотированным с помощью @Test и выполнять некоторую настройку. Поэтому несколько сбивает с толку, почему вы хотите создать зависимость, которая работает по-другому - выполнить тестовый метод перед настройкой. Обычный подход будет следующим:

@BeforeMethod
public void setUp() {
}

@Test
public void testMethod1() {
}

@Test
public void testMethod2() {
}

Скорее всего, создаст следующий список выполнения:

настроить()
testMethod1()
настроить()
testMethod2()

Если несколько @BeforeMethods все они будут запущены до метода @Test.

Теперь, если вы хотите запускать разные группы, вы должны аннотировать различные методы с разными группами и указывать, какие группы запускать. Однако для этого вам нужно будет предоставить либо testng.xml, либо указать, какие группы выполнить.


EDIT (на основе дополнительного комментария):

Я бы предложил один из следующих подходов:

  1. Разделите методы тестирования на разные классы и @BeforeMethod в каждом классе выполните требуемую настройку. Это особенно важно, если тесты охватывают разные области.
  2. Определите разные группы и поместите соответствующие методы тестирования и настройки в одну группу. Этот параметр позволяет смешивать и сопоставлять методы настройки с помощью метода тестирования.

Некоторые вещи, которые непонятны из вашего вопроса, но, если это уместно, могут извлечь пользу из предложенных подходов:

  • Есть ли необходимость в зависимости?
  • Означает ли заказ или тесты?
  • 0
    спасибо за вашу помощь ........ Я очень ценю ваши комментарии и советы, на самом деле мне это нужно, потому что разные TestMethods работают по-разному и имеют разные SetUp () Мне нужно SetUp1 () ------ testMethod () -------- SETUP2 () --------- testMethod2 () ....

Ещё вопросы

Сообщество Overcoder
Наверх
Меню