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

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

Embed Size (px)

Citation preview

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

MoscowJS 34, 24.11.2016

Обо мне*

2

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

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

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

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

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

Обо мне

3

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

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

4

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

Стек

Tipsi

iOS

WEBEnterprise

Android

5

Проблема

Tipsi

iOS

WEBEnterprise

Android

6

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

7

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

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

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

E2E vs Unit

8

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

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

9

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

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

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

11

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

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

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

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

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

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

13

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

14

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

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

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

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

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

16

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

Инструменты

17

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

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

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

20

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

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

22

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

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

Хэлпер

24

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

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

Хэлпер

27

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 }

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

Хэлпер

29

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

Хэлпер

31

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

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

32

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

33

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

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

Выводы

34

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

Вопросы?

Спасибо