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

                                         Татьяна Курносова
                                            t.kurnosova@2gis.ru




      1-2 марта 2013 г., Киев, Украина
Saturday, 2 January, 13
2ГИС СЕГОДНЯ


•    > 200 городов
     (Новосибирск, Москва, Одесса, Падуя, …)
•    4 страны (Россия, Казахстан, Украина, Италия)
•    > 20 млн. пользователей (desktop, online, mobile)




     WWW.2GIS.RU


Saturday, 2 January, 13
ТЕСТИРОВАНИЕ В 2ГИС

                                    Quality Assurance


                          2GIS Online
                           QA Team
                                                    Developer
                                    2GIS API
                                                     in Test
                                    QA Team           Team


                           Flamp
                          QA Team




     WWW.2GIS.RU


Saturday, 2 January, 13
ТЕСТИРОВАНИЕ В 2ГИС

                                            Quality Assurance


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




                                   QA Team
                                                               Developer
                                            2GIS API
                                                                in Test
                                            QA Team              Team
    тестирование




                                   Flamp
                                  QA Team
                                                       •   Разработка фреймворков
                                                       •   Обучение тестировщиков


        WWW.2GIS.RU


Saturday, 2 January, 13
ИСТОРИЯ РОЖДЕНИЯ ФРЕЙМВОРКОВ
                          maps.2gis.ru                        flamp.ru

                                    Single-page                       Multi-page




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

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

     WWW.2GIS.RU


Saturday, 2 January, 13
ИСТОРИЯ РОЖДЕНИЯ ФРЕЙМВОРКОВ
                          maps.2gis.ru                  flamp.ru




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

        •   Покрыть базовый функционал автотестами
        •   Single-Page Application (SPA)
            за минимальное время
                                           • Multi-Page Application (MPA)



     WWW.2GIS.RU


Saturday, 2 January, 13
ТРЕБОВАНИЯ К ТЕСТОВЫМ ФРЕЙМВОРКАМ


                             •   Простая архитектура – лёгкость в освоении
                                 для тестировщиков
     Архитектурный стиль
      KISS – Keep It Short
                             •   Компактные тесты – минимум LOC
          and Simple
                             •   Устойчивость к изменениям, расширяемость




     WWW.2GIS.RU


Saturday, 2 January, 13
ИНСТРУМЕНТЫ


                                        Tests


                          Framework



                     PHPUnit_Selenium


                            Selenium




     WWW.2GIS.RU


Saturday, 2 January, 13
PAGE OBJECT




       Web Page            Page Class   Test
       <html>              class { }    class { }
       </html>




     WWW.2GIS.RU


Saturday, 2 January, 13
PAGE OBJECT
     Authentification Page
                             class AuthentificationPage
                             {
                                 public function __construct($test)
                                 {
                                     $this->emailInput =
                                        $test->byName('email');
                                     /* ... */
                                 }

                                 public function email($value)
                                 {
                                     $this->emailInput->value($value);
                                     return $this;
                                 }
                                 /* ... */
                             }



     WWW.2GIS.RU


Saturday, 2 January, 13
PAGE OBJECT

    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();
    }




     WWW.2GIS.RU


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
PAGE COMPONENT

    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()
            /* ... */
    }



     WWW.2GIS.RU


Saturday, 2 January, 13
PAGE OBJECT

    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;
            }
            /* ... */
    }



     WWW.2GIS.RU


Saturday, 2 January, 13
ПРИМЕР ТЕСТА “ДОБАВЛЕНИЕ ОТЗЫВА”

    public function testAddReviewAndCheckInTheList()
    {
            $this->url('...');
            $page = new ReviewPage();
            $count = $page->getReviewsCount();
            $page = $page->addReview($text, $rating);
            $this->assertEquals(
                          $count + 1,
                          $page->getReviewsCount()
              );
            /* other asserts */
    }



     WWW.2GIS.RU


