41
ОСОБЕННОСТИ АВТОМАТИЗАЦИИ ТЕСТИРОВАНИЯ Single-page vs. Multi-page 1-2 марта 2013 г ., Киев, Украина Татьяна Курносова [email protected] Saturday, 2 January, 13

Особенности автоматизации тестирования: Single-page vs Multi-page (Seleniumcamp 2013)

Embed Size (px)

Citation preview

Page 1: Особенности автоматизации тестирования: Single-page vs Multi-page (Seleniumcamp 2013)

ОСОБЕННОСТИ АВТОМАТИЗАЦИИ ТЕСТИРОВАНИЯSingle-page vs. Multi-page

1-2 марта 2013 г., Киев, Украина

Татьяна Курносова[email protected]

Saturday, 2 January, 13

Page 2: Особенности автоматизации тестирования: Single-page vs Multi-page (Seleniumcamp 2013)

2ГИС СЕГОДНЯ

WWW.2GIS.RU

• > 200 городов (Новосибирск, Москва, Одесса, Падуя, …)

• 4 страны (Россия, Казахстан, Украина, Италия)

• > 20 млн. пользователей (desktop, online, mobile)

Saturday, 2 January, 13

Page 3: Особенности автоматизации тестирования: Single-page vs Multi-page (Seleniumcamp 2013)

ТЕСТИРОВАНИЕ В 2ГИС

WWW.2GIS.RU

Quality Assurance

Developer in Test Team

2GIS Online QA Team

Flamp QA Team

2GIS APIQA Team

Saturday, 2 January, 13

Page 4: Особенности автоматизации тестирования: Single-page vs Multi-page (Seleniumcamp 2013)

WWW.2GIS.RU

Quality Assurance

Developer in Test Team

2GIS Online QA Team

Flamp QA Team

2GIS APIQA Team

Ручное и автоматизированное

тестирование

• Разработка фреймворков

• Обучение тестировщиков

ТЕСТИРОВАНИЕ В 2ГИС

Saturday, 2 January, 13

Page 5: Особенности автоматизации тестирования: Single-page vs Multi-page (Seleniumcamp 2013)

ИСТОРИЯ РОЖДЕНИЯ ФРЕЙМВОРКОВ

WWW.2GIS.RU

Электронный справочник (карты + справочный контент) Сервис отзывов о компаниях

городов России

maps.2gis.ru flamp.ru

Поставщиком справочных данных является сервис справочного API (api.2gis.ru)

Multi-pageSingle-page

Saturday, 2 January, 13

Page 6: Особенности автоматизации тестирования: Single-page vs Multi-page (Seleniumcamp 2013)

WWW.2GIS.RU

• Single-Page Application (SPA)• Multi-Page Application (MPA)

flamp.ru

Автоматизация тестирования продуктов• Создать фреймворки для автоматизации тестирования двух

продуктов (SPA и MPA)

• Покрыть базовый функционал автотестами за минимальное время

maps.2gis.ru

ИСТОРИЯ РОЖДЕНИЯ ФРЕЙМВОРКОВ

Saturday, 2 January, 13

Page 7: Особенности автоматизации тестирования: Single-page vs Multi-page (Seleniumcamp 2013)

ТРЕБОВАНИЯ К ТЕСТОВЫМ ФРЕЙМВОРКАМ

• Простая архитектура – лёгкость в освоении для тестировщиков

• Компактные тесты – минимум LOC

• Устойчивость к изменениям, расширяемость

WWW.2GIS.RU

Архитектурный стиль KISS – Keep It Short

and Simple

Saturday, 2 January, 13

Page 8: Особенности автоматизации тестирования: Single-page vs Multi-page (Seleniumcamp 2013)

ИНСТРУМЕНТЫ

WWW.2GIS.RU

Selenium

Framework

Tests

PHPUnit_Selenium

Saturday, 2 January, 13

Page 9: Особенности автоматизации тестирования: Single-page vs Multi-page (Seleniumcamp 2013)

PAGE OBJECT

WWW.2GIS.RU

Web Page<html></html>

Page Classclass { }

Testclass { }

Saturday, 2 January, 13

Page 10: Особенности автоматизации тестирования: Single-page vs Multi-page (Seleniumcamp 2013)

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

Page 11: Особенности автоматизации тестирования: Single-page vs Multi-page (Seleniumcamp 2013)

WWW.2GIS.RU

public function testAuthentification()

