Всем привет!
На днях случилась сенсация.
Презентация нового айфона прошла незамеченной!
Потому, что мы выпустили Selenide 5.3.1. Тоже с улучшенными снимками :)
В этой версии мы исправили ровно одну проблему, зато какую!
Maven, где мои скриншоты?
Недавно мы обнаружили, что пользователи мавена и свежего maven-surefire-plugin:2.22.2
были лишены одной из самых важных фич селенида:
имя скриншота не добавлялось к сообщению об ошибке при падении теста.
Вот это нежданчик!
Как вы вообще жили без этого, бедняги?
Может, поэтому вы так упарываетесь по BDD, Серенити и Аллюру?
Для сравнения
Вот как выглядит сообщение об ошибке при падении теста в Maven и последнем maven-surefire-plugin:2.22.2:
com.codeborne.selenide.ex.ListSizeMismatch:
: expected: = 11, actual: 0, collection: .results
Elements: []
at org.selenide.GoogleTest.openGoogle(GoogleTest.java:42)
Вы видите скриншот? И я не вижу. А он есть.
А вот как выглядит ошибка в Gradle, Ant, любой IDE и дефалтовом maven-surefire-plugin:2.12.4:
List size mismatch. Expected: = 11, actual: 0, collection: .results
Elements: []
Screenshot: file:/Users/andrei/projects/selenide-examples/sandbox-selenide-junit5/build/reports/tests/1567803355181.0.png
Page source: file:/Users/andrei/projects/selenide-examples/sandbox-selenide-junit5/build/reports/tests/1567803355181.0.html
Timeout: 4 s.
at org.selenide.GoogleTest.openGoogle(GoogleTest.java:42)
Теперь при падении теста вы сразу видите скриншот и код странички. Этого достаточно, чтобы изучить причину падения. Не нужны больше никакие “красивые” отчёты и прочая усложнятина.
Жизнь заиграла совсем другими красками, правда?
Расследование
Но почему так получилось?
- В Java есть класс
Throwable
, от которого наследуются все ошибки. - В нём есть два метода:
getMessage()
иtoString()
. - По умолчанию
toString()
=имя класса
+getMessage()
Например, такой код:
Throwable e = new IllegalArgumentException("низя");
System.out.println(e.getMessage());
System.out.println(e.toString());
выдаёт:
низя
java.lang.IllegalArgumentException: низя
Фокус в том, что изначально Selenide добавлял имя скриншота именно в методе UIAssertionError.toString()
.
И это прекрасно работало в Gradle, Ant, всех IDE. Да и в Maven тоже - в дефалтовом maven-surefire-plugin
.
Что же обновилось в Maven?
В Maven вообще сидят весёлые ребята.
- В Maven для тестов зачем-то два плагина, а не один.
- Называются они почему-то “surefire”, а не какой-нибудь “test”, что было бы всем понятно.
- И по умолчанию последний Maven 3.6.2 почему-то использует разные версии этих плагинов:
maven-surefire-plugin:2.12.4
- выпущена 7 лет назад (например, не поддерживает Java 11)- и внезапно
maven-surefire-report-plugin:3.0.0-M3
- типа бета-версия, как бы ещё сырая
Но вот если прописать в своём pom.xml более новую версию плагина:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.22.2</version>
</plugin>
то начинаются чудеса. Вместо e.toString()
он теперь зачем-то использует имя класса + getMessage()
.
Вот поэтому скриншоты и не добавляются больше к отчёту.
Как исправили?
Теперь мы добавляем скриншот в методе e.getMessage()
, а не e.toString()
.
Звучит просто, но нам пришлось перелопатить все классы ошибок в Selenide и исправить кучу тестов.
Возможно, что-то получилось неидеально, поэтому смело рапортуйте, если найдёте шероховатости!
Всю предысторию и изменения кода можно найти здесь:
Новости
Селенид шагает по планете!
-
Зацените, какое классное видео сделал Martin Škarbala из Словакии. Всего за 1.5 минуты он успел показать, чем хорош Selenide и как много кода можно будет выкинуть.
- Дмитрий Тучс: JUnit 5 + DDT: Что такое осень?
- Антон Архипов: Анализ и отладка приложений в IntelliJ IDEA
Конференции
Приходите на конференцию QA Fest в Киеве 20-21 сентября!
Говорят, это крупнейшая конференция по тестированию в Украине. 5 потоков!
Много крутых спикеров и спикерш.
У меня будет два доклада:
- “Селенид для продвинутых”
(параллелизация, статика, листенеры, прокси, трюки с JavaScript, производительность) - “10 причин моей ненависти”
(TestNG, репорты, пэдж обжекты, try/catch, ифы в тестах, dependency injection, spring и OverKISS)
Будет подгорать!
ru.selenide.org
07.09.19