Saturday, 2 January, 13
ПРИМЕР ТЕСТА “ДОБАВЛЕНИЕ ОТЗЫВА”

    public function testAddReviewAndCheckInTheList()
    {
            $this->url('...');
            $page = new ReviewPage();
            $count = $page->getReviewsCount();
            $page = $page->addReview($text, $rating);
            $this->assertEquals(
                          $count + 1,
                          $page->getReviewsCount()
              );
            /* other asserts */
    }



     WWW.2GIS.RU


Saturday, 2 January, 13
PAGE OBJECT – КЛАССИКА
                                        PageObject
                          PageObject


      PageObject




                                         ReviewForm
                           ReviewForm


        ReviewForm


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

     WWW.2GIS.RU


Saturday, 2 January, 13
НОВАЯ СТРУКТУРА
                                         •   Widget – это функциональный блок
                                             страницы
                     SearchWidget        •   Тесты создаются на основе Widget’ов,
                                             а не страниц




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




     WWW.2GIS.RU


Saturday, 2 January, 13
ПРИМЕР ТЕСТА “ДОБАВЛЕНИЕ ОТЗЫВА”

    public function testAddReviewAndCheckInTheList()
    {
          $this->openReviewPage();
    •    Переходим на страницу отзывов о компании
          $count = $this->review->count();
          $this->review->add($text, $rating, $user);
    •    Смотрим сколько отзывов уже добавлено
          $this->assertEquals($count + 1,
    •    Добавляем тестовый отзыв
                  $this->review->count()
          );
    •    Проверяем что он появился
          /* other asserts */
    }




     WWW.2GIS.RU


Saturday, 2 January, 13
ПРИМЕР ТЕСТА “ДОБАВЛЕНИЕ ОТЗЫВА”

    public function testAddReviewAndCheckInTheList()
    {
            $this->openReviewPage();
            $count = $this->review->count();
            $this->review->add($text, $rating, $user);
            $this->assertEquals($count + 1,
                          $this->review->count()
            );
            /* other asserts */
    }




     WWW.2GIS.RU


Saturday, 2 January, 13
MAPS.2GIS.RU




     WWW.2GIS.RU


Saturday, 2 January, 13
MAPS.2GIS.RU




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

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




     WWW.2GIS.RU


Saturday, 2 January, 13
Saturday, 2 January, 13
PAGE OBJECT – КЛАССИКА

    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;
            }
            /* ... */
    }



     WWW.2GIS.RU


Saturday, 2 January, 13
PAGE OBJECT – КЛАССИКА

    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;
            }
            /* ... */
    }



     WWW.2GIS.RU


Saturday, 2 January, 13
ПРИМЕР ТЕСТА “СМЕНА ГОРОДА”

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




     WWW.2GIS.RU


Saturday, 2 January, 13
КОМПОНЕНТЫ

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

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




     WWW.2GIS.RU


Saturday, 2 January, 13
ПРИМЕР ТЕСТА “ПОЯВЛЕНИЕ BALLOON”

    public function testSelectFirmAndShowBalloon()
    {
          $page = $this->getPage();
    •    Выбираем город
          $page->selectCity('Новосибирск');
          $page->searchForm->send(...);
    •    Выполняем поиск организации (“что” , “где”)
          $firm = $page->catalog->getFirm();
    •    Выбираем случайную фирму из справочника и кликаем по ней
          $firm->click();
          $this->assertNotNull(
    •    Проверяем, что объект balloon отобразился на карте
                             $page->map->getBalloon());
            /* other asserts */
    }




     WWW.2GIS.RU


Saturday, 2 January, 13
ПРИМЕР ТЕСТА “ПОЯВЛЕНИЕ BALLOON”

    public function testSelectFirmAndShowBalloon()
    {
            $page = $this->getPage();
            $page->selectCity('Новосибирск');
            $page->searchForm->send(...);
            $firm = $page->catalog->getRandomFirm();
            $firm->click();
            $this->assertNotNull(
                              $page->map->getBalloon());
            /* other asserts */
    }




     WWW.2GIS.RU


