Что такое Flaky тест?

image::http://cdn.meme.am/instances/500x/52587305.jpg

Если у вас нету Flacky тестов - значит вы занимаетесь чем-то нереальным :). Flacky тесты - это зло! Это то, с чем приходится бороться днями, а бывает - и неделями. Жизненный пример: написали вы свой Selenium тест, прогнали его, отладили, закомитили - все прекрасно! Приходите на следующий день, ну или через пару-тройку дней, смотрите: он зеленый. "Ну прекрасно", - думаете, смотрите еще через время - он упал (по никому не понятной причине), ведь код не менялся и приложение работает нормально. Перезапускаете тест - он проходит, все хорошо. Видимо, планеты в небе так встали, и он свалился :). Спустя несколько билдов вы замечаете, что этот тест ведет себя, как лампочка на новогодней елке - мигает: FAIL, PASS,FAIL,PASS…​

Как с этим бороться? Ответ как всегда очень прост - нужно разбираться. Как говорится, у любой проблемы есть имя, фамилия и отчество. Большинство Flaky тестов случается из-за банальной невнимательности. Некоторые из них найти легко, над некоторыми же нужно пораскинуть мозгами. Приведу пример: был у меня тест, который должен был открыть модальный диалог и в нем продолжить работу. Задача достаточно простая, решается за 5 (нет, 10 минут) :). Я написал метод:

private void switchToRiskFactorDialog(String title) {
            String targetWindow = waitForWindowTitle(title);
            switchTo().window(targetWindow);
}

Все просто: метод ждал, пока появится окно с нужным title и затем делал switch в новое окно. Все работало прекрасно, пока я не заметил, что у меня тест два раза проходит, а один раз валится с NullPointerException. Оказалось, что подставил меня метод waitForWindowTitle. Один раз он дожидался, пока окно появится, а в другой принимал решение, что окно появилось, хотя на самом деле его еще не было. Вот и все, таким образом я избавился от Flaky теста.