#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, мы можем его оттуда.