Saturday, 2 January, 13
КОРОТКАЯ ССЫЛКА



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




Saturday, 2 January, 13
СНИМОК СОСТОЯНИЯ




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




Saturday, 2 January, 13
ТЕСТ “КОРОТКАЯ ССЫЛКА”

    public function testShortLink()
    {
        /* ... */
    • Формируем тестовое состояние
        $state = $this->page->createState();
        /*
    • Создаём короткую ссылку and open it
         * Create short link
         */
    • Переходим по короткой ссылке
        $this->assertEquals($state,

    • Сравниваем $this->page->createState());
                 состояния
        /* other asserts */
    }




     WWW.2GIS.RU


Saturday, 2 January, 13
ТЕСТ “КОРОТКАЯ ССЫЛКА”

    public function testShortLink()
    {
        /* ... */
        $state = $this->page->createState();
        /*
         * Create short link and open it
         */
        $this->assertEquals($state,
                 $this->page->createState());
        /* other asserts */
    }




     WWW.2GIS.RU


Saturday, 2 January, 13
ИНТЕГРАЦИЯ С TMS

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




     WWW.2GIS.RU


Saturday, 2 January, 13
KEEP IT SHORT AND SIMPLE

                2GisOnlineTestFramework       Widget       Test




        Component           Page     Test   FlampTestFramework



     WWW.2GIS.RU


Saturday, 2 January, 13
ЗАКЛЮЧЕНИЕ


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

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

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




     WWW.2GIS.RU


Saturday, 2 January, 13
СПАСИБО ЗА ВНИМАНИЕ!

                                         Татьяна Курносова
                                            t.kurnosova@2gis.ru
                                               @tanyfromsiberia



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

More Related Content

Viewers also liked

«Частые релизы в Enterprise» – Алексей Чурбанов, 2ГИС
«Частые релизы в Enterprise» – Алексей Чурбанов, 2ГИС«Частые релизы в Enterprise» – Алексей Чурбанов, 2ГИС
«Частые релизы в Enterprise» – Алексей Чурбанов, 2ГИС
2ГИС Технологии
 
«Произвольная смена дизайна системного скроллбара», Дмитрий Кузнецов
«Произвольная смена дизайна системного скроллбара», Дмитрий Кузнецов«Произвольная смена дизайна системного скроллбара», Дмитрий Кузнецов
«Произвольная смена дизайна системного скроллбара», Дмитрий Кузнецов
2ГИС Технологии
 
Как защитить свой код
Как защитить свой кодКак защитить свой код
Как защитить свой код
2ГИС Технологии
 
«Автоматизация тестовой инфраструктуры в 2ГИС» — Антон Голицын, 2ГИС
«Автоматизация тестовой инфраструктуры в 2ГИС» — Антон Голицын, 2ГИС«Автоматизация тестовой инфраструктуры в 2ГИС» — Антон Голицын, 2ГИС
«Автоматизация тестовой инфраструктуры в 2ГИС» — Антон Голицын, 2ГИС
2ГИС Технологии
 
Building scalable applications with angular js
Building scalable applications with angular jsBuilding scalable applications with angular js
Building scalable applications with angular js
Andrew Alpert
 
Highway to Continuous Integration — Денис Трифонов, 2ГИС
Highway to Continuous Integration — Денис Трифонов, 2ГИСHighway to Continuous Integration — Денис Трифонов, 2ГИС
Highway to Continuous Integration — Денис Трифонов, 2ГИС
2ГИС Технологии
 
«Тестируем мобильное приложение в суровых реалиях Интернета» – Андрей Усов, 2ГИС
«Тестируем мобильное приложение в суровых реалиях Интернета» – Андрей Усов, 2ГИС«Тестируем мобильное приложение в суровых реалиях Интернета» – Андрей Усов, 2ГИС
«Тестируем мобильное приложение в суровых реалиях Интернета» – Андрей Усов, 2ГИС
2ГИС Технологии
 
