Тестирую веб-сайт с использованием Selenium Webdriver (Firefox) и JUnit. В данный момент разные тест-кейсы работают с одним набором данных. Хочу разделить данные и реализацию, чтобы запускать одни и те же сценарии с разными данными.
Пока что данные инциализируются в @Before, но я могу выделить их хоть в XML, хоть в Properties. С этим затруднений нет.
В чем проблема: не представляю, как заставить юнит-тесты запускаться многократно, используя различные данные?
Я мог бы легко это сделать, отказавшись от использования JUnit. Просто вручную запускать методы и вручную же перебирать и скармливать им данные. Но это страшный велосипед и я не хочу терять преимуществ JUnit (таких, например, как автозапуск через Maven, красивое логирование, легкий запуск одного метода из тест-комплекта либо всего комплекта и т.д).
public class TestSuite {
/**
* Входные данные — строки и числа
* */
String searchString;
String firmID;
String geoID;
private DGDriver driver; //extends FirefoxDriver
@Before
public void setUp() throws Exception {
driver = new DGDriver();
driver.manage().timeouts().implicitlyWait(1000, TimeUnit.SECONDS);
/** Сейчас данные инициализируются так */
searchString = "главный вокзал";
firmID = "141265769369926";
geoID = "141373143526113";
}
@Test
public void testCase1 {
/* Тут вызываются методы, использующие данные.
Думаю, по именам понятно, как они их используют */
driver.homepage();
driver.searchFor(searchString);
driver.searchResults.clickItem(firmID);
driver.firmCard.clickAddress();
...
}
...
}
Ответ
Решил следующим образом:
В JUnit есть аннотации @Parametrized
/**
* Обязательна вот такая аннотация класса:
*/
@RunWith(Parameterized.class)
public class LeafletMarkerTests {
/**
* значение аннотации value указывает на номер параметра в массиве
*/
@Parameterized.Parameter(0)
public String searchString;
@Parameterized.Parameter(1)
public String firmID;
@Parameterized.Parameter(2)
public String geoID;
@Parameterized.Parameter(3)
public int expectedTransformX;
@Parameterized.Parameter(4)
public int expectedTransformY;
@Parameterized.Parameter(5)
public int expectedTransformZ;
Vector3d expectedCzarTransform;
// разные другие переменные
/**
* можно задать названия датасетов, чтобы было понятнее, на каком тест зафейлился
*/
@Parameterized.Parameters(name = "{index}: {0}")
public static Collection
Комментариев нет:
Отправить комментарий