Top Banner
E2E Testing Fatigue Антон Кузнецов MoscowJS 34, 24.11.2016
35

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

Jan 24, 2018

Download

Technology

MoscowJS
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
Page 1: E2E-тестирование мобильных приложений

E2E Testing FatigueАнтон Кузнецов

MoscowJS 34, 24.11.2016

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

Обо мне*

2

Антон Кузнецов, 24 года

25 лет в мобильной разработке 30 лет опыта в юриспруденции

Автор канала в Telegram о путешествиях

Контрибьютор в приватные репо, а также react-native, appium, webdriverio

*Денис Измайлов был тут

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

Обо мне

3

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

Веб-разработчик в

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

4

• Электронный сомелье • Consumer и Enterprise приложения (iOS & Android) • Только на американский рынок • Мы знаем что вам стоит выпить • И чем стоит закусить

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

Стек

Tipsi

iOS

WEBEnterprise

Android

5

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

Проблема

Tipsi

iOS

WEBEnterprise

Android

6

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

Опыт• 2 js-разработчиков • 1 Android-разработчик • 1 Тестировщик • Набор тестов для Web • Набор тестов для Android • Набор утилит для запуска тестов

7

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

• Все приложение, а не отдельный компонент • Имитация пользовательского поведения, а не низкоуровневое тестирование

• Тестирование связки действий, а не в изолированном компоненте

• Неуверенность vs уверенность

E2E vs Unit

8

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

• Вчера вы web-разработчик, сегодня вы - специалист широкого профиля

Зачем это вам?

9

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

• Вчера вы web-разработчик, сегодня вы — специалист широкого профиля

• Вчера вы ничего не знали о вашем мобильном приложении, сегодня — вы даете советы по UX

Зачем это вам?

11

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

ГИФКА С ТРИНИТИ ПРО СЮЖЕТ С ОБУЧЕНИЕМ ВОЖДЕНИЯ ВЕРТОЛЕТА

- Пока нет. - Оператор- Тэнк, мне нужна программа управления вертолетом- PROFIT!- Ты умеешь летать на этой штуке?- Погнали!

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

• Вчера вы web-разработчик, сегодня вы — специалист широкого профиля

• Вчера вы ничего не знали о вашем мобильном приложении, сегодня — вы даете советы по UX

• Вчера мобильные разработчики получали больше вас, сегодня — они ваши помощники…

Зачем это вам?

13

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

..или ищут другую работу, если вы

14

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

• Вчера вы web-разработчик, сегодня вы — специалист широкого профиля

• Вчера вы ничего не знали о вашем мобильном приложении, сегодня — вы даете советы по UX

• Вчера мобильные разработчики получали больше вас, сегодня — они ваши помощники

• Ваши возможности могут превзойти ваши ожидания

Зачем это вам?

16

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

• Appium vs. Calabash • Command Line Interface • Webdriver API vs. Calabash API (Cucumber) • GUI inspector (Appium.app) vs. CLI inspector • Низкий порог вхождения vs. Знание Ruby • Appium имеет большее сообщество

Инструменты

17

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

• В настоящее время (ноябрь 2016) работает только с UI Automator (Xcode 7)

• Для XCUITest Framework (Xcode 8) существует Appium-iOS-Inspector

Ограничения Appium Inspector

20

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

1. Запускаем Appium 2. Запускаем симулятор 3. Инициализируем запуск тестов 4. Проверяем, что все успешно запущено 5. Прогоняем тесты

Запуск тестов

22

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

// .. 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

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

• Вернуться на главный экран

Хэлпер

24

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

1 export default async function iosBack() { 2 await this.driver 3 .waitForVisible('~Back', 5000) 4 .click('~Back') 5 }

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

• Вернуться на главный экран • Генератор кнопок главного экрана

Хэлпер

27

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

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 }

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

• Вернуться на главный экран • Генератор кнопок главного экрана • Логин / Логаут

Хэлпер

29

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

• Вернуться на главный экран • Генератор кнопок главного экрана • Логин / Логаут • Выставить локейшен через приложение • Обойти длинный список (свайп + сбор данных) • Найти кнопку DONE на клавиатуре

Хэлпер

31

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

• Стартовая точка — главный экран • Тестовый набор атомарен • Он должен сам о себе позаботиться • Не использовать метод .pause() • Ну, можно, но только в особенном случае• Использовать повсеместно .waitForVisible()

Договоренности

32

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

• Тесты идут долго • Держите текст сценария на русском языке • Пройдитесь по нему с помощью Appium Inspector • Смело используйте async/await внутри try/catch • При необходимости пишите видео тестов • Это все прекрасно работает внутри CI

33

О чем еще стоит знать?

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

• Тестирование — это, как правило, боль. • Но, как и в спорте, боль — это лишь этап. • В итоге это колоссальный опыт для вас. • Почти все поддается автоматизации. • Даже оплата через Pay. • Тестирование — это способ немного отдохнуть от разработки новых фич и укрепить существующие

Выводы

34

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

Кузнецов Антон @isnifer everywhere :)

Вопросы?

Спасибо