Избавьтесь от нестабильных тестов с VideoRecorder

Привет, новая заметка немного подзадержалась, так как я готовлюсь к поездке на QA Conference.

В этот раз хочу поделиться парой мыслей по поводу нестабильных тестов и способами борьбы с ними. Конкретно речь пойдет о UI тестах для WEB и Desktop приложений.

Естественно, всем хотелось бы иметь стабильные UI автотесты, которые можно запускать на любом компьютере и, тем самым, проверять работоспособность системы, но, увы, зачастую это не так. На всех конференциях автоматизаторы сходятся во мнениях о том, что нужно соблюдать баланс и сохранять структуру пирамиды автоматизации. Тем не менее, в силу каких-либо обстоятельств на многих проектах до сих пор вместо пирамиды мы можем видеть "мороженко".

Мне удается держать свои автотесты стабильными и запускать их практически в любой момент. Как такого можно добиться? Мой секрет заключается в том, что UI тесты - это, по сути, автоматизация E2E сценариев, более того, в тестах мы проверяем функциональность нашего UI. Немаловажным фактором является то, что я мастерски использую Selenide, ну и последнее - автотесты запускаются каждый день! Именно ежедневные запуски, даже на тех же сборках, позволяют мне быть уверенным, что мой тест работает стабильно и все падения вызваны изменениями или ошибками в тестируемом приложении.

Но, тем не менее, я знаю проекты или случаи (на моем прошлом проекте так было), когда было достаточно серьезное число нестабильных тестов, ситуация усугублялась еще и тем, что тестирование проводилось только в браузере Internet Explorer 8-10.

У всех на проектах есть скриншоты, которые призваны помогать выяснить причины падений тестов, но вот одна проблема - не всегда скриншоты дают ясную картину. Самая досадная вещь - когда у вас есть снимок экрана, но на нем не запечатлена ошибка, так как скриншотер сработал на секунду позже нужного момента. Как быть в этом случае? Можно принудительно делать скриншот и пытаться угадать момент падения, а можно писать видео нестабильного теста!

Наверное вы удивитесь, но да, зачастую это самый верный способ выявить причины нестабильности, более того, теперь писать видео ваших тестов стало очень просто, так как я решил написать библиотеку, которая позволит многим не думать о деталях реализации процесса записи, - VideoRecorder.

Что полезного даст эта библиотека?

Все очень просто - вы сможете легко записывать видео ваших автотестов, просто добавив аннотацию @Video.

Пример:

@Listeners(VideoListener.class)
public class TestNGVideo {

@Test
@Video
public void testName3() throws Exception {
     open("http://ukr.net");
     $(".login > input").val("Hello");
     $(".password > input").val("test");
     $(".submit > bu").click();
}}

Вот так просто! Выполнение данного теста будет записано на видео и сохранено в нужном вам месте. На данный момент я успел реализовать интеграцию с TestNG, но в планах сделать подобное и для работы с JUnit, Spock или же любого другого тест-ранера из мира Java.

Из фишек! По умолчанию видеофайл будет иметь имя теста и записи будут сохраняться только для FAILED тестов. Вы можете легко переопределить новое имя для файла, просто указав его в параметрах аннотации:

@Test
@Video(name = "second_test")
public void testName2() throws Exception {
    open("http://ukr.net");
    $(".login > input").val("User");
    $(".password > input").val("User");
    $(".submit > button").click();
}

Вот такая вот получилась штучка. Вы можете использовать это как для тестов с Selenide, так и для тестов с Winium.

Если вам интересна данная идея, напишите в комментариях свои мысли…​