Knockoutjs на примере 2ГИС-Онлайн
Knockoutjs на примере 2ГИС-ОнлайнKnockoutjs на примере 2ГИС-Онлайн
Knockoutjs на примере 2ГИС-Онлайн2ГИС Технологии
 
Суперсилы Chrome developer tools
Суперсилы Chrome developer toolsСуперсилы Chrome developer tools
Суперсилы Chrome developer tools
2ГИС Технологии
 
«GitHub Flow — немного сложнее, чем на бумаге», Александр Бирюков
«GitHub Flow — немного сложнее, чем на бумаге», Александр Бирюков«GitHub Flow — немного сложнее, чем на бумаге», Александр Бирюков
«GitHub Flow — немного сложнее, чем на бумаге», Александр Бирюков
2ГИС Технологии
 
«Реактивные грабли» — Дмитрий Кулижников, 2ГИС
«Реактивные грабли» — Дмитрий Кулижников, 2ГИС«Реактивные грабли» — Дмитрий Кулижников, 2ГИС
«Реактивные грабли» — Дмитрий Кулижников, 2ГИС
2ГИС Технологии
 
Тимофей Чаптыков «Верстальщик должен быть ленивый»
Тимофей Чаптыков «Верстальщик должен быть ленивый»Тимофей Чаптыков «Верстальщик должен быть ленивый»
Тимофей Чаптыков «Верстальщик должен быть ленивый»
DevDay
 
Роман Янке
Роман ЯнкеРоман Янке
Роман Янке
CodeFest
 
Лайфхаки ручного тестирования на мобилках
Лайфхаки ручного тестирования на мобилкахЛайфхаки ручного тестирования на мобилках
Лайфхаки ручного тестирования на мобилках
SQALab
 

Viewers also liked (14)

«Частые релизы в Enterprise» – Алексей Чурбанов, 2ГИС
«Частые релизы в Enterprise» – Алексей Чурбанов, 2ГИС«Частые релизы в Enterprise» – Алексей Чурбанов, 2ГИС
«Частые релизы в Enterprise» – Алексей Чурбанов, 2ГИС
 
«Произвольная смена дизайна системного скроллбара», Дмитрий Кузнецов
«Произвольная смена дизайна системного скроллбара», Дмитрий Кузнецов«Произвольная смена дизайна системного скроллбара», Дмитрий Кузнецов
«Произвольная смена дизайна системного скроллбара», Дмитрий Кузнецов
 
Как защитить свой код
Как защитить свой кодКак защитить свой код
Как защитить свой код
 
«Автоматизация тестовой инфраструктуры в 2ГИС» — Антон Голицын, 2ГИС
«Автоматизация тестовой инфраструктуры в 2ГИС» — Антон Голицын, 2ГИС«Автоматизация тестовой инфраструктуры в 2ГИС» — Антон Голицын, 2ГИС
«Автоматизация тестовой инфраструктуры в 2ГИС» — Антон Голицын, 2ГИС
 
Building scalable applications with angular js
Building scalable applications with angular jsBuilding scalable applications with angular js
Building scalable applications with angular js
 
Highway to Continuous Integration — Денис Трифонов, 2ГИС
Highway to Continuous Integration — Денис Трифонов, 2ГИСHighway to Continuous Integration — Денис Трифонов, 2ГИС
Highway to Continuous Integration — Денис Трифонов, 2ГИС
 
«Тестируем мобильное приложение в суровых реалиях Интернета» – Андрей Усов, 2ГИС
«Тестируем мобильное приложение в суровых реалиях Интернета» – Андрей Усов, 2ГИС«Тестируем мобильное приложение в суровых реалиях Интернета» – Андрей Усов, 2ГИС
«Тестируем мобильное приложение в суровых реалиях Интернета» – Андрей Усов, 2ГИС
 
Knockoutjs на примере 2ГИС-Онлайн
Knockoutjs на примере 2ГИС-ОнлайнKnockoutjs на примере 2ГИС-Онлайн
Knockoutjs на примере 2ГИС-Онлайн
 
