Всем привет! Накануне запуска курса «Mobile QA Engineer» мы провели традиционный открытый урок. Информации оказалось так много, что вебинар растянулся на два дня (День 1, День 2). По сути, это был настоящий двухдневный Mobile QA-интенсив, который будет полезен всем, кто намерен стать профессионалом в направлении автоматизированного тестирования мобильных приложений на Android и iOS.
Преподаватель — Дмитрий Ярыгин, QA Test Engineer с 8-летним опытом работы, 5 из которых он проработал по контракту в Google.
На вебинаре рассмотрели:
- что такое тестирование в целом и почему нужна автоматизация;
- минимальные основы Java для автоматизации (переменные, объекты, классы, ООП);
- что такое Webdriver и Appium;
- как находить объекты в веб-приложении с помощью различных локаторов;
- автоматизацию веб-приложения (login в Facebook) с использованием Appium и Android-эмулятора и многое другое.
Кстати, если хотите получить максимум интерактива от этих вебинаров, установите перед началом просмотра следующие приложения:
История и особенности мобильного тестирования
Мобильное тестирование как класс появилось примерно в 2007 году — именно в это время был анонсирован первый айфон, который полностью изменил всю индустрию. Да, мобильное тестирование существовало и до 2007 года, но приложения тех времён были довольно простыми и примитивными. После 2007 года разработка на iOS и Android особенно активизировалась, а это, в свою очередь, не могло не отразится на тестировании.
Разумеется, мобильное тестирование имеет свою специфику и отличается от настольного:
Несмотря на кажущуюся простоту и небольшие размеры используемых гаджетов, в Mobile QA нужно покрывать тестированием очень много вещей (порой их даже больше, если сравнивать с настольным тестированием). А кто сказал, что будет просто?
Типы мобильных приложений
Мобильные приложения бывают:
- Родные (native).
- Гибридные (hybrid).
- Веб-приложения (web).
А теперь посмотрите на следующее приложение:
И скажите, какое оно: гибридное, нативное или веб-приложение?
Ответ:
Скрытый текст
это веб-приложение
Изначально подразумевается, что веб-приложение запускается и функционирует в браузере, соответственно, все элементы интерфейса выполнены, что называется, в веб-стиле.
Что касается гибридных приложений, то это, по сути попытка «запихнуть» веб-приложение в специальный контейнер и в этом контейнере его запустить, слегка «приукрасив», чтобы оно выглядело, как родное.
Примеры гибридных приложений:
Гибридные приложения не отличаются особой красотой: кнопки по-прежнему вебовские, ссылки отображаются в веб-формате и т. п.
Давайте посмотрим на особенности гибридных приложений:
А теперь пример «родного» приложения из AppStore:
Обратите внимание на качество интерфейса этого приложения и на то, что все элементы выглядят «как родные», ведь функционал полностью интегрирован в операционную систему. Грубо говоря, нативное приложение — это приложение, разработанное с учетом «родных» технологий, в нашем случае — это Xcode для iOS.
Основные параметры мобильных приложений
Параметры следующие:
- производительность,
- совместимость,
- экран (повороты, режимы),
- геолокация,
- оффлайн-режим,
- взаимодействие с файловой системой,
- работа с контактами,
- синхронизация,
- работа с памятью,
- батарея.
Особенности тестирования мобильных приложений
Теперь давайте ознакомимся с особенностями тестирования приложений для мобильных устройств:
Взаимодействие тестировщиков и разработчиков
В принципе, взаимодействие практически не отличается от взаимодействия в обычной среде, когда речь идёт о настольном тестировании. Всё то же самое:
- разработчик создаёт новый функционал;
- тестировщик производит тестирование фичи на различных устройствах;
- по мере нахождения багов тестировщик создаёт баг-отчёты и показывает разработчику проблемные области;
- разработчик исправляет ошибки;
- разработчик возвращает приложение на дополнительное тестирование;
- если нет проблем, приложение готово для релиза.
ООП для тестировщика
А теперь ООП за 5 минут)). Итак, если вы планируете заниматься автоматизированным тестированием, вы должны знать:
- классы, объекты, методы;
- наследование;
- строки, целые числа;
- полиморфизм;
- массивы;
- переопределение/перегрузка;
- конструкторы;
- интерфейсы.
Если в двух словах и без сложных терминов, то ООП (объектно-ориентированное программирование) — это объединение данных и кода по их обработке в одном объекте.
Наследование — механизм языка, позволяющий создать новый класс на основе существующего.
Инкапсуляция — механизм языка, который ограничивает доступ к составляющим объект компонентами (переменным и методам) и делает их доступными только внутри объекта (private). Иными словами — сокрытие реализации класса.
Полиморфизм — возможность класса-потомка менять реализацию класса родителя, но сохраняя при этом интерфейс.
Теперь давайте перейдём от теории к практике, которая поможет вам понять основы ООП.
Интерактив
Прежде всего, открываем следующую ссылку. У нас есть следующий Java-код, в котором существуют три основных класса:
1. Main:
public class Main
{
public static void main (String[]args)
{
Cat cat = new Cat ();
cat.setAge (5);
cat.setName ("Alisa");
System.out.println (cat.getName ());
System.out.println (cat.getAge ());
}
}
2. Animal:
public class Animal {
private String name;
private int age;
public Animal() {
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
3.Cat:
public class Cat extends Animal {
private String name;
public String getName() {
return "Cat name is: " + name;
}
public void setName(String name) {
this.name = name;
}
}
Main — основной класс, необходимый для запуска других классов. В классе Animal перечислены такие атрибуты, как возраст и имя животного. Класс Cat наследует все свойства класса Animal (Cat extends Animal), но переопределяет существующие методы работы с нашим классом.
А теперь попробуйте самостоятельно решить следующую задачку:
- сделать класс
Dog
, наследуя классAnimal
; - создать метод
getName()
в классеDog
, который отображает“Dog name is: [имя собаки]”
; - создать метод
setName()
в классеDog
, возвращающий имя; - в классе
Main
создать экземпляр классаDog
, задать имя с помощьюsetName()
и запустить методgetName()
чтобы получить имя.
Решение задачи.
Автоматизация. Когда она нужна, а когда не нужна?
Автоматизация нам нужна в следующих случаях:
- сложное приложение с большим количеством экранов;
- большой арсенал устройств;
- частые обновления;
- большое количество пользователей;
- приложение работает во многих странах и рынках приложений;
- важна скорость тестирования;
- необходимо тестирование производительности.
Когда не нужна автоматизация:
- в приложении один-два экрана;
- приложение функционирует в одной стране, в одном рынке;
- редкие обновления;
- небольшое количество пользователей;
- затраты на автоматизацию превысят бюджет.
Автоматизация: принципы и средства
Принципы автоматизации:
- Найти объект на текущем экране приложения.
- Проверить его состояние, убедиться в его наличии.
- Произвести действия с объектом.
Классификация средств автоматизации:
- Средства автоматизации, которым не нужен доступ к исходному коду (Webdriver, Appium).
- Средства автоматизации, которым необходим доступ к исходному коду (Espresso, KIF).
Автоматизация — это, конечно, здорово, однако всегда следует помнить, что не всё можно «заавтоматить».
Автоматизация с помощью Appium
Appium — сервер, основанный на протоколе WebDriver (WebDriver — фреймворк для автоматизации веб-приложений). Appium принимает запросы от клиентской стороны (client), преобразует и передает их на эмулятор или устройство.
В запущенном состоянии Appium позволяет видеть все запросы, которые происходят с клиента на сервер:
Как выглядит настройка системы среды Appium:
Друзья, мы рассказали лишь о первой части вебинара, поэтому рекомендуем вам обязательно посмотреть видео в записи, чтобы ничего не пропустить. Ещё будет разговор про аннотации в тестах, инициализацию Appium для Native-приложений, поиск элементов с помощью Appium на Android. Кроме того, обязательно ознакомьтесь и со второй частью открытого урока, где будут даны уже более глубокие практические знания в области автоматизации в целом и Appium в частности.
И, разумеется, записывайтесь на курс «Mobile QA Engineer», который стартует совсем скоро!