Особенности автоматизации тестирования: Single-page vs...

Post on 22-Jun-2015

1.381 views 1 download

Transcript of Особенности автоматизации тестирования: Single-page vs...

ОСОБЕННОСТИ АВТОМАТИЗАЦИИ ТЕСТИРОВАНИЯ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