Как стать автором
Обновить

Тестирование в Java. TestNG

Время на прочтение 16 мин
Количество просмотров 227K
Java *TDD *
Туториал

Наверняка все знакомы с таким понятием как test-driven development(TDD). Наряду с ним также существует такое понятие, как data-driven testing(DDT, не в обиду Шевчуку) — техника написания тестов, при которой данные для тестов хранятся отдельно от самих тестов. Они могут храниться в базе данных, файле, генерироваться во время исполнения теста. Это очень удобно, так как один и тот же функционал тестируется на различных наборах данных, при этом добавление, удаление или изменение этих данных максимально упрощено.

В предыдущей статье я рассмотрел возможности JUnit-а. Там примерами такого рода подхода могут служить запускалки Parameterized и Theories, в обоих случаях один тест-класс может содержать только один такой параметризированный тест(в случае Parameterized несколько, но все они будут использовать одни и те же данные).

В этой статье я заострю внимание на тестовом фреймворке TestNG. Многие уже слышали это название, и перейдя на него, вряд ли желают вернуться к JUnit-у(хотя это только предположение).
Читать дальше →
Всего голосов 24: ↑23 и ↓1 +22
Комментарии 22

PowerMock(+Mockito) +TestNG и имитация вызова (mock) статических методов

Время на прочтение 5 мин
Количество просмотров 15K
Тестирование IT-систем *Java *
Туториал
Recovery mode
На хабре уже была статья с примерами использования PowerMock, но в ней не хватает такого описания, как имитации вызова статических методов как самостоятельных «единиц» в классе, так и в гибридном использовании, когда часть статических методов у класса подменяются «заглушкой», а часть вызываются реально. Попробую исправить эту нишу.

Для начала создадим демонстрационный класс со статическими методами (commit):

public class ClassStatic {
	static String getValue() {
		return "value";
	}

	static String getValue(final String s) {
		return getValue() + s;
	}
}

Читать дальше →
Всего голосов 12: ↑10 и ↓2 +8
Комментарии 4

Извлекаем пользу из Selenium и Jenkins CI

Время на прочтение 5 мин
Количество просмотров 34K
Тестирование IT-систем *Java *
image
И так, предположим абстрактную ситуацию: у вас есть набор тестов написанный с помощью Selenium WebDriver. Он постоянно пополняется, обрастает новыми деталями и вам уже действительно невмоготу разбираться в логах, кучах XML, смотреть и думать, что полетело и почему. Чуточку ниже я попытаюсь дать ряд простых советов, для стабилизации своих Selenium тестов, а так же, расскажу о способах подружить Selenium с Jenkins CI и последствиях данной дружбы. Для тех, кто заинтересовался — прошу под кат.
Читать дальше →
Всего голосов 6: ↑6 и ↓0 +6
Комментарии 15

Общий API для JUnit и TestNG

