Оптимизация Selenium тестов и ускорение их поддержки

SQALab
SQALabSQALab
Оптимизация Selenium тестов и ускорение
их поддержки
Балахонов Павел
QA Automation Engineer
Mail.Ru Group
Немного обо мне
 Работаю в автоматизации тестирования
более 6 лет;
 Люблю программировать и искать баги;
 Не люблю очереди и делать что-то
монотонное вручную;
 Нравится изучать и исследовать
системы автоматизации;
Медиа проекты
Проблема поддержки UI тестов на медиа
проектах
 Большое количество UI автоматизированных тестов;
 Частый релиз различных проектов;
 Неполный анализ ошибок автотестов ручными тестировщиками;
 Отсутствие раннего информирования в автотестах об изменениях в
приложении;
 Большое количество в корне отличающихся по функциональности
проектов;
 Старый код и архитектура системы UI автоматизации;
Зависимость расхода ресурсов от размера test
suite на фиксе “До”
Оптимизация Selenium тестов и ускорение их поддержки
Структура медиа проектов
Структура системы UI автоматизации на проектах
“Почта&Портал”
UI тест и его структура
Пример UI теста на медиа проекте
@Title("Погода. Поиск. Страница результатов. Счетчик результатов должен отображать
верную информацию о количестве найденных городов соответствующих запросу.")
@Severity(SeverityLevel.NORMAL)
@Test
@Issue("TESTCONT-1171")
public void search_result_counter() {
String search = "Лон";
// Открываем главную
navigationSteps.openMainPage();
// Вводим запрос
portalToolbarSteps.setSearchField(search);
portalToolbarSteps.clickSearch();
// Проверяем страницу результатов
searchPageSteps.pageShouldBeOpened();
searchPageSteps.searchRequestShouldBeSameAs(search);
}
}
Steps как преобразователь интерфейса
Плюсы и минусы Steps Adapter по сравнению с
инкапсуляцией на Page Layer
Плюсы Минусы
Гибкость группировки Избыточность кода
Простая генерация отчетов Введение и поддержка
дополнительной сущности
Соответствие классическому
определению структуры теста
Структура страницы в UI тестировании на
медиа проектах
Пример реализации страницы на медиа проектах
@At("#HOST/prognoz/*.*/by-month")
@NamedUrls(
{
@NamedUrl(name = "city", url = "/prognoz/{1}/by-month")
}
)
public class YearForecastPage extends AnyPage {
public YearForecastPage(WebDriver driver) {
super(driver);
}
@FindBy(css = ".calendar-month")
private WebElement monthsBlock;
private final String monthLink = ".day_calendar_month a[href$='/%s-%s/']";
public void clickMonthLink(LocalDate today){
String locator = String.format(monthLink,
today.getMonth().getDisplayName(TextStyle.FULL,
Locale.ENGLISH).toLowerCase(Locale.ENGLISH), today.getYear());
$(locator).click();
}
Динамические и статические локаторы
Пример статического локатора
Динамические локаторы
@FindBy(css = ".calendar-month")
private WebElement monthsBlock;
private final String monthLinkSelector =
".day_calendar_month a[href$='/%s-%s/']";
Шаблон низкоуровневого взаимодействия
Примеры шаблонов взаимодействия
//Возвращает текст из всех элементов по локатору
public Function<By, List<String>> getAllElementTextByLocator =
locator -> {
return getDriver().findElements(locator).parallelStream()
.map(WebElement::getText)
.collect(Collectors.toList());
};
//Проверяет, что все элементы, соответствуют необходимым условиям
public BiFunction<By, Predicate, Boolean> predicateAllMatchesByLocator =
(By locator, Predicate predicate) ->
return getDriver().findElements(locator)
.parallelStream().allMatch(predicate);
Подключение поведенческих шаблонов
/**
* Базовая страница
* @author Pavel Balahonov <p.balahonov@corp.mail.ru>
*/
public class AnyPage extends AbstractPage {
public AnyPage(WebDriver driver) {
super(driver);
}
@FindBy(tagName = "h1")
private WebElement header;
//Функциональный интерфейс для элементов на странице
protected ElementFunctions elementFunctions = new ElementFunctions(getDriver());
Компонент и его структура
Статический Web компонент
Пример статического компонента
/**
* Элемент определения знака зодиака
* @author Pavel Balahonov <p.balahonov@corp.mail.ru>
*/
@Component(xpath = "//*[@class='p-formitem__label']/ancestor::div[contains(@class,
'block')]")
public class DeterminationSignElement extends AnyComponent {
public DeterminationSignElement(WebDriver driver) {
super(driver);
}
@FindBy(css = ".p-formitem__content_sub")
private WebElement determinationButton;
//Набор локаторов для блока "Дата рождения"
private final String selectedDateBirthdayLocator =
"//div[@data-range='%s']//div[contains(@class, 'dropdown__text')]";
Popup как динамический компонент
Пример динамического компонента
/**
* Попап пуш уведомлений
* @author Pavel Balahonov <p.balahonov@corp.mail.ru>
*/
@Popup
public class PushNotificationElement extends AnyComponent {
private final String declineButtonSelector =
".m-push-notifications__button [data-action='defer']";
public PushNotificationElement(WebDriver driver) {
super(driver);
}
public boolean isPopupPresent() {
return waitForElementPresent(By.cssSelector(formSelector));
}
Роль компонентов в поддержке тестов
Ранняя валидация;
Лучшая архитектура UI автотестов;
Отсутствие дублирования кода;
Поддерживаем компонент, а не страницы, где он
используется;
Оптимизация Selenium тестов и ускорение их поддержки
Оптимизация Selenium тестов и ускорение их поддержки
Навигационный валидатор
/**
* Страница гороскопа
* @author Pavel Balahonov <p.balahonov@corp.mail.ru>
*/
@At("#HOST/prediction/[a-z]+/[a-z]+/")
@NamedUrls(
@NamedUrl(name = "prediction", url = "/prediction/{1}/{2}")
)
public class PredictionPage extends AnyPage {
public PredictionPage(WebDriver driver) {
super(driver);
}
@FindBy(id = "other_zodiac_sign")
private WebElement otherZodiacSignBlock;
Оптимизация Selenium тестов и ускорение их поддержки
Оптимизация Selenium тестов и ускорение их поддержки
Common Page API и его роль в поддержке
Единые механизмы решения общих задач;
Поддержка взаимодействия с внешними сервисами;
Протестированные механизмы решения типичных задач;
Информативность и детализированное логирование;
Процесс поддержки UI тестов и его организация
Преимущества и недостатки данной
организации процесса поддержки
Плюсы Минусы
Отсутствие бесконечного процесса
поддержки
Отсутствует возможность запуска
полных прогонов нерелизных
проектов в любое время
Сокращается время поддержки
тестов и остается время на
покрытие новых кейсов
Необходимость поддержки
актуальности планировщика
(scheduler)
Итоговые мероприятия по ускорению
поддержки UI тестов без потери качества
 Раннее информирование в автотестах;
 Структурированность автотестов;
 Отсутствие поддержки логики взаимодействия с элементами и
внешними сервисами;
 Поддержка автотестов по расписанию;
Зависимость расхода ресурсов от размера
test suite на фиксе “После”
Оптимизация Selenium тестов и ускорение их поддержки
Контакты:
skype: svyatoj88
e-mail: svyatoj1988@gmail.com
Вопросы???
1 of 36

Recommended

Как hh.ru дошли до 500 релизов в квартал без потери в качестве by
Как hh.ru дошли до 500 релизов в квартал без потери в качествеКак hh.ru дошли до 500 релизов в квартал без потери в качестве
Как hh.ru дошли до 500 релизов в квартал без потери в качествеSQALab
722 views63 slides
Apache.JMeter для .NET-проектов by
Apache.JMeter для .NET-проектовApache.JMeter для .NET-проектов
Apache.JMeter для .NET-проектовSQALab
715 views64 slides
Делаем автоматизацию проектных KPIs by
Делаем автоматизацию проектных KPIsДелаем автоматизацию проектных KPIs
Делаем автоматизацию проектных KPIsSQALab
361 views19 slides
Quality Assurance vs Quality Control - так в чем же заключается работа специа... by
Quality Assurance vs Quality Control - так в чем же заключается работа специа...Quality Assurance vs Quality Control - так в чем же заключается работа специа...
Quality Assurance vs Quality Control - так в чем же заключается работа специа...COMAQA.BY
4K views23 slides
Новый процесс тестирования на "старом" проекте by
Новый процесс тестирования на "старом" проектеНовый процесс тестирования на "старом" проекте
Новый процесс тестирования на "старом" проектеSQALab
944 views22 slides
Добиваемся эффективности каждого из 9000+ UI-тестов by
Добиваемся эффективности каждого из 9000+ UI-тестовДобиваемся эффективности каждого из 9000+ UI-тестов
Добиваемся эффективности каждого из 9000+ UI-тестовSQALab
580 views41 slides

More Related Content

What's hot

Автоматизация визуального тестирования адаптивного дизайна на примере Galen F... by
Автоматизация визуального тестирования адаптивного дизайна на примере Galen F...Автоматизация визуального тестирования адаптивного дизайна на примере Galen F...
Автоматизация визуального тестирования адаптивного дизайна на примере Galen F...COMAQA.BY
4.3K views51 slides
WP как экспериментальная платформа by
WP как экспериментальная платформаWP как экспериментальная платформа
WP как экспериментальная платформаSQALab
682 views41 slides
Организация процессов разработки на основе VSTS и TFS by
Организация процессов разработки на основе VSTS и TFSОрганизация процессов разработки на основе VSTS и TFS
Организация процессов разработки на основе VSTS и TFSАлександр Шамрай
143 views29 slides
Enter: testing by
Enter: testingEnter: testing
Enter: testingKamil Samigullin
321 views29 slides
Web application testing architecture by
Web application testing architectureWeb application testing architecture
Web application testing architectureAndrey Lazarev
74 views13 slides
QA Fest 2016. Дмитрий Химион. Векторы развития систем автоматизации тестиров... by
QA Fest 2016. Дмитрий Химион.  Векторы развития систем автоматизации тестиров...QA Fest 2016. Дмитрий Химион.  Векторы развития систем автоматизации тестиров...
QA Fest 2016. Дмитрий Химион. Векторы развития систем автоматизации тестиров...QAFest
1.1K views35 slides

What's hot(20)

Автоматизация визуального тестирования адаптивного дизайна на примере Galen F... by COMAQA.BY
Автоматизация визуального тестирования адаптивного дизайна на примере Galen F...Автоматизация визуального тестирования адаптивного дизайна на примере Galen F...
Автоматизация визуального тестирования адаптивного дизайна на примере Galen F...
COMAQA.BY 4.3K views
WP как экспериментальная платформа by SQALab
WP как экспериментальная платформаWP как экспериментальная платформа
WP как экспериментальная платформа
SQALab682 views
Web application testing architecture by Andrey Lazarev
Web application testing architectureWeb application testing architecture
Web application testing architecture
Andrey Lazarev74 views
QA Fest 2016. Дмитрий Химион. Векторы развития систем автоматизации тестиров... by QAFest
QA Fest 2016. Дмитрий Химион.  Векторы развития систем автоматизации тестиров...QA Fest 2016. Дмитрий Химион.  Векторы развития систем автоматизации тестиров...
QA Fest 2016. Дмитрий Химион. Векторы развития систем автоматизации тестиров...
QAFest1.1K views
QA Fes 2016. Анастасия Асеева. Роль тестирования в Devops by QAFest
QA Fes 2016. Анастасия Асеева. Роль тестирования в DevopsQA Fes 2016. Анастасия Асеева. Роль тестирования в Devops
QA Fes 2016. Анастасия Асеева. Роль тестирования в Devops
QAFest1.6K views
Архитектура автоматизированных тестов: представление предметной области by SQALab
Архитектура автоматизированных тестов: представление предметной областиАрхитектура автоматизированных тестов: представление предметной области
Архитектура автоматизированных тестов: представление предметной области
SQALab1.4K views
Андрей Лазарев “Архітектура тестування Enterprise Web додатків” by Dakiry
Андрей Лазарев “Архітектура тестування Enterprise Web додатків”Андрей Лазарев “Архітектура тестування Enterprise Web додатків”
Андрей Лазарев “Архітектура тестування Enterprise Web додатків”
Dakiry115 views
Подход к тестированию хранилища данных на базе MS SQL Server by SQALab
Подход к тестированию хранилища данных на базе MS SQL ServerПодход к тестированию хранилища данных на базе MS SQL Server
Подход к тестированию хранилища данных на базе MS SQL Server
SQALab1.7K views
Тестирование слоёного пирога by SQALab
Тестирование слоёного пирогаТестирование слоёного пирога
Тестирование слоёного пирога
SQALab1.2K views
TestLink by ISsoft
TestLinkTestLink
TestLink
ISsoft5.6K views
Эффективное использование Microsoft team system для улучшения процессов разра... by Александр Шамрай
Эффективное использование Microsoft team system для улучшения процессов разра...Эффективное использование Microsoft team system для улучшения процессов разра...
Эффективное использование Microsoft team system для улучшения процессов разра...
Процесс тестирования в условиях неявных требований by COMAQA.BY
Процесс тестирования в условиях неявных требований Процесс тестирования в условиях неявных требований
Процесс тестирования в условиях неявных требований
COMAQA.BY 759 views
Автоматизация визуального тестирования адаптивного дизайна на примере Galen F... by SQALab
Автоматизация визуального тестирования адаптивного дизайна на примере Galen F...Автоматизация визуального тестирования адаптивного дизайна на примере Galen F...
Автоматизация визуального тестирования адаптивного дизайна на примере Galen F...
SQALab3.1K views
Тестирование веб-проектов в Agile by SQALab
Тестирование веб-проектов в AgileТестирование веб-проектов в Agile
Тестирование веб-проектов в Agile
SQALab689 views
Денис Чистяков: Workflow. Работа над проектом в Яндексе by Yandex
Денис Чистяков: Workflow. Работа над проектом в ЯндексеДенис Чистяков: Workflow. Работа над проектом в Яндексе
Денис Чистяков: Workflow. Работа над проектом в Яндексе
Yandex3.4K views

Similar to Оптимизация Selenium тестов и ускорение их поддержки

Selenium 2.0: обзор новых возможностей by
Selenium 2.0: обзор новых возможностейSelenium 2.0: обзор новых возможностей
Selenium 2.0: обзор новых возможностейPaul Stashevsky
2.8K views30 slides
Автоматизация тестирования iOS приложений: от идеи к готовому решению by
Автоматизация тестирования iOS приложений: от идеи к готовому решениюАвтоматизация тестирования iOS приложений: от идеи к готовому решению
Автоматизация тестирования iOS приложений: от идеи к готовому решениюSQALab
1.7K views27 slides
Средства разработки web приложений (Web frameworks) by
Средства разработки web приложений
(Web frameworks)Средства разработки web приложений
(Web frameworks)
Средства разработки web приложений (Web frameworks)Fedor Malyshkin
1K views53 slides
Mobile automation uamobile by
Mobile automation uamobileMobile automation uamobile
Mobile automation uamobileUA Mobile
2.8K views58 slides
C# Web. Занятие 06. by
C# Web. Занятие 06.C# Web. Занятие 06.
C# Web. Занятие 06.Igor Shkulipa
537 views39 slides
iOS and Android Mobile Test Automation by
iOS and Android Mobile Test AutomationiOS and Android Mobile Test Automation
iOS and Android Mobile Test AutomationAndrii Dzynia
3.5K views59 slides

Similar to Оптимизация Selenium тестов и ускорение их поддержки(20)

Selenium 2.0: обзор новых возможностей by Paul Stashevsky
Selenium 2.0: обзор новых возможностейSelenium 2.0: обзор новых возможностей
Selenium 2.0: обзор новых возможностей
Paul Stashevsky2.8K views
Автоматизация тестирования iOS приложений: от идеи к готовому решению by SQALab
Автоматизация тестирования iOS приложений: от идеи к готовому решениюАвтоматизация тестирования iOS приложений: от идеи к готовому решению
Автоматизация тестирования iOS приложений: от идеи к готовому решению
SQALab1.7K views
Средства разработки web приложений (Web frameworks) by Fedor Malyshkin
Средства разработки web приложений
(Web frameworks)Средства разработки web приложений
(Web frameworks)
Средства разработки web приложений (Web frameworks)
Fedor Malyshkin1K views
Mobile automation uamobile by UA Mobile
Mobile automation uamobileMobile automation uamobile
Mobile automation uamobile
UA Mobile2.8K views
C# Web. Занятие 06. by Igor Shkulipa
C# Web. Занятие 06.C# Web. Занятие 06.
C# Web. Занятие 06.
Igor Shkulipa537 views
iOS and Android Mobile Test Automation by Andrii Dzynia
iOS and Android Mobile Test AutomationiOS and Android Mobile Test Automation
iOS and Android Mobile Test Automation
Andrii Dzynia3.5K views
автоматизация тестирования веб приложений павел липский by Media Gorod
автоматизация тестирования веб приложений   павел липскийавтоматизация тестирования веб приложений   павел липский
автоматизация тестирования веб приложений павел липский
Media Gorod539 views
Автоматизируйте это немедленно или коллекция инструментов автотестирования с ... by Andrey Rebrov
Автоматизируйте это немедленно или коллекция инструментов автотестирования с ...Автоматизируйте это немедленно или коллекция инструментов автотестирования с ...
Автоматизируйте это немедленно или коллекция инструментов автотестирования с ...
Andrey Rebrov995 views
Бодрящий микс из Selenium и TestNG- регрессионное тестирование руками разрабо... by Andrey Rebrov
Бодрящий микс из Selenium и TestNG- регрессионное тестирование руками разрабо...Бодрящий микс из Selenium и TestNG- регрессионное тестирование руками разрабо...
Бодрящий микс из Selenium и TestNG- регрессионное тестирование руками разрабо...
Andrey Rebrov5.2K views
Разработка Web-приложений на Angular JS. Архитектурные семинары Softengi by Softengi
Разработка Web-приложений на Angular JS. Архитектурные семинары SoftengiРазработка Web-приложений на Angular JS. Архитектурные семинары Softengi
Разработка Web-приложений на Angular JS. Архитектурные семинары Softengi
Softengi 2K views
Alexander manuhin selenium_php_v2.0 by matroskin1980
Alexander manuhin selenium_php_v2.0Alexander manuhin selenium_php_v2.0
Alexander manuhin selenium_php_v2.0
matroskin19804.4K views
Приемочные тесты на огурце by Alexander Byndyu
Приемочные тесты на огурцеПриемочные тесты на огурце
Приемочные тесты на огурце
Alexander Byndyu2.9K views
Плюсы и минусы автоматизации, пример из жизни by z-tech
Плюсы и минусы автоматизации, пример из жизниПлюсы и минусы автоматизации, пример из жизни
Плюсы и минусы автоматизации, пример из жизни
z-tech2.1K views
Дмитрий Лукьяненко: Первый фреймворк на Selenium + TestNG by DataArt
Дмитрий Лукьяненко: Первый фреймворк на Selenium + TestNGДмитрий Лукьяненко: Первый фреймворк на Selenium + TestNG
Дмитрий Лукьяненко: Первый фреймворк на Selenium + TestNG
DataArt433 views
Test Driven Development in ASP.NET MVC 3 by Anton Vidishchev
Test Driven Development in ASP.NET MVC 3Test Driven Development in ASP.NET MVC 3
Test Driven Development in ASP.NET MVC 3
Anton Vidishchev1.9K views
DUMP-2012 - Мобильные технологии - "Как мы выстраиваем разработку сервиса под... by it-people
DUMP-2012 - Мобильные технологии - "Как мы выстраиваем разработку сервиса под...DUMP-2012 - Мобильные технологии - "Как мы выстраиваем разработку сервиса под...
DUMP-2012 - Мобильные технологии - "Как мы выстраиваем разработку сервиса под...
it-people301 views
Automation Functional Testing in Agile Projects by Andrey Rebrov
Automation Functional Testing in Agile ProjectsAutomation Functional Testing in Agile Projects
Automation Functional Testing in Agile Projects
Andrey Rebrov1K views
Дело тестера боится: как в опытных руках могут заиграть Java и TestNg by IT61
Дело тестера боится: как в опытных руках могут заиграть Java и TestNgДело тестера боится: как в опытных руках могут заиграть Java и TestNg
Дело тестера боится: как в опытных руках могут заиграть Java и TestNg
IT612K views
Meet Magento Belarus 2015: Denis Bosak by Amasty
Meet Magento Belarus 2015: Denis BosakMeet Magento Belarus 2015: Denis Bosak
Meet Magento Belarus 2015: Denis Bosak
Amasty1K views

More from SQALab

Готовим стажировку by
Готовим стажировкуГотовим стажировку
Готовим стажировкуSQALab
2.6K views18 slides
Куда приводят мечты? или Искусство развития тестировщика by
Куда приводят мечты? или Искусство развития тестировщикаКуда приводят мечты? или Искусство развития тестировщика
Куда приводят мечты? или Искусство развития тестировщикаSQALab
1.7K views16 slides
Автоматизация 0.0: 0 - бюджет, 0 - опыт программирования by
Автоматизация 0.0: 0 - бюджет, 0 - опыт программированияАвтоматизация 0.0: 0 - бюджет, 0 - опыт программирования
Автоматизация 0.0: 0 - бюджет, 0 - опыт программированияSQALab
774 views21 slides
Нагрузочное тестирование нестандартных протоколов с использованием Citrix и J... by
Нагрузочное тестирование нестандартных протоколов с использованием Citrix и J...Нагрузочное тестирование нестандартных протоколов с использованием Citrix и J...
Нагрузочное тестирование нестандартных протоколов с использованием Citrix и J...SQALab
800 views18 slides
Continuous performance testing by
Continuous performance testingContinuous performance testing
Continuous performance testingSQALab
645 views23 slides
Конфиги вместо костылей. Pytestconfig и зачем он нужен by
Конфиги вместо костылей. Pytestconfig и зачем он нуженКонфиги вместо костылей. Pytestconfig и зачем он нужен
Конфиги вместо костылей. Pytestconfig и зачем он нуженSQALab
717 views94 slides

More from SQALab(20)

Готовим стажировку by SQALab
Готовим стажировкуГотовим стажировку
Готовим стажировку
SQALab2.6K views
Куда приводят мечты? или Искусство развития тестировщика by SQALab
Куда приводят мечты? или Искусство развития тестировщикаКуда приводят мечты? или Искусство развития тестировщика
Куда приводят мечты? или Искусство развития тестировщика
SQALab1.7K views
Автоматизация 0.0: 0 - бюджет, 0 - опыт программирования by SQALab
Автоматизация 0.0: 0 - бюджет, 0 - опыт программированияАвтоматизация 0.0: 0 - бюджет, 0 - опыт программирования
Автоматизация 0.0: 0 - бюджет, 0 - опыт программирования
SQALab774 views
Нагрузочное тестирование нестандартных протоколов с использованием Citrix и J... by SQALab
Нагрузочное тестирование нестандартных протоколов с использованием Citrix и J...Нагрузочное тестирование нестандартных протоколов с использованием Citrix и J...
Нагрузочное тестирование нестандартных протоколов с использованием Citrix и J...
SQALab800 views
Continuous performance testing by SQALab
Continuous performance testingContinuous performance testing
Continuous performance testing
SQALab645 views
Конфиги вместо костылей. Pytestconfig и зачем он нужен by SQALab
Конфиги вместо костылей. Pytestconfig и зачем он нуженКонфиги вместо костылей. Pytestconfig и зачем он нужен
Конфиги вместо костылей. Pytestconfig и зачем он нужен
SQALab717 views
Команда чемпионов в ИТ стихии by SQALab
Команда чемпионов в ИТ стихииКоманда чемпионов в ИТ стихии
Команда чемпионов в ИТ стихии
SQALab727 views
API. Серебряная пуля в магазине советов by SQALab
API. Серебряная пуля в магазине советовAPI. Серебряная пуля в магазине советов
API. Серебряная пуля в магазине советов
SQALab539 views
Вредные привычки в тест-менеджменте by SQALab
Вредные привычки в тест-менеджментеВредные привычки в тест-менеджменте
Вредные привычки в тест-менеджменте
SQALab655 views
Мощь переполняет с JDI 2.0 - новая эра UI автоматизации by SQALab
Мощь переполняет с JDI 2.0 - новая эра UI автоматизацииМощь переполняет с JDI 2.0 - новая эра UI автоматизации
Мощь переполняет с JDI 2.0 - новая эра UI автоматизации
SQALab453 views
Стили лидерства и тестирование by SQALab
Стили лидерства и тестированиеСтили лидерства и тестирование
Стили лидерства и тестирование
SQALab463 views
"Давайте не будем про качество" by SQALab
"Давайте не будем про качество""Давайте не будем про качество"
"Давайте не будем про качество"
SQALab543 views
Тестирование геолокационных систем by SQALab
Тестирование геолокационных системТестирование геолокационных систем
Тестирование геолокационных систем
SQALab340 views
Лидер или босс? Вот в чем вопрос by SQALab
Лидер или босс? Вот в чем вопросЛидер или босс? Вот в чем вопрос
Лидер или босс? Вот в чем вопрос
SQALab600 views
От Зефира в коробке к Structure Zephyr или как тест-менеджеру перекроить внут... by SQALab
От Зефира в коробке к Structure Zephyr или как тест-менеджеру перекроить внут...От Зефира в коробке к Structure Zephyr или как тест-менеджеру перекроить внут...
От Зефира в коробке к Structure Zephyr или как тест-менеджеру перекроить внут...
SQALab1.6K views
Истинная сила тестировщика - информация by SQALab
Истинная сила тестировщика - информацияИстинная сила тестировщика - информация
Истинная сила тестировщика - информация
SQALab1.7K views
Автоматизация тестирования встроенного ПО by SQALab
Автоматизация тестирования встроенного ПОАвтоматизация тестирования встроенного ПО
Автоматизация тестирования встроенного ПО
SQALab479 views
Правильный подход к составлению профиля нагрузочного тестирования by SQALab
Правильный подход к составлению профиля нагрузочного тестированияПравильный подход к составлению профиля нагрузочного тестирования
Правильный подход к составлению профиля нагрузочного тестирования
SQALab1.7K views
Sustainable Test Automation: Collaborate within Team by SQALab
Sustainable Test Automation: Collaborate within TeamSustainable Test Automation: Collaborate within Team
Sustainable Test Automation: Collaborate within Team
SQALab215 views
Test Data Preparation: Tips and Tricks by SQALab
Test Data Preparation: Tips and TricksTest Data Preparation: Tips and Tricks
Test Data Preparation: Tips and Tricks
SQALab368 views

Оптимизация Selenium тестов и ускорение их поддержки

