2. План мероприятия Подумаем над тем, что будем автоматизировать. Порассуждаем, как лучше автоматизировать. Положительное и негативное тестирование. А нужна ли архитектура в авто-тестах? Попытаемся как-то оценить наши авто-тесты и выгоду от них.
3. У нас будет автоматизация тестирования!!! У нас будет автоматизация!!! У нас будет автоматизация!!! Давайте автоматизировать
4. Как это делается обычно Мы пишем скрипты Тестовые скрипты – тест-кейсы Много скриптов, сколько можем написать Скрипт1 Скрипт2 Скрипт3 Скрипт Скрипт Скрипт Скрипт Скрипт Скрипт Скрипт Скрипт Скрипт Именно тестовые скрипты
5. Как выглядят эти скрипты? <?php class MyTest extends PHPUnit_Extensions_SeleniumTestCase { protected function setUp() { } public function testLogin() { //здесь был селениум } public function testAddNews() { //здесь тоже был селениум } public function testPresentNews() { //кругом одни евреи } ?>
6. Но тут возникает проблема Это невозможно поддерживать Используем только раз – для приемочного тестирования Я не знаю, что делают эти тесты Их писал Вася!..
7. Давайте тесты улучшать Пока треугольные Наши тесты Базовое средство-драйвер (Selenium RC + PHPUnit) Наш тестовый фреймворк
8. Чего хочу? Наши тесты Понятные (сел, понял, поменял) Работаем с бизнес-логикой Тесты не зависят от интерфейса (только бизнес-логика) И пишутся быстро Наш тестовый фреймворк Вся работа с селениумом Локализация проблемы (правим только в одном месте) В идеале: одын раз написал – сиди и работай
9. Так, стоп! Сейчас будем ковыряться в системе. А чего собственно автоматизировать? А может не стоит? Писать отдельные кейсы на каждую ЮСку или делать тестовые сценарии? Как-то делить тесты по группам или пусть все в одной куче? Тестировать все или может не все?
18. Как мы будем пользоваться тестами? Приемочное тестирование Заказчик доволен Пишем тесты и стабилизируем Довольны все Регрессионное тестирование
19. А давайте напишем свой тестовый фреймворк Структурный подход Процессный подход Какие-то объекты Какие-то процессы
20. Решили: будем делать много объектов! Публичная страница программы Публичная страница Описание программы Форма авторизации Публичная страница рубрики Меню Список программ
21. Тоже самое, только в классах ProgramPublicPage PublicPage DescriptionArea AuthForm RubricPublicPage RubricList ProgramList
22. А теперь тест! public function testViewProgram() { $oRubricPage = new RubricPublicPage(); $oRubricPage->getProgramList()->goToProgram($sName); $oProgramPage = new ProgramPublicPage(); $oProgramPage->getRubricList()->isRibricSelected($sNameRubric); } А еще локаторы можно вынести в конфиги
27. А теперь тест! public function testViewProgram() { $oManager = new Manager(); $oManager->addRubric($aValue1); $oManager->addProgram($aValue2); $oUser = new User(); $oUser->viewRubric ($aValue1); $oUser->viewProgram($aValue2); }
28. Мат. часть. Сколько вешать в граммах? Сколько автоматизировать? Считаем покрытие фич (ЮСок)
29. ТоварищЪ, можно пойти дальше! И собирать метрики Время выполнения авто-тестов Количество тестов Количество стабильных тестов (о__О, очень важно) Количество багов, найденных авто-тестами
30. У матросов нет вопросов??? Сташевский Павел email: pavel.stashevskiy@softline.ru Skype: pavel.stashevsky_sl