Firebase Test Lab. Авто-тести без коду на фізичних пристроях

212
7 хв.

У світі андроїдів часто трапляється так, що додатки по-різному працюють на різних пристроях. Добре, якби можна було протестити поведінку на різних версіях Android на емуляторі, і цим би все закінчилося. Але, по-перше, емулятор — це все ще не справжній пристрій, і тестування може бути невірогідним. А по-друге, оболонки від сторонніх виробників теж впливають на роботу додатків. Ще й тестовими пристроями в офісі не напасешся, та і їхати з віддаленої роботи в офіс, щоб протестувати одну фічу на якомусь Сяомі, не дуже хочеться. Як було б в ідеалі. В ідеалі я хочу записати який-небудь тест-кейс, просто одного разу натикавши його на моєму телефоні, і потім запустити його віддалено на різних пристроях одночасно, і нехай собі виконується. І так виявляється можна.

Firebase Test Lab — досить цікава штука. Ось, що написано в доці гуглу:

Firebase Test Lab — це хмарна інфраструктура для тестування додатків, яка дозволяє вам тестувати додаток на різних пристроях і в різних конфігураціях, щоб ви могли краще зрозуміти, як воно буде працювати в руках реальних користувачів. Test Lab використовує реальні робочі пристрої, що працюють в центрі обробки даних Google, для тестування вашої програми.

Головні фічі Test Lab:

  • Robo Tests. Ви закидаєте свій apk-файл і вибираєте пристрій, на якому буде проводитися тест. "Робот" сам протестує додаток, натисне на всі кнопки, які побачить, введе різні значення в поля введення. Подивиться, що станеться, і відправить по всьому звіт.
  • Якщо потрібно протестувати конкретний тест-кейс, можна записати сценарій через Android Studio, закинути файл сценарію і запустити.
  • Коли є необхідність протестувати конкретні значення, дії (натискання/ігнорування конкретної кнопки, значення в поле введення, перехід з діплінка) під час виконання автотесту, це все можна налаштувати й зберегти в пресети.

Туторіали, як це все налаштовується, нижче.

Необхідно також відразу згадати, що при безплатному використанні сервісу є обмеження — 5 тестів на фізичних і 10 тестів на віртуальних пристроях в день. Не так багато, щоб користуватися постійно, але в певних випадках буде зручно.

Що отримаємо на виході

Після закінчення тестування, яке може зайняти й пів години, залежно від кількості ui елементів і довжини флоу (тест можна обмежити по часу перед початком), ми можемо подивитися звіт.

У ньому будуть і скріни, і відео з тим, як проходило тестування, куди "робот" натискав, де "ходив", помилки, якщо такі виникали, з місцем їх появи й stacktrace (прям відразу і вішаємо баг на девелопера). Разом і розробник відразу бачить файл і рядок коду, де вилетів exception. Зручно.

Окей. Кого зацікавило, далі йде туторіал на випадок, якщо додаток вимагає авторизації, отп-коду та інших параметрів тестування, обмежень, куди заходити, куди не заходить.

Для того, щоб "робот" зміг пройти далі авторизації, потрібно вказати дані для входу в ваш (тестовий) обліковий запис. Це можна зробити 2-ма способами:

  • записати скрипт Test Lab Robo Script і ввести під час запису дані для входу (або за допомогою цього ж скрипту, в принципі, записати конкретний тест-кейс);
  • знайти поля введення по id і вказати їм значення в пресетах.

Зараз розберемося.

Robo Script

Щоб записати якийсь тест-кейс або "показати роботу", як пройти авторизацію, зайдемо в Android Studio. Якщо ви раніше не працювали в Android Studio, додаю інструкцію з встановлення і початку роботи з нею.

developer.android.com/studio/install

У вашому проєкті вже повинен бути підключений Firebase. Якщо немає, в доках гуглу все дуже зрозуміло описано, проблем виникнути не повинно.

firebase.google.com/docs/android/setup

  • Виберемо пристрій, на якому будемо запускати програму і записувати скрипт.
  • Відкриваємо Tools> Firebase> Test Lab.
  • Далі — Record Robo Script and Use it to guide. Record it!
  • Запускається додаток на вибраному пристрої, в студії відкривається вікно, куди виводяться записані дії. Записуємо потрібний тест-кейс і натискаємо ОК. Зберігаємо файл скрипту.

Крім скрипту, вам також потрібен білд додатка. Його можна створити в студії:

Build> Build Bundle (s) / Apk (s)> Build Apk (s) і знайти в теці з проєктом.

Далі відкриємо консоль Firebase.

console.firebase.google.com/u/0/

Якщо проєкт ще не доданий в консоль, додамо його, якщо він був доданий кимось іншим з команди — попросіть дати вам доступ. У самій консолі зліва виберемо Test Lab. Run Test> Robo. У перше поле закинемо apk-файл програми, в друге — записаний скрипт. Окей, далі вибираємо пристрої, на яких будемо тестувати, можемо вказати обмеження за часом виконання і натиснемо start. "Робот" на потрібному екрані запустить скрипт, з його допомогою пройде авторизацію і піде далі щось тестувати. Так само станеться і з записаним на скрипт тест-кейсом.

Прикріплюю відео, яке вийшло після тесту, зі звіту.

Якщо потрібно лише провести автоматичне тестування без скрипту, просто щоб Robo пройшовся сам за додатком, з усього перерахованого вище потрібно тільки сбілдити apk і закинути в консоль. В такому випадку, правда, "робот" пройдеться, де захоче/зможе. В залежності від програми, він просто може не знайти будь-які кастомні елементи. Також з досвіду, його "відволікає" анімація. Втім, я думаю, його будуть з часом допилювати, спробувати в будь-якому випадку варто — знайде, так знайде.

Presets

Також в консолі перед виконанням тесту можна задати значення для полів вводу, натискання або ігнорування кнопок, знайшовши їх за id. Боюся, що без базових знань android розробки в великому проєкті знайти файл з потрібним екраном і знайти в ньому цю саму id буде проблематично. В принципі, для практично будь-яких потреб завжди можна скористатися першим варіантом — записом скрипту (під час скрипту ввести необхідні вам дані в поля введення). Або ж можна попросити розробника підказати айдішник того ui елемента. Скажу лише на додаток, що для кастомних ui елементів (наприклад, кастомного поля введення) потрібно брати id саме захованого під ним стандартного EditText-a (або іншого елемента, головне, не id з layout-а екрану, а id елемента в самому кастомному layout). Якщо ви все-таки знаєте id-шник потрібного елемента, то залишається лише вказати id і дію для нього в консолі. Просто відправляєте все той же apk в TestLab. А перед запуском тесту на екрані вибору пристрою для тесту:

Additional options> Test account credentials (дії для авторизації) / Robo directives (будь-які інші дії на ui-елементи).

У resource name — вводимо id і поруч значення, натискання або ігнорування.

Висновок

Звичайно, в TestLab є ще різні налаштування, способи тестування, тести ігор на Unity, додатків на IOS тощо. Але, як на мене, головні, найбільш корисні можливості таки були описані в цій статті. За додатковою інформацією завжди можна звернутися в документацію. Залишайте коменти, тисніть лайки. Дякую за увагу. 😉

31 травня 2021
5 / 5 (1 голос)