Тестирование с помощью TestNG в Java
Хочу вас познакомить еще с одним инструментом для тестирования, в этой небольшой статье мы рассмотрим основные возможности TestNG .
TestNG – это фреймворк для тестирования, написанный на Java, он взял много чего с JUnit и NUnit, но он не только унаследовался от существующей функциональности Junit, а также внедрил новые инновационные функции, которые делают его мощным, простым в использовании.
TestNG предназначен для:
• интеграционного тестирование и т.д.
Какие возможности в TestNG?1) Annotations. (Аннотации);
2) Использование XML для гибкого конфигурирования тестов;
3) Поддержка data-driven тестирования (с помощью аннотации @DataProvider);
4) Зависимые методы для тестирования серверных приложений;
5) Поддерживается в Eclipse, IDEA, Ant, Maven, Netbean, Hudson;
6) Тестирование вашего кода проходит многопоточно, что дает безопасность и быстродействие;
7) Легкий переход от JUnit.
Содержание урока Шаг 1. НачалоДавайте напишем первый наш тест используя TestNG.
Для этого я буду использовать среду разработки Intellij IDEA 12.
Создаем Maven проект и добавляем зависимости:
После этого создадим класс Calc.java и тестовый класс CalcTest.java для него.
Содержимое класса Calc.java:
Содержимое класса CalcTest.java:
7-я строка – это экземпляр класса который мы будем тестировать.
9-я строка – эта аннотация говорти о том что данный метод есть тестовым и может запускаться в отдельном потоке.
Шаг 2. Первый тестДавайте напишем тест на метод в классе Calc.java:
У нас есть класс, в котором есть метод, который находил сумму двух чисел. Для него мы написали тест, где проверили, что сумма числа 2 и 3 должна быть равна 5-ти.
С помощью класса Assert библиотеки TestNG мы проверяем на правильность работы метода.
Шаг 3. Запуск тестовТеперь запускаем написанный тест.
После выполнения теста вы увидите следующий результат:
Мы видим, что тест удачно прошел!
После удачного прохождения тестов формируется специальный xml файл, с его помощью мы можем прогонять тесты повторно, используя консоль cmd.
Файл находится по этом пути: C:\Users\<account>\.IntelliJIdea12\system\temp-testng-customsuite.xml, у меня он со следующим содержимым:
Запустить тесты можно через консоль используя файл temp-testng-customsuite.xml, для этого войдите в cmd и введите команду:
Внимание! Тестовый класс, в нашем случае ClacTest.java, должен быть скомпилирован.
Шаг 4. Аннотации TestNGTestNG является более гибким благодаря своим аннотациям. Что они нам предоставляют?
Значит существует 10 управляемых аннотаций TestNG:
1. @BeforeSuite – указывает, что данный метод будет запускаться перед любым методом тестового класса.
2. @BeforeGroups – аннотирует методы, которые будут выполняться перед первым методом в любой из указанных групп.
3. @BeforeClass – указывает, что метод будет выполнен до всех тестовых методов тестового класса.
4. @BeforeTest – аннотированный метод будет запускаться до всех тестовых методов.
5. @AfterTest – аннотированный метод будет запущен после всех тестовых методов, принадлежащих классам внутри тега <test>.
6. @BeforeMethod – аннотированный метод будет выполняться перед каждым тестовым методом.
7. @AfterMethod – аннотированный метод будет запускаться после каждого тестового метода.
8. @AfterClass – аннотированный метод будет запущен после всех тестовых методов в текущем классе.
9. @AfterGroups – аннотируется методы, которые будут выполняться после всех методом в любом из указанных групп.
10. @AfterSuite – указывает, что данный метод, будет запускаться после всех методов тестового класса.
Вот, что у нас должно получится:
И вот результат:
Шаг 5. ИсключенияОтловить ожидаемую ошибку можно с помощью аннотации @Test через параметр expectedExceptions:
где expectedExceptions – ожидаемое исключение(ошибка).
В этом случае тест пройдет успешно, так как мы ожидаем, что данный тест выбросит нам NullPointerException.
Шаг 6. Игнорирование тестовых методовИногда требуется проигнорировать тестовый метод, если вам например в очередном тестировании не требуется выполнять данный тестируемый метод.
Для того, чтобы проигнорировать тестовый метод, вам достаточно указать в аннотации @ Test параметре enabled = false.
Шаг 7. TimeoutЕсли вам потребуется ограничить время проведения теста для определенного тестового метода, то вам на помощь приходит параметр timeOut аннотации @Test.
в данном случаем тестовый метод будет завален, так как лимит времени для его выполнения превышает заданный.
В 6-й строке мы заставляем поток заснуть на 1001 миллисекунду.
Шаг 8. Групповое тестированиеЕсли вам нужно прогнать тесты группами, например, чтобы тестовые методы выполнялись по очереди группами.
Для этого мы можем использовать атрибут groups в аннотации @Test.
Следующий пример имеет 4 тестовых метода, каждый из них входит в группу интеграции, методы testingMethod1, testingMethod3 testingFMethod4 входят в группу Unit1. testingMethod2 входит в группу unit2.
После того, как мы написали тесты и разделили их по группам, давайте научимся их запускать.
Для этого нажимаем правой кнопкой мыши по названию тестового класса:
После, в появившимся окне делаем следующие действия познанные цифрами:
После этого жмем Run и в результате выполнения вы увидите, что выполнился только 2 тестовых метод, которые относятся к группе unit2:
Шаг 9. Зависимые тестыДопустим, есть тестовый класс, в котором есть 2 тестовых метода, где один зависит от другого, то есть первый не пройдет успешно, пока не отработает второй. Давайте рассмотрим, как это сделать.
Сделать это можно с помощью параметра dependsOnMethods аннотации @Test:
Как видите, тестовый метод testmethod() зависит от тестового метода initEnvironmentTest() и будет выполнен только после того, как отработает initEnvironmentTest() метод.