Параметризация метода @BeforeMethod в TestNG

У меня есть базовый тестовый класс для моих тестов, который выполняет инициализацию перед каждым тестом.

Вот код

public class BaseTestParameters {

  MyObj myObj;

  @DataProvider(name = "apiType")   
  public static Object[][] createData() {

     return new Object[][] {{"type", "1"},{"type","2"}};   
  } 

  @BeforeMethod()   
  @Factory(dataProvider = "apiType")   
  public void setup(String type,String param) throws Exception {

     myObj = createMyObject(param);

  }
}

Все мои тестовые классы расширяют этот базовый класс и используют myObj для тестов.

myObj имеет два разных способа создания (в зависимости от параметра). Все тесты будут выполняться дважды. Один с каждым способом создания myObj.

Как включить этот сценарий? Использование аннотации @Factory означает, что мне нужно вернуть Object[] из этого метода, но мне не нужно возвращать какие-либо тестовые классы из этого метода.


person lostintranslation    schedule 22.03.2019    source источник


Ответы (1)


Вы можете использовать аннотацию @Parameters, но вы должны указать значения в testng,xml, это означает, что вам нужно иметь отдельный testng.xml для каждого набора параметров.

Вот пример:

AppTest.java

public class AppTest {
    @Parameters({"par1", "par2"})
    @BeforeMethod()
    public void setUp(String a, String b) {
        System.out.println("a = [" + a + "], b = [" + b + "]");
    }

    @Test
    public void testApp() {
    }
}

testng.xml

<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" >
<suite name="Suite1" verbose="1" >

    <test name="Run1" >
        <parameter name="par1"  value="val"/>
        <parameter name="par2"  value="anotherval"/>
        <packages>
            <package name="dummy.java" />
        </packages>
    </test>

    <test name="Run2" >
        <parameter name="par1"  value="newValue"/>
        <parameter name="par2"  value="yetAnotherVal"/>
        <packages>
            <package name="dummy.java" />
        </packages>
    </test>
</suite>
person talex    schedule 22.03.2019
comment
Это просто заменит значения par1 и par2 в функции настройки. Мне нужно, чтобы testApp запускался один раз с par1 и один раз с par2. Какой-то перебор параметров при запуске тестов. - person lostintranslation; 22.03.2019
comment
@lostintranslation Я обновил свой ответ. Теперь он дважды запускает тест с разными значениями. - person talex; 22.03.2019
comment
Получение этой ошибки - параметр 'par1' требуется для '@Configuration' при настройке метода, но не был отмечен '@Optional' или определен. par2 перезаписывает par1 при инициализации testng. - person lostintranslation; 22.03.2019
comment
Добавление двух ‹test› кажется излишним для такого простого случая использования. Перейдем на джунит. Testng - не лучший выбор для таких случаев. - person lostintranslation; 22.03.2019
comment
Как вы проводите свой тест? Похоже, вы не использовали testng.xml. - person talex; 22.03.2019
comment
Да, JUnit лучше поддержите ваш случай. - person talex; 22.03.2019
comment
Нет. Я использую intellij для запуска своего тестового примера. Мне нужно попробовать эти параметры только для одного тестового примера. Запуск через xml запустит все тестовые примеры, которые мне не нужны. - person lostintranslation; 22.03.2019