Автоматизация тестирования
      iOS приложений:
от идеи к готовому решению
        Денис Шамгин
       Виктор Короневич
Об авторах…
Денис Шамгин                  Виктор Короневич
 Тестировщик-автоматизатор    Тестировщик-автоматизатор
 Опыт в IT: 3 года            Опыт в IT: 3 года
Disclaimer
Проблема

   Чем автоматизировать?

   Возможна ли регрессия?

   Сложны ли тесты в написании?

   Что можно протестировать?
Критерии
    Кроссплатформенность

   ОС-независимое решение

 Полный доступ к приложению
UI Automation (Apple Tool)
Официальная поддержка Apple

Простота написания тестов

Запись сценариев через GUI

              Только UI-тестирование

              Ограниченный и нерасширяемый API

              Ограничения JavaScript
FoneMonkey. Достоинства.


Готовое решение

Поддержка изменений версий iOS

Запись сценариев через GUI
FoneMonkey. Недостатки.
UI Spec
https://github.com/moredip/UISpec


Только Objective-C

Заброшенный проект
Наш проект на Github
 https://github.com/EPAM-Systems/EPAM-Mobile-TAF
Наше решение
Смешанное тестирование
Адаптация к требованиям клиента
Тесты в стиле Selenium

Сложность интеграции

Влияние на ресурсы мобильного устройства
Смешанное тестирование
   Native

   Веб-тестирование

   Базы данных

   Веб-сервисы

   и так далее…
Кастомизация
Пример тестового сценария
@Test(timeout = 60000)
public void LogIn() throws Exception {
  NativeDriver driver = new iPhoneNativeDriver();
  driver.setServerHost("http://localhost:37265");

    driver.setElementValue("UITextField=placeholder:User", "username");
    driver.setElementValue("UITextField=placeholder:Password", "password");
    driver.touch("CustomButton=atIndex:1");

    String actualMessage = driver.getElementValue("UILabel=atIndex:1", "text");
    String expectedMessage = “Welcome";

    Assert.assertEquals(expectedMessage, actualMessage);
}
Технология Driver-Server


     Тестовые
      скрипты
                            Приложение
                  HTTP
       Драйвер               Сервер
                 протокол
Проект Frank




 https://github.com/moredip/Frank
Визуализация. Проблема.
Визуализация. Интерфейс.
Дерево элементов

Дерево атрибутов

Графическое представление
• Подсветка элементов
• Взаимодействие
• Обратная связь
Консоль
Visualizer. Интерфейс.

                     Дерево элементов




  Дерево атрибутов
Visualizer. Интерфейс.




    Графическое представление приложения
Гибридные приложения

              Нативное приложение
                  Веб-контейнер

                     <html>
   *.app
                 Веб-приложение
                     </html>
Внедряемый JS-код
  Core JavaScript

 • document.querySelector("a:nth-child(3)");
 • element.dispatchEvent(evt);

  jQuery Mobile

 • $.mobile.activePage.find("p:contains(John)");
 • $("a[href=#]:eq(5)").click();

  Sencha Touch

 • Ext.getCmp("elementID");
Компиляция проекта

                    Установка
                     флагов
                   компиляции
                                 Добавление
                                недостающих
                                  библиотек
 Создание     Настройка
отдельного      типа
   target    архитектуры
Симуляция действий пользователя
Заключение
          Лицензия GNU GPL v3


   Используется на реальных проектах


  Реализована автоматизация регрессии

 Ведется разработка решений для платформ
           Android и BlackBerry
Вопросы?
Контакты
  Денис Шамгин

 • Software Test Automation Engineer
 • EPAM Systems, Беларусь, Минск
 • Denis_Shamgin@epam.com

  Виктор Короневич

 • Software Test Automation Engineer
 • EPAM Systems, Беларусь, Минск
 • Viktar_Karanevich@epam.com

Автоматизация тестирования iOS приложений: от идеи к готовому решению