Привет всем. Мне очень нравится TestNG как тест раннер, но бывают случаи когда чего-то не хватает или что-то кажтеся неудобным. Такие случаи я решил собрать в отдельную небольшую библиотеку и поделиться ею с окружающими. Она называется ExtendNG: GitHub - yaroslav-orel/ExtendNG: Convenient TestNG Listeners . Состоит она из набора лисенеров которые можно подключать к тестовым классам.
На данный момент ExtendNG содержит несколько лисенеров:
1. MethodInGroupsListener
Позволяет определять методы которые будут выполняться перед.после тестов помеченных отдельной группой. Удивительно, что у TestNG нет подобной фишки. Все что надо сделать это повесить лисенер над классом @Listeneres(MethodInGroupsListener .class) и объявить метод с аннотацией @BeforeMethodInGroups или @AfterMethodInGroups
Например:
@Listeners({MethodInGroupsListener.class})
public class MethodInGroupsExample {
@BeforeMethodInGroups(groups = "target")
public void before(){
System.out.println("Before test in target group");
}
@AfterMethodInGroups(groups = "target")
public void after(){
System.out.println("After test in target group");
}
@Test(groups = "target")
public void target1(){
System.out.println("target1");
}
@Test(groups = "target")
public void target2(){
System.out.println("target2");
}
@Test
public void nonTarget(){
System.out.println("nonTarget");
}
2. OrderByGroupsListener
Если вы хотите, чтобы тесты из разных групп запускались по соседству, для этого приходится очень много танцевать с бубном. OrderByGroupsListener делает это в одну строку. Если нужно определить порядок запуска групп, то это делается с помощью метода c аннотацией @GroupOrder, который возвращает String[] с названиями ваших групп в нужном порядке.
@GroupOrder
public String[] groupOrder(){
return new String[]{“first”, “second”, “third”};
}
OrderByDeclarationListener
Мы знаем что зависимости в тестах это не хорошо, но иногда это вынуженная необходимость. Вместо того чтобы расставлять dependsOnMethods, создавать xml с прописанным порядком или добавлять priority к каждому тесту, можно просто добавить над классом @Listeners(OrderByDeclarationListener.class) и тесты запустятся в том порядке в котором они задекларированы в классе.При этом если какой-то тест упал, то следующие все равно запустятся.
FastFailListener
По большому счету этот лисенер это добавка к предыдущему OrderByDeclarationListener которая останавливает тест класс, если какой-то промежуточный тест падает. Т.е. это прямой аналог dependsOnMethod без alwaysRun=true
Больше информации и реальных примеров можно найти на гитхабе в ридми GitHub - yaroslav-orel/ExtendNG: Convenient TestNG Listeners
Дисклеймер
Это мой первый публичный проект со всеми вытекающими. Я еще не до конца разобрался как правильно публиковать такие вещи. Пока что библиотека доступна только на jcenter. Если и кого-то есть знания и желание помочь, я бы хотел зарелизить ExtendNG в maven central, чтобы больше людей имело к ней доступ.
PS
Хотелось бы услышать ваше мнение: как вам существующий функционал, что бы вы хотели увидеть еще, есть ли желание присоединиться к разработке и облегчить труд автоматизаторов?