Время на прочтение 2 мин
Количество просмотров 4.4K
Java *
Представим себе ситуацию, когда есть написанные тесты на JUnit`е и все работает отлично (ну хотя бы тесты написаны).
Но появляется чудо-идея, что TestNG был бы для этих тестов удобнее. Не будем вдаваться в холивар, какой из фреймворков лучше, круче или удобнее. Но факт в том, что API у них разный.

Конечно заменить поиском assertArrayEquals на assertEquals несложно.
Но менять позицию сообщения для падающего теста уже сложнее, тут нужно править ручками.
Не знаю, насколько актуальна эта проблема, но я с ней сталкивался много раз.
Читать дальше →
Всего голосов 5: ↑5 и ↓0 +5
Комментарии 15

Spring и обработка событий в Hibernate

Время на прочтение 3 мин
Количество просмотров 17K
Программирование *Java *
Туториал
Как-то обделена на хабре такая тема, как обработка событий при работе с сущностями с использованием Hibernate — я смог найти только один пост уже почти мохнатого года. Но то аудит, а нам нужна возможность автоматизировать работу с некоторыми атрибутами сущностей и при этом упростить процедуру работы с ними.

Для начала создадим демонстрационный стенд с двумя сущностями User и AnObject, а так же DAO-слоем для них.
Код
Здесь и далее привожу только значимые куски кода — в полной версии можно посмотреть на github
@Entity
@Table(name = "user")
public class User {
        @Id
        @GeneratedValue
        private long id;
        @Basic
        @Column(name = "username", updatable = false, unique = true, nullable = false)
        private String username;

        // getter and setter
}

@Entity
@Table(name = "anObject")
public class AnObject {
        @Id
        @GeneratedValue
        private long id;
        @Column
        private String value;

        // getter and setter
}


Читать дальше →
Всего голосов 12: ↑11 и ↓1 +10
Комментарии 17

Создание репортов о тестировании Android-приложений с помощью Spoon и Emma

Время на прочтение 5 мин
Количество просмотров 9K
Тестирование IT-систем *Разработка под Android *
Из песочницы
image

Тестирование — один из самых важных этапов при разработке приложения. И приложения на Android не есть исключением. При написании кода обычно нужно его просматривать и задуматься над тем, как же его протестировать потом. Представим ситуацию, когда вам нужно покрыть тестами ваш проект, который полностью написан. Чаще всего, это не так-то просто. Скорее всего, ваш код просто-напросто не был реализован так, чтобы его было легко тестировать. Это означает, что вам придётся делать изменения в нём, чтобы сделать его поддающимся тестированию… не разрушив никакой функциональности (собственно это в наше время и называется рефакторингом (refactoring)).
Читать дальше →
Всего голосов 15: ↑14 и ↓1 +13
Комментарии 10

Тестирование через абстрактные классы в TestNG

Время на прочтение 7 мин
Количество просмотров 9.1K
Тестирование IT-систем *Java *TDD *
Туториал

Вступление


Вы всё ещё тестируете с помощью JUnit и не обращаете внимания на TestNG? Тогда мы идём к вам.

Одним из преимуществ TestNG является возможность создания тестовых массивов данных для одного или нескольких тестов. Но мало кто использует такое преимущество от @DataProvider как пустой набор тестовых данных. В чём оно выражается?

Допустим у нас есть некий тест testData(String value) и метод datas обеспечивающий DataProvider. Если datas вернёт нам массив из 3-х элементов, то testData выполнится 3 раза. Но если datas вернёт нам пустой массив, то testData не выполнится ни разу
Картинки


Давайте попробуем воспользоваться данной особенностью.

Читать дальше →
Всего голосов 6: ↑6 и ↓0 +6
Комментарии 9

Еще один способ тестирования веб-сервисов с использованием AssertJ

Время на прочтение 5 мин
Количество просмотров 13K
Тестирование веб-сервисов *
Из песочницы
Захотелось поделиться с вами моим способом тестирования веб-сервисов.

Принцип такой:

1. Создаем maven проект.
2. Настраиваем его так, чтобы с каждым запуском выполнялось следующее:
2.1. загружалось WSDL описание сервиса по ссылке
2.2. генерировался код клиента на основе WSDL описания
2.3. генерировался код ассертов для классов, участвующих в проверках, в том числе тех, которые были сгенерированы на предыдущем этапе
3. Пишем тесты.
4. Добавляем проект в jenkins, который и запускает само тестирование.

Нам понадобятся следующие инструменты: Java, maven, AssertJ, TestNG.

AssertJ — интересный фреймворк, который, помимо всего прочего, умеет генерировать асерты для конкретных классов. Это позволяет писать тесты так:
Читать дальше →
Всего голосов 7: ↑7 и ↓0 +7
Комментарии 0

Реализация автоматического перезапуска failed-тестов в текущей сборке и преодоление сопутствующих бед

Время на прочтение 10 мин
Количество просмотров 8.8K
Java *Тестирование веб-сервисов *
Из песочницы
В данной статье речь пойдет об использовании фреймворка testNG, а конкретно — о реализованных в нем и довольно редко используемых интерфейсах: IRetryAnalyzer, ITestListener, IReporter. Но обо всем по порядку.

Вечной проблемой каждого тестировщика при запуске автотестов является “падение” отдельных сценариев от запуска к запуску рандомно. И речь идет не о падении наших тестов по объективным причинам (т.е. действительно имеет место ошибка в работе тестируемого функционала, или же сам тест написан не корректно), а как раз о тех случаях, когда после перезапуска ранее проваленные тесты чудом проходят. Причин такого рандомного падения может быть масса: отвалился интернет, перегрузка CPU / отсутствие свободной RAM на устройстве, таймаут и др. Вопрос — как исключить или хотя бы уменьшить количество таких не объективно проваленных тестов?

Для меня данный челлендж возник при следующих обстоятельствах:

1) текущее приложение автотестов было решено разместить на сервере (CI);
2) реализация мультипоточности в проекте превратилась из желания в mustHave (в виду необходимости сокращения времени регрессионного тестирования сервиса).

Второму пункту лично я был очень рад, так как считаю, что любой процесс, который может длиться меньшее количество времени — обязательно должен поступать именно таким образом (будь то прохождение автотеста или очередь на кассе в супермаркете: чем быстрее мы можем завершить эти процессы, тем больше времени у нас остается для занятий чем-то действительно интересным). Так вот, разместив наши тесты на сервере (тут нам помогли админы и их знание jenkins) и запустив их в потоках (тут уже помогла наша усидчивость и эксперименты с testng.xml), мы получили сокращение времени прохождения тестов из 100 минут до 18, но одновременно мы получили прирост в проваленных тестах >2 раза. Поэтому к первым двум пунктам добавился следующий (собственно, сам челлендж, которому и посвящена эта статья):
Читать дальше →
Всего голосов 9: ↑9 и ↓0 +9
Комментарии 5

Руководство по аннотациям TestNG для Selenium WebDriver

Время на прочтение 16 мин
Количество просмотров 69K
Блог компании OTUS Тестирование IT-систем *Java *Тестирование мобильных приложений *
Перевод
Мир, труд, май, хабровчане! Для тех, кто также как и мы ворвался в межпраздничную рабочую неделю, мы подготовили перевод, который хотим приурочить к старту набора на курс «Java QA Engineer», запуск которого запланирован на 28 мая.



TestNG — это тестовый фреймворк, созданный Cédric Beust, он помогает нам удовлетворить многие наши потребности в тестировании. TestNG широко используется вместе с Selenium. Хотите знать, что означает NG? Это значит “Next Generation” (“Следующее поколение”). TestNG похож на JUnit, но он более мощный, когда дело касается управления потоком выполнения вашей программы. Архитектура фреймворка помогает нам сделать тесты более структурированными и обеспечить лучшие точки валидации.
Читать дальше →
Всего голосов 11: ↑9 и ↓2 +7
Комментарии 0

Автоматизация тестирования с использованием Selenide через Selenoid в Docker контейнере

Время на прочтение 16 мин
Количество просмотров 43K
Тестирование IT-систем *

Данная статья будет полезна начинающим QA специалистам, а также тем, кто интересуется особенностями и возможностями таких популярных фреймворков тестирования, как Selenide и Selenoid.

Здесь мы рассмотрим некий базовый проект на Selenium. Увидим, как подключить Selenium и TestNG к проекту, пример Page Object с описанием элементов страницы и используемых методов.

Далее, знакомство с Selenide: рассмотрим сам фреймворк, его основные возможности и преимущества, добавление Selenide в тестовый проект. Рассмотрим работу с элементами, проверки и ожидания, доступные в Selenide.

И наконец, подключим к своему проекту фреймворк Selenoid для запуска тестов в Docker контейнере и вне его.


Читать дальше →
Всего голосов 10: ↑9 и ↓1 +8
Комментарии 4

Простое решение для визуального регрессионного тестирования на Java + Selenium Webdriver + aShot

Время на прочтение 4 мин
Количество просмотров 12K
Тестирование IT-систем *Java *Тестирование веб-сервисов *
Туториал
Здравствуйте.

Я уже публиковал статью о своем опыте автоматизации визуального регрессионного тестирования.

С тех пор проект был значительное доработан — изменилась структура, стало гораздо проще настроить проект и начать писать автотесты, значительно улучшен отчет.



VisualRegressionFramework — это довольно простое решение для небольших проектов. Для проекта с которым я работаю написано около 50 автотестов (страницы + элементы).
Читать дальше →
Всего голосов 5: ↑4 и ↓1 +3
Комментарии 5

Современный подход к тестированию локализации на iOS

Время на прочтение 11 мин
Количество просмотров 4.9K
Блог компании Exness Разработка под iOS *Swift *Тестирование мобильных приложений *Локализация продуктов *

Привет! Давайте поговорим о том, как сейчас в 2020-ом году можно протестировать мультиязычное iOS приложение, если не хочется проверять локализацию вручную.


image

Всего голосов 4: ↑4 и ↓0 +4
Комментарии 5

Простой и удобный шаблон тестового фреймворка на selenide для UI автотестов

Время на прочтение 5 мин
Количество просмотров 17K
Тестирование IT-систем *Тестирование веб-сервисов *
Здравствуйте.

В этой статье я бы хотел поделиться своим опытом автоматизации функционального тестирования. Речь пойдет о написании удобного и надежного тестового фреймворка.

Что будем использовать: Java, Selenide, Alure, TestNG, Maven.


Читать дальше →
Всего голосов 5: ↑4 и ↓1 +3
Комментарии 4

Как Kotlin может помочь в тестировании API: кейс Русфинанс Банка

Время на прочтение 5 мин
Количество просмотров 4.3K
Блог компании Росбанк Тестирование IT-систем *Java *API *Kotlin *


Заявленный в заголовке Kotlin больше ассоциируется с Android-разработкой, но почему бы не поэкспериментировать? Мы с его помощью нашли способ немного упростить автоматизацию тестирования API одного из наших сервисов, а также облегчить работу тестировщикам, мало знакомым с программированием и нюансами языка Java.

Чем мы занимаемся? Разрабатываем сервис для отправки брокерских анкет для расчёта и получения решения по ним. И несмотря на то, что это банковское решение, разработку ведёт небольшая scrum-команда, тестированием в которой занимаются 1-2 специалиста в зависимости от загрузки и ситуации на проекте.

Под катом расскажем о результатах наших экспериментов, которые мы с удовольствием перенесли в продакшн.
Читать дальше →
Всего голосов 11: ↑8 и ↓3 +5
Комментарии 15

Краткое сравнение JUnit и TestNG

Время на прочтение 10 мин
Количество просмотров 19K
Блог компании OTUS Тестирование IT-систем *Java *
Перевод

JUnit и TestNG, несомненно, являются двумя наиболее популярными фреймворками для модульного тестирования (юнит-тестирования) в экосистеме Java. Хотя JUnit послужил вдохновением для TestNG, второй имеет ряд отличий и, в отличие от JUnit, работает для функционального и более высоких уровней тестирования.

В этой статье мы обсудим и сравним эти фреймворки, рассмотрев их функции и распространенные варианты использования.

Читать далее
Всего голосов 7: ↑5 и ↓2 +3
Комментарии 6

Как собрать свой Lighthouse

Время на прочтение 11 мин
Количество просмотров 5.1K
Блог компании Конференции Олега Бунина (Онтико) Блог компании AvitoTech Высокая производительность *JavaScript *Программирование *

Чем интенсивнее наш feature delivering, тем быстрее падает производительность. И, конечно, приходит время автоматизировать процесс слежения, чтобы просадка не дошла до прода или даже staging-окружения.

Про прод-мониторинг, оптимизацию и ручной анализ производительности легко узнать на web.dev. Но по автоматизации слежения за производительностью до того, как фичи покатятся в прод, информации не так уж много. Сегодня расскажу, как для профилирования собрать практически свой Lighthouse, чтобы проводить performance-тесты и успешно бороться с просадкой в работе команды фронтендеров.

Читать далее
Всего голосов 22: ↑22 и ↓0 +22
Комментарии 3

Как установить приоритет тест-кейса в TestNG с помощью Selenium

Время на прочтение 22 мин
Количество просмотров 4.8K
Блог компании OTUS Тестирование веб-сервисов *
Перевод

TestNG — это мощная система автоматизации тестирования с открытым исходным кодом и широким набором функций, включая аннотации, провайдеры данных, групповое тестирование, определение приоритетов и многое другое.

Приоритизация в TestNG — это простой способ установить приоритет тест-кейсов и запускать их в нужном порядке. Эта функция особенно полезна при определении последовательности выполнения тест-кейсов, когда у вас несколько тест-кейсов или вы назначаете приоритет нескольким методам по сравнению с другими. Например, если вы хотите, чтобы сначала выполнялся сценарий входа в систему, а затем добавление товара в корзину, вам не нужно беспокоиться, поскольку TestNG все для этого предусмотрел.

Читать далее
Всего голосов 4: ↑3 и ↓1 +2
Комментарии 1

Как тестировать сайт на Django. Часть 3. Отправка результата на почту, TestExplorer и декоратор tag

Время на прочтение 12 мин
Количество просмотров 4K
Блог компании PVS-Studio Тестирование IT-систем *Python *Django *Тестирование веб-сервисов *
Туториал

Тесты написаны, тимлид рад, а что дальше-то делать? А дальше - автоматизация и отправка отчёта по тестам. Именно об этом мы и поговорим в данной статье, попутно затронув полезный инструмент TestExplorer и декоратор tag.

Читать далее
Всего голосов 6: ↑3 и ↓3 0
Комментарии 8

Из Excel в JSON. Универсальные методы для формирования тела запроса из Excel книги для API тестов (Java)

Время на прочтение 11 мин
Количество просмотров 9.4K
Java *API *Тестирование веб-сервисов *
Из песочницы

Недавно нужно было написать API автотесты - запросы Post с большим количеством параметров в теле, в том числе вложенные JSON объекты, массивы , массивы JSON объектов. Многие параметры не обязательные, а значит - большое количество наборов тестовых данных.

Дано: Датапровайдер - для многократного запуска тестов, тестовые данные в таблице Excel.

Что бы сформировать тело первого запроса пришлось создать несколько классов, через сеттеры присваивать значения переменным в классе и из базового класса формировать JSON, который и использовался как тело запроса. И вдруг оказалось, что все написанное никак не получится переиспользовать для других эндпоинтов. Тогда и решил написать метод, который будет превращать таблицу Excel в JSON объект без всяких там классов и правок в коде. Нужно только придерживаться некоторых правил при составлении таблицы.

Итак! Для получения данных из таблицы использовал, как обычно, Fillo. Название столбца будет ключом, значения в столбце, собственно, значениями ключа в запросе. Строка таблицы - один набор тестовых данных.

Читать далее
Всего голосов 8: ↑7 и ↓1 +6
Комментарии 5