Суперсилы Chrome developer tools
Суперсилы Chrome developer toolsСуперсилы Chrome developer tools
Суперсилы Chrome developer tools
 
«GitHub Flow — немного сложнее, чем на бумаге», Александр Бирюков
«GitHub Flow — немного сложнее, чем на бумаге», Александр Бирюков«GitHub Flow — немного сложнее, чем на бумаге», Александр Бирюков
«GitHub Flow — немного сложнее, чем на бумаге», Александр Бирюков
 
«Реактивные грабли» — Дмитрий Кулижников, 2ГИС
«Реактивные грабли» — Дмитрий Кулижников, 2ГИС«Реактивные грабли» — Дмитрий Кулижников, 2ГИС
«Реактивные грабли» — Дмитрий Кулижников, 2ГИС
 
Тимофей Чаптыков «Верстальщик должен быть ленивый»
Тимофей Чаптыков «Верстальщик должен быть ленивый»Тимофей Чаптыков «Верстальщик должен быть ленивый»
Тимофей Чаптыков «Верстальщик должен быть ленивый»
 
Роман Янке
Роман ЯнкеРоман Янке
Роман Янке
 
Лайфхаки ручного тестирования на мобилках
Лайфхаки ручного тестирования на мобилкахЛайфхаки ручного тестирования на мобилках
Лайфхаки ручного тестирования на мобилках
 

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

  • 1. ОСОБЕННОСТИ АВТОМАТИЗАЦИИ ТЕСТИРОВАНИЯ Single-page vs. Multi-page Татьяна Курносова t.kurnosova@2gis.ru 1-2 марта 2013 г., Киев, Украина Saturday, 2 January, 13
  • 2. 2ГИС СЕГОДНЯ • > 200 городов (Новосибирск, Москва, Одесса, Падуя, …) • 4 страны (Россия, Казахстан, Украина, Италия) • > 20 млн. пользователей (desktop, online, mobile) WWW.2GIS.RU Saturday, 2 January, 13
  • 3. ТЕСТИРОВАНИЕ В 2ГИС Quality Assurance 2GIS Online QA Team Developer 2GIS API in Test QA Team Team Flamp QA Team WWW.2GIS.RU Saturday, 2 January, 13
  • 4. ТЕСТИРОВАНИЕ В 2ГИС Quality Assurance 2GIS Online Ручное и автоматизированное QA Team Developer 2GIS API in Test QA Team Team тестирование Flamp QA Team • Разработка фреймворков • Обучение тестировщиков WWW.2GIS.RU Saturday, 2 January, 13
  • 5. ИСТОРИЯ РОЖДЕНИЯ ФРЕЙМВОРКОВ maps.2gis.ru flamp.ru Single-page Multi-page Электронный справочник (карты + справочный контент) Сервис отзывов о компаниях городов России Поставщиком справочных данных является сервис справочного API (api.2gis.ru) WWW.2GIS.RU Saturday, 2 January, 13
  • 6. ИСТОРИЯ РОЖДЕНИЯ ФРЕЙМВОРКОВ maps.2gis.ru flamp.ru Автоматизация тестирования продуктов • Создать фреймворки для автоматизации тестирования двух продуктов (SPA и MPA) • Покрыть базовый функционал автотестами • Single-Page Application (SPA) за минимальное время • Multi-Page Application (MPA) WWW.2GIS.RU Saturday, 2 January, 13
  • 7. ТРЕБОВАНИЯ К ТЕСТОВЫМ ФРЕЙМВОРКАМ • Простая архитектура – лёгкость в освоении для тестировщиков Архитектурный стиль KISS – Keep It Short • Компактные тесты – минимум LOC and Simple • Устойчивость к изменениям, расширяемость WWW.2GIS.RU Saturday, 2 January, 13
  • 8. ИНСТРУМЕНТЫ Tests Framework PHPUnit_Selenium Selenium WWW.2GIS.RU Saturday, 2 January, 13
  • 9. PAGE OBJECT Web Page Page Class Test <html> class { } class { } </html> WWW.2GIS.RU Saturday, 2 January, 13
  • 10. PAGE OBJECT Authentification Page class AuthentificationPage { public function __construct($test) { $this->emailInput = $test->byName('email'); /* ... */ } public function email($value) { $this->emailInput->value($value); return $this; } /* ... */ } WWW.2GIS.RU Saturday, 2 January, 13
  • 11. PAGE OBJECT 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(); } WWW.2GIS.RU Saturday, 2 January, 13
  • 12. FLAMP.RU WWW.2GIS.RU Saturday, 2 January, 13
  • 13. FLAMP.RU Этапы автоматизации • Базовый функционал продукта • Специализированная сборка, исключающая зависимость от дизайна WWW.2GIS.RU Saturday, 2 January, 13
  • 17. PAGE COMPONENT 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() /* ... */ } WWW.2GIS.RU Saturday, 2 January, 13
  • 18. PAGE OBJECT 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; } /* ... */ } WWW.2GIS.RU Saturday, 2 January, 13
  • 19. ПРИМЕР ТЕСТА “ДОБАВЛЕНИЕ ОТЗЫВА” public function testAddReviewAndCheckInTheList() { $this->url('...'); $page = new ReviewPage(); $count = $page->getReviewsCount(); $page = $page->addReview($text, $rating); $this->assertEquals( $count + 1, $page->getReviewsCount() ); /* other asserts */ } WWW.2GIS.RU Saturday, 2 January, 13
  • 20. ПРИМЕР ТЕСТА “ДОБАВЛЕНИЕ ОТЗЫВА” public function testAddReviewAndCheckInTheList() { $this->url('...'); $page = new ReviewPage(); $count = $page->getReviewsCount(); $page = $page->addReview($text, $rating); $this->assertEquals( $count + 1, $page->getReviewsCount() ); /* other asserts */ } WWW.2GIS.RU Saturday, 2 January, 13
  • 21. PAGE OBJECT – КЛАССИКА PageObject PageObject PageObject ReviewForm ReviewForm ReviewForm Для тестирования новой страницы нужно повторно инициализировать компоненты страницы: ReviewForm, ... WWW.2GIS.RU Saturday, 2 January, 13
  • 22. НОВАЯ СТРУКТУРА • Widget – это функциональный блок страницы SearchWidget • Тесты создаются на основе Widget’ов, а не страниц • Повторное использование кода • Проще архитектура ReviewWidget WWW.2GIS.RU Saturday, 2 January, 13
  • 23. ПРИМЕР ТЕСТА “ДОБАВЛЕНИЕ ОТЗЫВА” public function testAddReviewAndCheckInTheList() { $this->openReviewPage(); • Переходим на страницу отзывов о компании $count = $this->review->count(); $this->review->add($text, $rating, $user); • Смотрим сколько отзывов уже добавлено $this->assertEquals($count + 1, • Добавляем тестовый отзыв $this->review->count() ); • Проверяем что он появился /* other asserts */ } WWW.2GIS.RU Saturday, 2 January, 13
  • 24. ПРИМЕР ТЕСТА “ДОБАВЛЕНИЕ ОТЗЫВА” public function testAddReviewAndCheckInTheList() { $this->openReviewPage(); $count = $this->review->count(); $this->review->add($text, $rating, $user); $this->assertEquals($count + 1, $this->review->count() ); /* other asserts */ } WWW.2GIS.RU Saturday, 2 January, 13
  • 25. MAPS.2GIS.RU WWW.2GIS.RU Saturday, 2 January, 13
  • 26. MAPS.2GIS.RU Особенности приложения • Большинство элементов страницы создаются динамически • Картографические элементы создаются при помощи картографического API WWW.2GIS.RU Saturday, 2 January, 13
  • 28. PAGE OBJECT – КЛАССИКА 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; } /* ... */ } WWW.2GIS.RU Saturday, 2 January, 13
  • 29. PAGE OBJECT – КЛАССИКА 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; } /* ... */ } WWW.2GIS.RU Saturday, 2 January, 13
  • 30. ПРИМЕР ТЕСТА “СМЕНА ГОРОДА” public function testSelectCity() { $page = $this->getPage(); $page->citySelect->select('Новосибирск'); /* ... */ } WWW.2GIS.RU Saturday, 2 January, 13
  • 31. КОМПОНЕНТЫ Page • Объект Page SearchForm реализует доступ Catalog к компонентам Catalog, SearchForm и др. • Тест-кейсы реализуются при помощи операций Balloon с объектом Page и его компонентами WWW.2GIS.RU Saturday, 2 January, 13
  • 32. ПРИМЕР ТЕСТА “ПОЯВЛЕНИЕ BALLOON” public function testSelectFirmAndShowBalloon() { $page = $this->getPage(); • Выбираем город $page->selectCity('Новосибирск'); $page->searchForm->send(...); • Выполняем поиск организации (“что” , “где”) $firm = $page->catalog->getFirm(); • Выбираем случайную фирму из справочника и кликаем по ней $firm->click(); $this->assertNotNull( • Проверяем, что объект balloon отобразился на карте $page->map->getBalloon()); /* other asserts */ } WWW.2GIS.RU Saturday, 2 January, 13
  • 33. ПРИМЕР ТЕСТА “ПОЯВЛЕНИЕ BALLOON” public function testSelectFirmAndShowBalloon() { $page = $this->getPage(); $page->selectCity('Новосибирск'); $page->searchForm->send(...); $firm = $page->catalog->getRandomFirm(); $firm->click(); $this->assertNotNull( $page->map->getBalloon()); /* other asserts */ } WWW.2GIS.RU Saturday, 2 January, 13
  • 34. КОРОТКАЯ ССЫЛКА http://go.2gis.ru/pis8 Saturday, 2 January, 13
  • 35. СНИМОК СОСТОЯНИЯ • Состояние – это текущие (runtime) параметры всех компонентов страницы • Состояния позволяют проверять корректность работы коротких ссылок Saturday, 2 January, 13
  • 36. ТЕСТ “КОРОТКАЯ ССЫЛКА” public function testShortLink() { /* ... */ • Формируем тестовое состояние $state = $this->page->createState(); /* • Создаём короткую ссылку and open it * Create short link */ • Переходим по короткой ссылке $this->assertEquals($state, • Сравниваем $this->page->createState()); состояния /* other asserts */ } WWW.2GIS.RU Saturday, 2 January, 13
  • 37. ТЕСТ “КОРОТКАЯ ССЫЛКА” public function testShortLink() { /* ... */ $state = $this->page->createState(); /* * Create short link and open it */ $this->assertEquals($state, $this->page->createState()); /* other asserts */ } WWW.2GIS.RU Saturday, 2 January, 13
  • 38. ИНТЕГРАЦИЯ С TMS /** * Проверка Example feature * - step1 * - step2 * @suite Example * @section Example feature */ public function testExample() { /* ... */ } WWW.2GIS.RU Saturday, 2 January, 13
  • 39. KEEP IT SHORT AND SIMPLE 2GisOnlineTestFramework Widget Test Component Page Test FlampTestFramework WWW.2GIS.RU Saturday, 2 January, 13
  • 40. ЗАКЛЮЧЕНИЕ • Простота в использовании фреймворков позволила подключить к автоматизации тестировщиков продуктов • Основной функционал продуктов покрыт автотестами • Простая архитектура фреймворков позволила тестировщикам поддерживать и развивать фреймворки WWW.2GIS.RU Saturday, 2 January, 13
  • 41. СПАСИБО ЗА ВНИМАНИЕ! Татьяна Курносова t.kurnosova@2gis.ru @tanyfromsiberia 1-2 марта 2013 г., Киев, Украина Saturday, 2 January, 13