Meetup#4_Opyt_vnedrenia_BDD_v_razrabotku.pptx
- Количество слайдов: 29
Опыт внедрения BDD в разработку Евдокимова Людмила
Что такое BDD? Разработка, основанная на поведении – Behavior-Driven Development Ответвление TDD Идеи объектно-ориентированного анализа и проектирования
Особенности BDD Фокус на функциональности Используется естественный язык Помогает вести разработку начиная со стадии оформления требований Blackbox Имитирует действия пользователя
Best Practices Принцип «Пять почему» . Применяется к каждой предлагаемой пользовательской истории, чтобы убедиться, что ее цель четко связана с задачами бизнеса Мышление «from the outside in» - реализация только той функциональности, которая в наибольшей степени способствует достижению целей бизнеса, тем самым минимизируя лишнюю работу
Почему BDD? TDD BDD Не понятно когда хватит писать тесты Тесты пишутся для каждой пользовательской истории Сложно применимо для функциональных UI-тестов Хорошо применимо для написания функциональных тестов
Используемые фреймворки Cucumber Jenkins Инструменты Xvfb Selenide
Cucumber Фича Сценарий
Cucumber
Cucumber Given user opens "/login" @Given("^user opens "([^"]*)"$") public void open. Local. Server(String url) { open(url); } And verify that a table row with columns Test 1, Test 2 exists @And("^verify that a table row with columns "([^"]*)" exists$") public void verify. Table. Row. Columns(List<String> columns) { … }
Selenium vs Selenide Selenium Selenide API более низкого уровня API более высокого уровня Широкий круга задач Узкий круга задач Многословен Подробная документация Выполняет задачи одной командой Большое сообщество Автоматическое управление браузером Умные ожидания Встроенная поддержка Ajax Автоматические скриншоты Активный саппорт Чисто условная документация Небольшое сообщество
Selenide. Создание браузера Selenium Web. Driver: Desired. Capabilities desired. Capabilities = Desired. Capabilities. html. Unit(); desired. Capabilities. set. Capability(Html. Unit. Driver. INVALIDSELECTIONERROR, true); desired. Capabilities. set. Capability(Html. Unit. Driver. INVALIDXPATHERROR, false); desired. Capabilities. set. Javascript. Enabled(true); Web. Driver driver = new Html. Unit. Driver(desired. Capabilities); Selenide: open("/my-application/login");
Selenide. Поддержка Ajax Selenium Web. Driver: Fluent. Wait<By> fluent. Wait = new Fluent. Wait<By>(By. tag. Name("TEXTAREA")); fluent. Wait. polling. Every(100, Time. Unit. MILLISECONDS); fluent. Wait. with. Timeout(1000, Time. Unit. MILLISECONDS); fluent. Wait. until(new Predicate<By>() { public boolean apply(By by) { try { return browser. find. Element(by). is. Displayed(); } catch (No. Such. Element. Exception ex) { return false; } } }); assert. Equals("John", browser. find. Element(By. tag. Name("TEXTAREA")). get. Attribute("value"));
Selenide. Поддержка Ajax Selenide: $("TEXTAREA"). should. Have(value("John"));
Selenide. Скриншоты Selenium Web. Driver: if (driver instanceof Takes. Screenshot) { File scr. File = ((Takes. Screenshot) webdriver). get. Screenshot. As(Output. Type. FILE); File target. File = new File("c: temp" + file. Name + ". png"); File. Utils. copy. File(scr. File, target. File); } Selenide: take. Screen. Shot("my-test-case"); JUnit: public class My. Test { @Rule // Автоматическое создание скриншотов после каждого провалившегося теста public Screen. Shooter make. Screenshot. On. Failure = Screen. Shooter. failed. Tests(); }
Проблема 1 Требование: Система должна корректно работать и отображаться в браузере Firefox Selenium-server не работает с Firefox v. 46+
Проблема 2 Jenkins не запускает сценарии Cucumber JUnit
Проблема 3 На сервере, который используется для CI, нет ни оконного менеджера, ни видеокарты, ни монитора Xvfb
Установка и подключение Xvfb к Jenkins Red. Hat или Cent. OS yum install Xvfb Ubuntu sudo apt-get install xvfb Плагин для Jenkins «Xvfb Plugin» https: //wiki. jenkins-ci. org/display/JENKINS/Xvfb+Plugin
Проблема 4
Проблема 4
Проблема 5 Тесты запускались при каждой сборке через мавен
Проблема 6 Стандартные отчеты в Jenkins имеют неудобный вид
Проблема 6 Стандартные отчеты в Jenkins имеют неудобный вид
Проблема 7
Проблема 8 Selenide/Selenium не тестирует верстку Phantom. CSS
Вопросы?
Meetup#4_Opyt_vnedrenia_BDD_v_razrabotku.pptx