  • 1. Оптимизация Selenium тестов и ускорение их поддержки Балахонов Павел QA Automation Engineer Mail.Ru Group
  • 2. Немного обо мне  Работаю в автоматизации тестирования более 6 лет;  Люблю программировать и искать баги;  Не люблю очереди и делать что-то монотонное вручную;  Нравится изучать и исследовать системы автоматизации;
  • 4. Проблема поддержки UI тестов на медиа проектах  Большое количество UI автоматизированных тестов;  Частый релиз различных проектов;  Неполный анализ ошибок автотестов ручными тестировщиками;  Отсутствие раннего информирования в автотестах об изменениях в приложении;  Большое количество в корне отличающихся по функциональности проектов;  Старый код и архитектура системы UI автоматизации;
  • 5. Зависимость расхода ресурсов от размера test suite на фиксе “До”
  • 8. Структура системы UI автоматизации на проектах “Почта&Портал”
  • 9. UI тест и его структура
  • 10. Пример UI теста на медиа проекте @Title("Погода. Поиск. Страница результатов. Счетчик результатов должен отображать верную информацию о количестве найденных городов соответствующих запросу.") @Severity(SeverityLevel.NORMAL) @Test @Issue("TESTCONT-1171") public void search_result_counter() { String search = "Лон"; // Открываем главную navigationSteps.openMainPage(); // Вводим запрос portalToolbarSteps.setSearchField(search); portalToolbarSteps.clickSearch(); // Проверяем страницу результатов searchPageSteps.pageShouldBeOpened(); searchPageSteps.searchRequestShouldBeSameAs(search); } }
  • 12. Плюсы и минусы Steps Adapter по сравнению с инкапсуляцией на Page Layer Плюсы Минусы Гибкость группировки Избыточность кода Простая генерация отчетов Введение и поддержка дополнительной сущности Соответствие классическому определению структуры теста
  • 13. Структура страницы в UI тестировании на медиа проектах
  • 14. Пример реализации страницы на медиа проектах @At("#HOST/prognoz/*.*/by-month") @NamedUrls( { @NamedUrl(name = "city", url = "/prognoz/{1}/by-month") } ) public class YearForecastPage extends AnyPage { public YearForecastPage(WebDriver driver) { super(driver); } @FindBy(css = ".calendar-month") private WebElement monthsBlock; private final String monthLink = ".day_calendar_month a[href$='/%s-%s/']"; public void clickMonthLink(LocalDate today){ String locator = String.format(monthLink, today.getMonth().getDisplayName(TextStyle.FULL, Locale.ENGLISH).toLowerCase(Locale.ENGLISH), today.getYear()); $(locator).click(); }
  • 15. Динамические и статические локаторы Пример статического локатора Динамические локаторы @FindBy(css = ".calendar-month") private WebElement monthsBlock; private final String monthLinkSelector = ".day_calendar_month a[href$='/%s-%s/']";
  • 17. Примеры шаблонов взаимодействия //Возвращает текст из всех элементов по локатору public Function<By, List<String>> getAllElementTextByLocator = locator -> { return getDriver().findElements(locator).parallelStream() .map(WebElement::getText) .collect(Collectors.toList()); }; //Проверяет, что все элементы, соответствуют необходимым условиям public BiFunction<By, Predicate, Boolean> predicateAllMatchesByLocator = (By locator, Predicate predicate) -> return getDriver().findElements(locator) .parallelStream().allMatch(predicate);
  • 18. Подключение поведенческих шаблонов /** * Базовая страница * @author Pavel Balahonov <p.balahonov@corp.mail.ru> */ public class AnyPage extends AbstractPage { public AnyPage(WebDriver driver) { super(driver); } @FindBy(tagName = "h1") private WebElement header; //Функциональный интерфейс для элементов на странице protected ElementFunctions elementFunctions = new ElementFunctions(getDriver());
  • 19. Компонент и его структура
  • 21. Пример статического компонента /** * Элемент определения знака зодиака * @author Pavel Balahonov <p.balahonov@corp.mail.ru> */ @Component(xpath = "//*[@class='p-formitem__label']/ancestor::div[contains(@class, 'block')]") public class DeterminationSignElement extends AnyComponent { public DeterminationSignElement(WebDriver driver) { super(driver); } @FindBy(css = ".p-formitem__content_sub") private WebElement determinationButton; //Набор локаторов для блока "Дата рождения" private final String selectedDateBirthdayLocator = "//div[@data-range='%s']//div[contains(@class, 'dropdown__text')]";
  • 23. Пример динамического компонента /** * Попап пуш уведомлений * @author Pavel Balahonov <p.balahonov@corp.mail.ru> */ @Popup public class PushNotificationElement extends AnyComponent { private final String declineButtonSelector = ".m-push-notifications__button [data-action='defer']"; public PushNotificationElement(WebDriver driver) { super(driver); } public boolean isPopupPresent() { return waitForElementPresent(By.cssSelector(formSelector)); }
  • 24. Роль компонентов в поддержке тестов Ранняя валидация; Лучшая архитектура UI автотестов; Отсутствие дублирования кода; Поддерживаем компонент, а не страницы, где он используется;
  • 27. Навигационный валидатор /** * Страница гороскопа * @author Pavel Balahonov <p.balahonov@corp.mail.ru> */ @At("#HOST/prediction/[a-z]+/[a-z]+/") @NamedUrls( @NamedUrl(name = "prediction", url = "/prediction/{1}/{2}") ) public class PredictionPage extends AnyPage { public PredictionPage(WebDriver driver) { super(driver); } @FindBy(id = "other_zodiac_sign") private WebElement otherZodiacSignBlock;
  • 30. Common Page API и его роль в поддержке Единые механизмы решения общих задач; Поддержка взаимодействия с внешними сервисами; Протестированные механизмы решения типичных задач; Информативность и детализированное логирование;
  • 31. Процесс поддержки UI тестов и его организация
  • 32. Преимущества и недостатки данной организации процесса поддержки Плюсы Минусы Отсутствие бесконечного процесса поддержки Отсутствует возможность запуска полных прогонов нерелизных проектов в любое время Сокращается время поддержки тестов и остается время на покрытие новых кейсов Необходимость поддержки актуальности планировщика (scheduler)
  • 33. Итоговые мероприятия по ускорению поддержки UI тестов без потери качества  Раннее информирование в автотестах;  Структурированность автотестов;  Отсутствие поддержки логики взаимодействия с элементами и внешними сервисами;  Поддержка автотестов по расписанию;
  • 34. Зависимость расхода ресурсов от размера test suite на фиксе “После”