Черемушкин Дмитрий инженер по автоматизации тестирования ПО Scalable eCommerce Platform Solutions Обо мне Обо мне 6+ лет в тестировании ПО ручное | автоматизированное настольное | веб | мобильное автоматизация рутинных действий в QA-процессах, интеграция инструментов Черемушкин Дмитрий 1
Доклад Дмитрия Черемушкина на SQA Days-15. 18-19 апреля, 2014, Москва. www.sqadays.com
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Черемушкин Дмитрий
инженерпо автоматизации тестирования ПО
Scalable eCommerce Platform SolutionsОбо мнеОбо мне
6+ лет в тестировании ПО
ручное | автоматизированное
настольное | веб | мобильное
автоматизация рутинных
действий в QA-процессах,
интеграция инструментов
Черемушкин Дмитрий
1
2
Постановка задачиПостановка задачи
Имеется: фреймворк,основанный на стеке технологий:
+ автоматизированные тесты для eCommerce веб-сайта~ 2000 тесткейсов • Firefox, Chrome, IE • локальный и удаленный запуск
3
1 Запустить имеющиеся тесты(в Android Browser и Mobile Safari)
Разработать новые тесты(мобильная версия сайта + Android-приложение)
2
Необходимо:
на мобильных ОС Android и iOS
Постановка задачиПостановка задачи
4
Этапы решения задачиЭтапы решения задачи
11
устранение проблем
+
завершение интеграциив фреймворк
создание proof of concept
+
выявление проблем
выбор инструмента тестирования на мобильных платформах
22 33
5
Выбор инструментаВыбор инструмента
Требования:
open-source решение;
поддержка Java и WebDriver API;
поддержка ОС Android и iOS;
автоматизация приложений и браузеров;
работа на эмуляторах и физических устройствах;
активное развитие, наличие документации
6
Выбор инструментаВыбор инструмента
7
Выбор инструментаВыбор инструмента
iOS Android JavaWebDriver
APIЭмуля-торы
Устройства
Keep It Functional ✓ ✗ ✗
ObjectiveC✗ ✓ ✗
Frank ✓ ✗✗
Ruby + Cucumber
✗ ✓ ✗
Instruments(Apple) ✓ ✗ ✗
JavaScript✗ ✓ ✓
MonkeyTalk ✓ ✓✗
свой язык + JavaScript
✗ ✓ ✓
uiautomator(Google) ✗ ✓ ✓ ✗ ✓ ✓
8
Выбор инструментаВыбор инструмента
iOS Android JavaWebDriver
APIЭмуля-торы
Устройства
Robotium ✓ ✓ ✓ ✗ ✓ ✓
Calabash ✓ ✓ ~Cucumber; Ruby gems
✗ ✓ ✓
AndroidDriver(Selenium) ✗ ~
только браузер
✓ ✓ ✓ ✓
Selendroid ✗ ✓ ✓ ✓ ✓ ✓
ios–driver ✓ ✗ ✓ ✓ ✓ ~только
приложения
Appium ✓ ✓ ✓ ✓ ✓ ✓
9
Выбор инструментаВыбор инструмента
браузеры & приложения
браузеры &приложения
10
Appium: преимуществаAppium: преимущества
лёгкость внесения модификаций в серверную часть
работает без «агентов» в приложении
большой спектр поддерживаемых языков
распределённый запуск тестов (SeleniumGrid)
кросс-платформенность тестов
11
Appium: архитектураAppium: архитектура
Appium–сервер
Тестовыйсценарий
WebDriverJSONWire
Инструментавтоматизации
Прило-жение
uiautomator& selendroid
instruments
APIавтома-тизации
низко-уровневыекоманды
12
Proof of concept: первый запускProof of concept: первый запуск
Вручную: вернуть исходное состояние системы
Вручную: посмотреть Appium-логи
report
stories
mvn clean test
Вручную: запустить Appium
Вручную: Узнать UDID (для iOS-устройств)
13
Appium: общие проблемыAppium: общие проблемы
✗ в гибридных приложенияхнужно переключаться между native и webview частями
✗ между тест-кейсамиcookies браузера не очищаются
✗ Android: js-метод `click()` не работает
✗ iOS: не снимаются скриншоты
✗ нет отката к “чистому” состоянию
14
Appium: проблемы интеграцииAppium: проблемы интеграции
✗ Maven не запускает Appium автоматически
✗ разные “логи” у Maven и Appium
✗ iOS–устройства: нужно указывать UDID при запуске
✗ Android: Appium не запускает GenyMotion–эмулятор
public static void uninstallMobileApps() { executeShCommand(UNINSTALL_APPS_COMMAND); }
private static void RunCommand(String command) { try { String line; Process p = new ProcessBuilder(command).start(); BufferedReader input = new BufferedReader(
new InputStreamReader(p.getInputStream())); while ((line = input.readLine()) != null) { System.out.println(line); } input.close(); } catch (Exception err) { err.printStackTrace(); } }}
public class MobileUtils {
public static void uninstallMobileApps() { executeShCommand(UNINSTALL_APPS_COMMAND); }
private static void RunCommand(String command) { try { String line; Process p = new ProcessBuilder(command).start(); BufferedReader input = new BufferedReader(
new InputStreamReader(p.getInputStream())); while ((line = input.readLine()) != null) { System.out.println(line); } input.close(); } catch (Exception err) { err.printStackTrace(); } }}
public static void uninstallMobileApps() { if isBrowser("ios") { RunCommand(IOS_UNINSTALL_APPS); }
if isBrowser("android") { RunCommand(IOS_UNINSTALL_APPS_COMMAND); } }