{

$this->url('/test_login_page.html');

$page = new AuthentificationPage($this);

$homePage = $page->email('[email protected]')

->password('TestPassword')

->submit();

$this->assertEquals('Welcome, Test!',

$homePage->welcomeText();

}

PAGE OBJECT

Saturday, 2 January, 13

Page 12: Особенности автоматизации тестирования: Single-page vs Multi-page (Seleniumcamp 2013)

FLAMP.RU

WWW.2GIS.RU

Saturday, 2 January, 13

Page 13: Особенности автоматизации тестирования: Single-page vs Multi-page (Seleniumcamp 2013)

FLAMP.RU

WWW.2GIS.RU

Этапы автоматизации• Базовый функционал продукта

• Специализированная сборка, исключающая зависимость от дизайна

Saturday, 2 January, 13

Page 14: Особенности автоматизации тестирования: Single-page vs Multi-page (Seleniumcamp 2013)

Saturday, 2 January, 13

Page 15: Особенности автоматизации тестирования: Single-page vs Multi-page (Seleniumcamp 2013)

.

Saturday, 2 January, 13

Page 16: Особенности автоматизации тестирования: Single-page vs Multi-page (Seleniumcamp 2013)

.

Saturday, 2 January, 13

Page 17: Особенности автоматизации тестирования: Single-page vs Multi-page (Seleniumcamp 2013)

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

Page 18: Особенности автоматизации тестирования: Single-page vs Multi-page (Seleniumcamp 2013)

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

Page 19: Особенности автоматизации тестирования: Single-page vs Multi-page (Seleniumcamp 2013)

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

Page 20: Особенности автоматизации тестирования: Single-page vs Multi-page (Seleniumcamp 2013)

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

Page 21: Особенности автоматизации тестирования: Single-page vs Multi-page (Seleniumcamp 2013)

PageObject

ReviewForm

PageObject

ReviewForm

PAGE OBJECT – КЛАССИКА

WWW.2GIS.RU

PageObject

ReviewForm

Для тестирования новой страницы нужно повторно инициализировать компоненты страницы: ReviewForm, ...

Saturday, 2 January, 13

Page 22: Особенности автоматизации тестирования: Single-page vs Multi-page (Seleniumcamp 2013)

НОВАЯ СТРУКТУРА

WWW.2GIS.RU

ReviewWidget

SearchWidget

• Widget – это функциональный блок страницы

• Тесты создаются на основе Widget’ов, а не страниц

• Повторное использование кода

• Проще архитектура

Saturday, 2 January, 13

Page 23: Особенности автоматизации тестирования: Single-page vs Multi-page (Seleniumcamp 2013)

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

Page 24: Особенности автоматизации тестирования: Single-page vs Multi-page (Seleniumcamp 2013)

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

Page 25: Особенности автоматизации тестирования: Single-page vs Multi-page (Seleniumcamp 2013)

MAPS.2GIS.RU

WWW.2GIS.RU

Saturday, 2 January, 13

Page 26: Особенности автоматизации тестирования: Single-page vs Multi-page (Seleniumcamp 2013)

WWW.2GIS.RU

MAPS.2GIS.RU

Особенности приложения• Большинство элементов страницы создаются динамически

• Картографические элементы создаются при помощи картографического API

Saturday, 2 January, 13

Page 27: Особенности автоматизации тестирования: Single-page vs Multi-page (Seleniumcamp 2013)

Saturday, 2 January, 13

Page 28: Особенности автоматизации тестирования: Single-page vs Multi-page (Seleniumcamp 2013)

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

Page 29: Особенности автоматизации тестирования: Single-page vs Multi-page (Seleniumcamp 2013)

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

Page 30: Особенности автоматизации тестирования: Single-page vs Multi-page (Seleniumcamp 2013)

WWW.2GIS.RU

public function testSelectCity(){ $page = $this->getPage(); $page->citySelect->select('Новосибирск');

/* ... */}

ПРИМЕР ТЕСТА “СМЕНА ГОРОДА”

Saturday, 2 January, 13

Page 31: Особенности автоматизации тестирования: Single-page vs Multi-page (Seleniumcamp 2013)

КОМПОНЕНТЫ

WWW.2GIS.RU

Page • Объект Page реализует доступ к компонентам Catalog, SearchForm и др.

• Тест-кейсы реализуются при помощи операций с объектом Page и его компонентами

Balloon

CatalogSearchForm

Saturday, 2 January, 13

Page 32: Особенности автоматизации тестирования: Single-page vs Multi-page (Seleniumcamp 2013)

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

Page 33: Особенности автоматизации тестирования: Single-page vs Multi-page (Seleniumcamp 2013)

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

Page 34: Особенности автоматизации тестирования: Single-page vs Multi-page (Seleniumcamp 2013)

КОРОТКАЯ ССЫЛКА

http://go.2gis.ru/pis8

Saturday, 2 January, 13

Page 35: Особенности автоматизации тестирования: Single-page vs Multi-page (Seleniumcamp 2013)

СНИМОК СОСТОЯНИЯ

• Состояние – это текущие (runtime) параметры всех компонентов страницы

• Состояния позволяют проверять корректность работы коротких ссылок

Saturday, 2 January, 13

Page 36: Особенности автоматизации тестирования: Single-page vs Multi-page (Seleniumcamp 2013)

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

Page 37: Особенности автоматизации тестирования: Single-page vs Multi-page (Seleniumcamp 2013)

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

Page 38: Особенности автоматизации тестирования: Single-page vs Multi-page (Seleniumcamp 2013)

WWW.2GIS.RU

/** * Проверка Example feature * - step1 * - step2 * @suite Example * @section Example feature */public function testExample(){ /* ... */}

ИНТЕГРАЦИЯ С TMS

Saturday, 2 January, 13

Page 39: Особенности автоматизации тестирования: Single-page vs Multi-page (Seleniumcamp 2013)

KEEP IT SHORT AND SIMPLE

WWW.2GIS.RU

2GisOnlineTestFramework

FlampTestFrameworkComponent Page Test

TestWidget

Saturday, 2 January, 13

Page 40: Особенности автоматизации тестирования: Single-page vs Multi-page (Seleniumcamp 2013)

WWW.2GIS.RU

ЗАКЛЮЧЕНИЕ

• Простота в использовании фреймворков позволила подключить к автоматизации тестировщиков продуктов

• Основной функционал продуктов покрыт автотестами

• Простая архитектура фреймворков позволила тестировщикам поддерживать и развивать фреймворки

Saturday, 2 January, 13

Page 41: Особенности автоматизации тестирования: Single-page vs Multi-page (Seleniumcamp 2013)

СПАСИБО ЗА ВНИМАНИЕ!

Татьяна Курносова[email protected]

@tanyfromsiberia

1-2 марта 2013 г., Киев, УкраинаSaturday, 2 January, 13