Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

E2E-тестирование мобильных приложений

345 views

Published on

Антон Кузнецов
Tipsi

Published in: Technology

E2E-тестирование мобильных приложений

  1. 1. E2E Testing Fatigue Антон Кузнецов MoscowJS 34, 24.11.2016
  2. 2. Обо мне* 2 Антон Кузнецов, 24 года 25 лет в мобильной разработке 30 лет опыта в юриспруденции Автор канала в Telegram о путешествиях Контрибьютор в приватные репо, а также react-native, appium, webdriverio *Денис Измайлов был тут
  3. 3. Обо мне 3 Антон Кузнецов Веб-разработчик в
  4. 4. 4 • Электронный сомелье • Consumer и Enterprise приложения (iOS & Android) • Только на американский рынок • Мы знаем что вам стоит выпить • И чем стоит закусить
  5. 5. Стек Tipsi iOS WEBEnterprise Android 5
  6. 6. Проблема Tipsi iOS WEBEnterprise Android 6
  7. 7. Опыт • 2 js-разработчиков • 1 Android-разработчик • 1 Тестировщик • Набор тестов для Web • Набор тестов для Android • Набор утилит для запуска тестов 7
  8. 8. • Все приложение, а не отдельный компонент • Имитация пользовательского поведения, а не низкоуровневое тестирование • Тестирование связки действий, а не в изолированном компоненте • Неуверенность vs уверенность E2E vs Unit 8
  9. 9. • Вчера вы web-разработчик, сегодня вы - специалист широкого профиля Зачем это вам? 9
  10. 10. • Вчера вы web-разработчик, сегодня вы — специалист широкого профиля • Вчера вы ничего не знали о вашем мобильном приложении, сегодня — вы даете советы по UX Зачем это вам? 11
  11. 11. ГИФКА С ТРИНИТИ ПРО СЮЖЕТ С ОБУЧЕНИЕМ ВОЖДЕНИЯ ВЕРТОЛЕТА - Пока нет.- Оператор- Тэнк, мне нужна программа управления вертолетом- PROFIT!- Ты умеешь летать на этой штуке?- Погнали!
  12. 12. • Вчера вы web-разработчик, сегодня вы — специалист широкого профиля • Вчера вы ничего не знали о вашем мобильном приложении, сегодня — вы даете советы по UX • Вчера мобильные разработчики получали больше вас, сегодня — они ваши помощники… Зачем это вам? 13
  13. 13. ..или ищут другую работу, если вы 14
  14. 14. • Вчера вы web-разработчик, сегодня вы — специалист широкого профиля • Вчера вы ничего не знали о вашем мобильном приложении, сегодня — вы даете советы по UX • Вчера мобильные разработчики получали больше вас, сегодня — они ваши помощники • Ваши возможности могут превзойти ваши ожидания Зачем это вам? 16
  15. 15. • Appium vs. Calabash • Command Line Interface • Webdriver API vs. Calabash API (Cucumber) • GUI inspector (Appium.app) vs. CLI inspector • Низкий порог вхождения vs. Знание Ruby • Appium имеет большее сообщество Инструменты 17
  16. 16. • В настоящее время (ноябрь 2016) работает только с UI Automator (Xcode 7) • Для XCUITest Framework (Xcode 8) существует Appium-iOS-Inspector Ограничения Appium Inspector 20
  17. 17. 1. Запускаем Appium 2. Запускаем симулятор 3. Инициализируем запуск тестов 4. Проверяем, что все успешно запущено 5. Прогоняем тесты Запуск тестов 22
  18. 18. // .. 26 try { 27 // Check Appium 28 await appiumIsRunning(APPIUM_HOST, APPIUM_PORT) 29 console.log(`Appium is running on: ${APPIUM_HOST}:${APPIUM_PORT}`); 30 if (!DEVICE_NAME || !PLATFORM_VERSION) { 31 // Check device 32 const device = await findiOSDevice(); 33 console.log(`Found next iOS device: ${device.name}`) 34 DEVICE_NAME = device.name || 'iPhone 5s' 35 PLATFORM_VERSION = device.platformVersion || '10.1' 36 } 37 38 // Initialize Helper 39 await helper.init(/* init props */) 40 41 // Run Tape tests 42 await runTapeTests(TEST_CASES_PATH) 43 } catch (error) { 44 console.log('Error while executing tests:’, error) 45 } 46 47 await helper.release() 48 }()) 23
  19. 19. • Вернуться на главный экран Хэлпер 24
  20. 20. 1 export default async function iosBack() { 2 await this.driver 3 .waitForVisible('~Back', 5000) 4 .click('~Back') 5 }
  21. 21. • Вернуться на главный экран • Генератор кнопок главного экрана Хэлпер 27
  22. 22. 1 const keys = { 2 Nearby: 1, 3 ScanLabel: 2, 4 SearchWines: 3, 5 MyProfile: 4, 6 SocialFeed: 5, 7 Login: 6, 8 Logout: 6, 9 Intro: 7, 10 Orders: 8, 11 }; 12 13 export default function createMenuButtonId(id = 1) { 14 const value = typeof id === 'string' ? keys[id] : id; 15 return this.idFromXPath(` 16 //XCUIElementTypeApplication/XCUIElementTypeWindow/ 17 XCUIElementTypeOther/XCUIElementTypeOther/XCUIElementTypeOther/ 18 XCUIElementTypeOther/XCUIElementTypeOther/ 19 XCUIElementTypeOther/XCUIElementTypeOther/ 20 XCUIElementTypeOther/XCUIElementTypeOther/ 21 XCUIElementTypeCollectionView/XCUIElementTypeCell[${value}] 22 `) 23 }
  23. 23. • Вернуться на главный экран • Генератор кнопок главного экрана • Логин / Логаут Хэлпер 29
  24. 24. • Вернуться на главный экран • Генератор кнопок главного экрана • Логин / Логаут • Выставить локейшен через приложение • Обойти длинный список (свайп + сбор данных) • Найти кнопку DONE на клавиатуре Хэлпер 31
  25. 25. • Стартовая точка — главный экран • Тестовый набор атомарен • Он должен сам о себе позаботиться • Не использовать метод .pause() • Ну, можно, но только в особенном случае • Использовать повсеместно .waitForVisible() Договоренности 32
  26. 26. • Тесты идут долго • Держите текст сценария на русском языке • Пройдитесь по нему с помощью Appium Inspector • Смело используйте async/await внутри try/catch • При необходимости пишите видео тестов • Это все прекрасно работает внутри CI 33 О чем еще стоит знать?
  27. 27. • Тестирование — это, как правило, боль. • Но, как и в спорте, боль — это лишь этап. • В итоге это колоссальный опыт для вас. • Почти все поддается автоматизации. • Даже оплата через Pay. • Тестирование — это способ немного отдохнуть от разработки новых фич и укрепить существующие Выводы 34
  28. 28. Кузнецов Антон @isnifer everywhere :) Вопросы? Спасибо

×