Особенности автоматизации тестирования: single-page vs...
Post on 22-Jun-2015
606 Views
Preview:
TRANSCRIPT
ОСОБЕННОСТИ АВТОМАТИЗАЦИИ ТЕСТИРОВАНИЯSingle-page vs. Multi-page
1-2 марта 2013 г., Киев, Украина
Татьяна Курносоваt.kurnosova@2gis.ru
Saturday, 2 January, 13
2ГИС СЕГОДНЯ
WWW.2GIS.RU
• > 200 городов (Новосибирск, Москва, Одесса, Падуя, …)
• 4 страны (Россия, Казахстан, Украина, Италия)
• > 20 млн. пользователей (desktop, online, mobile)
Saturday, 2 January, 13
ТЕСТИРОВАНИЕ В 2ГИС
WWW.2GIS.RU
Quality Assurance
Developer in Test Team
2GIS Online QA Team
Flamp QA Team
2GIS APIQA Team
Saturday, 2 January, 13
WWW.2GIS.RU
Quality Assurance
Developer in Test Team
2GIS Online QA Team
Flamp QA Team
2GIS APIQA Team
Ручное и автоматизированное
тестирование
• Разработка фреймворков
• Обучение тестировщиков
ТЕСТИРОВАНИЕ В 2ГИС
Saturday, 2 January, 13
ИСТОРИЯ РОЖДЕНИЯ ФРЕЙМВОРКОВ
WWW.2GIS.RU
Электронный справочник (карты + справочный контент) Сервис отзывов о компаниях
городов России
maps.2gis.ru flamp.ru
Поставщиком справочных данных является сервис справочного API (api.2gis.ru)
Multi-pageSingle-page
Saturday, 2 January, 13
WWW.2GIS.RU
• Single-Page Application (SPA)• Multi-Page Application (MPA)
flamp.ru
Автоматизация тестирования продуктов• Создать фреймворки для автоматизации тестирования двух
продуктов (SPA и MPA)
• Покрыть базовый функционал автотестами за минимальное время
maps.2gis.ru
ИСТОРИЯ РОЖДЕНИЯ ФРЕЙМВОРКОВ
Saturday, 2 January, 13
ТРЕБОВАНИЯ К ТЕСТОВЫМ ФРЕЙМВОРКАМ
• Простая архитектура – лёгкость в освоении для тестировщиков
• Компактные тесты – минимум LOC
• Устойчивость к изменениям, расширяемость
WWW.2GIS.RU
Архитектурный стиль KISS – Keep It Short
and Simple
Saturday, 2 January, 13
ИНСТРУМЕНТЫ
WWW.2GIS.RU
Selenium
Framework
Tests
PHPUnit_Selenium
Saturday, 2 January, 13
PAGE OBJECT
WWW.2GIS.RU
Web Page<html></html>
Page Classclass { }
Testclass { }
Saturday, 2 January, 13
WWW.2GIS.RU
class AuthentificationPage{ public function __construct($test) { $this->emailInput = $test->byName('email'); /* ... */ } public function email($value) { $this->emailInput->value($value); return $this; } /* ... */}
Authentification Page
PAGE OBJECT
Saturday, 2 January, 13
WWW.2GIS.RU
public function testAuthentification()
{
$this->url('/test_login_page.html');
$page = new AuthentificationPage($this);
$homePage = $page->email('test@2gis.ru')
->password('TestPassword')
->submit();
$this->assertEquals('Welcome, Test!',
$homePage->welcomeText();
}
PAGE OBJECT
Saturday, 2 January, 13
FLAMP.RU
WWW.2GIS.RU
Saturday, 2 January, 13
FLAMP.RU
WWW.2GIS.RU
Этапы автоматизации• Базовый функционал продукта
• Специализированная сборка, исключающая зависимость от дизайна
Saturday, 2 January, 13
Saturday, 2 January, 13
.
Saturday, 2 January, 13
.
Saturday, 2 January, 13
WWW.2GIS.RU
class ReviewForm(){ public function __construct($test) { $this->reviewText = $test->byId('at_text'); $this->reviewRating = $test->byId('at_rating'); $this->reviewSubmit = $test->byId('at_submit'); } public function fill($text, $rating) { $this->reviewText->value($text); $this->reviewRating->value($rating); }
public function submit() /* ... */}
PAGE COMPONENT
Saturday, 2 January, 13
WWW.2GIS.RU
class ReviewPage{ public function __construct($test) { $this->authForm = $this->getAuthForm(); $this->reviewForm = $this->getReviewForm(); $this->reviewsList = $this->getReviewsList(); /* ... */ } public function addReview($text, $rating) { $this->reviewForm->fill($text, $rating); $this->reviewForm->submit(); return $this; } /* ... */}
PAGE OBJECT
Saturday, 2 January, 13
WWW.2GIS.RU
public function testAddReviewAndCheckInTheList()
{
$this->url('...');
$page = new ReviewPage();
$count = $page->getReviewsCount();
$page = $page->addReview($text, $rating);
$this->assertEquals(
$count + 1,
$page->getReviewsCount()
);
/* other asserts */
}
ПРИМЕР ТЕСТА “ДОБАВЛЕНИЕ ОТЗЫВА”
Saturday, 2 January, 13
WWW.2GIS.RU
public function testAddReviewAndCheckInTheList()
{
$this->url('...');
$page = new ReviewPage();
$count = $page->getReviewsCount();
$page = $page->addReview($text, $rating);
$this->assertEquals(
$count + 1,
$page->getReviewsCount()
);
/* other asserts */
}
ПРИМЕР ТЕСТА “ДОБАВЛЕНИЕ ОТЗЫВА”
Saturday, 2 January, 13
PageObject
ReviewForm
PageObject
ReviewForm
PAGE OBJECT – КЛАССИКА
WWW.2GIS.RU
PageObject
ReviewForm
Для тестирования новой страницы нужно повторно инициализировать компоненты страницы: ReviewForm, ...
Saturday, 2 January, 13
НОВАЯ СТРУКТУРА
WWW.2GIS.RU
ReviewWidget
SearchWidget
• Widget – это функциональный блок страницы
• Тесты создаются на основе Widget’ов, а не страниц
• Повторное использование кода
• Проще архитектура
Saturday, 2 January, 13
WWW.2GIS.RU
public function testAddReviewAndCheckInTheList()
{
$this->openReviewPage();
$count = $this->review->count();
$this->review->add($text, $rating, $user);
$this->assertEquals($count + 1,
$this->review->count()
);
/* other asserts */
}
• Переходим на страницу отзывов о компании
• Смотрим сколько отзывов уже добавлено
• Добавляем тестовый отзыв
• Проверяем что он появился
ПРИМЕР ТЕСТА “ДОБАВЛЕНИЕ ОТЗЫВА”
Saturday, 2 January, 13
WWW.2GIS.RU
public function testAddReviewAndCheckInTheList()
{
$this->openReviewPage();
$count = $this->review->count();
$this->review->add($text, $rating, $user);
$this->assertEquals($count + 1,
$this->review->count()
);
/* other asserts */
}
ПРИМЕР ТЕСТА “ДОБАВЛЕНИЕ ОТЗЫВА”
Saturday, 2 January, 13
MAPS.2GIS.RU
WWW.2GIS.RU
Saturday, 2 January, 13
WWW.2GIS.RU
MAPS.2GIS.RU
Особенности приложения• Большинство элементов страницы создаются динамически
• Картографические элементы создаются при помощи картографического API
Saturday, 2 January, 13
Saturday, 2 January, 13
WWW.2GIS.RU
class OnlinePage{ public function __construct($test) { $this->searchForm = $this->getSearchFormComponent(); $this->catalog = $this->getCatalogComponent(); $this->balloon = $this->getBalloonComponent(); /* ... */ } public function search($what, $where) { $this->searchForm->fill($what, $where); $this->searchForm->submit(); return $this; } /* ... */}
PAGE OBJECT – КЛАССИКА
Saturday, 2 January, 13
WWW.2GIS.RU
class OnlinePage{ public function __construct($test) { $this->searchForm = $this->getSearchFormComponent(); $this->catalog = $this->getCatalogComponent(); $this->balloon = $this->getBalloonComponent(); /* ... */ } public function search($what, $where) { $this->searchForm->fill($what, $where); $this->searchForm->submit(); return $this; } /* ... */}
PAGE OBJECT – КЛАССИКА
Saturday, 2 January, 13
WWW.2GIS.RU
public function testSelectCity(){ $page = $this->getPage(); $page->citySelect->select('Новосибирск');
/* ... */}
ПРИМЕР ТЕСТА “СМЕНА ГОРОДА”
Saturday, 2 January, 13
КОМПОНЕНТЫ
WWW.2GIS.RU
Page • Объект Page реализует доступ к компонентам Catalog, SearchForm и др.
• Тест-кейсы реализуются при помощи операций с объектом Page и его компонентами
Balloon
CatalogSearchForm
Saturday, 2 January, 13
WWW.2GIS.RU
public function testSelectFirmAndShowBalloon()
{
$page = $this->getPage();
$page->selectCity('Новосибирск');
$page->searchForm->send(...);
$firm = $page->catalog->getFirm();
$firm->click();
$this->assertNotNull(
$page->map->getBalloon());
/* other asserts */
}
ПРИМЕР ТЕСТА “ПОЯВЛЕНИЕ BALLOON”
• Выбираем город
• Выполняем поиск организации (“что” , “где”)
• Выбираем случайную фирму из справочника и кликаем по ней
• Проверяем, что объект balloon отобразился на карте
Saturday, 2 January, 13
WWW.2GIS.RU
public function testSelectFirmAndShowBalloon()
{
$page = $this->getPage();
$page->selectCity('Новосибирск');
$page->searchForm->send(...);
$firm = $page->catalog->getRandomFirm();
$firm->click();
$this->assertNotNull(
$page->map->getBalloon());
/* other asserts */
}
ПРИМЕР ТЕСТА “ПОЯВЛЕНИЕ BALLOON”
Saturday, 2 January, 13
КОРОТКАЯ ССЫЛКА
http://go.2gis.ru/pis8
Saturday, 2 January, 13
СНИМОК СОСТОЯНИЯ
• Состояние – это текущие (runtime) параметры всех компонентов страницы
• Состояния позволяют проверять корректность работы коротких ссылок
Saturday, 2 January, 13
WWW.2GIS.RU
public function testShortLink(){ /* ... */ $state = $this->page->createState(); /* * Create short link and open it */ $this->assertEquals($state, $this->page->createState()); /* other asserts */}
ТЕСТ “КОРОТКАЯ ССЫЛКА”
• Формируем тестовое состояние
• Создаём короткую ссылку
• Переходим по короткой ссылке
• Сравниваем состояния
Saturday, 2 January, 13
WWW.2GIS.RU
public function testShortLink(){ /* ... */ $state = $this->page->createState(); /* * Create short link and open it */ $this->assertEquals($state, $this->page->createState()); /* other asserts */}
ТЕСТ “КОРОТКАЯ ССЫЛКА”
Saturday, 2 January, 13
WWW.2GIS.RU
/** * Проверка Example feature * - step1 * - step2 * @suite Example * @section Example feature */public function testExample(){ /* ... */}
ИНТЕГРАЦИЯ С TMS
Saturday, 2 January, 13
KEEP IT SHORT AND SIMPLE
WWW.2GIS.RU
2GisOnlineTestFramework
FlampTestFrameworkComponent Page Test
TestWidget
Saturday, 2 January, 13
WWW.2GIS.RU
ЗАКЛЮЧЕНИЕ
• Простота в использовании фреймворков позволила подключить к автоматизации тестировщиков продуктов
• Основной функционал продуктов покрыт автотестами
• Простая архитектура фреймворков позволила тестировщикам поддерживать и развивать фреймворки
Saturday, 2 January, 13
СПАСИБО ЗА ВНИМАНИЕ!
Татьяна Курносоваt.kurnosova@2gis.ru
@tanyfromsiberia
1-2 марта 2013 г., Киев, УкраинаSaturday, 2 January, 13
top related