Могу ли я создать новый набор в @Factory в TestNG?

#testng

#testng

Вопрос:

У меня есть класс с аннотациями TestNG, который запускает функциональные тесты на веб-сайте, сначала я определяю класс браузера — simple POJO:

 class Browser {
   private String browserName;
   private String browserVersion;
   private String platform;

...getters and setters and constructor...
}
  

и теперь сам аннотированный класс TestNG:

 class BrowserTest {

public BrowserTest(Browser b) {
    ...
    create browser session, etc. (uses Selenium Grid underneath)
    ...
}

@Test
public void login() {
    ...test login...
}

@Test
public void logout() {
    ...test logout...
}

@Factory
public Object[] create() throws Exception {

    List<Object> testList = new ArrayList<Object>();
    Browser[] browsers = {
        new Browser("google-chrome", "", ""),
        new Browser("firefox", "", ""),
        new Browser("internet-explorer", "9", ""),
    };

    //Create new instance of this class for each browser

    for (Browser b: browsers) {
        testList.add(new BrowserTest(b));
    }

    return testList.toArray();

    }
}
  

метод @Factory, описанный выше, работает хорошо, и я создаю несколько экземпляров классов BrowserTest, каждый из которых инициализируется другим браузером, и TestNG будет запускаться в том же наборе, который содержал первый экземпляр BrowserTest .

Я хотел бы знать, возможно ли создать новый набор для каждого нового экземпляра класса или еще лучше, если TestNG предоставляет механизм верхнего уровня для управления объектами на уровне набора (afaik метод @Factory работает только на уровне класса) — чтобы я мог программно создавать новые экземпляры набора каждый раз.из них инициализированы для использования другого браузера.

Ответ №1:

@Factory работает только на уровне тестирования, поэтому ответ на ваш вопрос — нет.

Однако вы можете создавать новые наборы с помощью XML API TestNG, который работает на более высоком уровне, создавая версии вашего testng.xml досье. Найдите XmlSuite классы , XmlTest , и т.д. … . Если вы пойдете по этому пути, вам, вероятно, больше не понадобится a @Factory вообще, поскольку вы можете создавать экземпляры тестовых классов напрямую, а затем включать их в <test> тег, созданный с помощью XmlTest.

Надеюсь, это поможет.

Комментарии:

1. Спасибо, Седрик. Я также пытался изменить набор через интерфейс ISuite, переданный слушателю ISuiteListener, но безрезультатно. С нетерпением ждем, если вы решите включить некоторые функции в TestNG для итерации набора с рядом параметров в testng.xml Сам XML-файл.

2. Правильно, ожидается, что объекты, передаваемые слушателям, будут доступны только для чтения, хотя некоторые изменения в них работают. Не стесняйтесь отправлять свое предложение по электронной почте пользователям testng, мы можем его оттуда.