e2e-тестирование мобильных приложений
Post on 24-Jan-2018
261 Views
Preview:
TRANSCRIPT
Обо мне*
2
Антон Кузнецов, 24 года
25 лет в мобильной разработке 30 лет опыта в юриспруденции
Автор канала в Telegram о путешествиях
Контрибьютор в приватные репо, а также react-native, appium, webdriverio
*Денис Измайлов был тут
4
• Электронный сомелье • Consumer и Enterprise приложения (iOS & Android) • Только на американский рынок • Мы знаем что вам стоит выпить • И чем стоит закусить
Опыт• 2 js-разработчиков • 1 Android-разработчик • 1 Тестировщик • Набор тестов для Web • Набор тестов для Android • Набор утилит для запуска тестов
7
• Все приложение, а не отдельный компонент • Имитация пользовательского поведения, а не низкоуровневое тестирование
• Тестирование связки действий, а не в изолированном компоненте
• Неуверенность vs уверенность
E2E vs Unit
8
• Вчера вы web-разработчик, сегодня вы — специалист широкого профиля
• Вчера вы ничего не знали о вашем мобильном приложении, сегодня — вы даете советы по UX
Зачем это вам?
11
ГИФКА С ТРИНИТИ ПРО СЮЖЕТ С ОБУЧЕНИЕМ ВОЖДЕНИЯ ВЕРТОЛЕТА
- Пока нет. - Оператор- Тэнк, мне нужна программа управления вертолетом- PROFIT!- Ты умеешь летать на этой штуке?- Погнали!
• Вчера вы web-разработчик, сегодня вы — специалист широкого профиля
• Вчера вы ничего не знали о вашем мобильном приложении, сегодня — вы даете советы по UX
• Вчера мобильные разработчики получали больше вас, сегодня — они ваши помощники…
Зачем это вам?
13
• Вчера вы 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
1 export default async function iosBack() { 2 await this.driver 3 .waitForVisible('~Back', 5000) 4 .click('~Back') 5 }
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 }
• Вернуться на главный экран • Генератор кнопок главного экрана • Логин / Логаут • Выставить локейшен через приложение • Обойти длинный список (свайп + сбор данных) • Найти кнопку DONE на клавиатуре
Хэлпер
31
• Стартовая точка — главный экран • Тестовый набор атомарен • Он должен сам о себе позаботиться • Не использовать метод .pause() • Ну, можно, но только в особенном случае• Использовать повсеместно .waitForVisible()
Договоренности
32
• Тесты идут долго • Держите текст сценария на русском языке • Пройдитесь по нему с помощью Appium Inspector • Смело используйте async/await внутри try/catch • При необходимости пишите видео тестов • Это все прекрасно работает внутри CI
33
О чем еще стоит знать?
• Тестирование — это, как правило, боль. • Но, как и в спорте, боль — это лишь этап. • В итоге это колоссальный опыт для вас. • Почти все поддается автоматизации. • Даже оплата через Pay. • Тестирование — это способ немного отдохнуть от разработки новых фич и укрепить существующие
Выводы
34
top related