Сбор базовых знаний для тестирования приложений iOS:
“Знаете, у каждого есть мобильный телефон, но я не знаю ни одного человека, которому бы нравился его телефон. Я хочу сделать телефон, который понравится людям”. – Стив Джобс.
Это было сказано Стивом Джобсом об iPhone. Стив действительно заставил Apple работать над тем, чтобы их мобильное устройство стало любимым для всех.
Пользователи всегда любили мобильные устройства Apple, будь то iPhone, iPod Touch или iPad. Согласно текущим данным, в мире насчитывается почти 1 миллиард устройств Apple, работающих под управлением iOS.
Это целый миллиард устройств.
Ниже приводится анализ доли рынка iPhone в 2016 году:
Чему вы научитесь:
- iOS
- Тестирование iOS
- Виды тестирования приложений для iOS
- Ручное тестирование – использование устройства
- Ручное тестирование – использование эмулятора
- Автоматизация iOS
- Лучшие практики тестирования приложений для iOS
- Фреймворки для автоматизации iOS
iOS
iOS – это мобильная операционная система, разработанная компанией Apple специально для своих устройств, часто называемых iDevices. С 2007 года, когда iOS была создана только для iPhone, операционная система развивалась, чтобы поддерживать устройства Touch и iPad.
Согласно текущим исследованиям, iOS является второй по популярности мобильной операционной системой на рынке. Android работает на устройствах различных производителей, но прелесть iOS в том, что она ограничена только оборудованием Apple, что ясно говорит о популярности операционной системы.
За годы своего существования iOS выпустила в общей сложности 10 крупных релизов и в каждом из них предлагала значительные обновления функций.
Операционная система iOS славится удобством использования, плавностью работы, отсутствием сбоев в работе приложений и т.д. Если говорить о приложениях, то магазин приложений Apple iTunes для iOS очень богат: количество приложений достигает 2,2 миллиона. Число загрузок приложений быстро выросло до 130 миллиардов.
iOS – это операционная система, которая не ограничена никакими зональными или языковыми барьерами. Это один из основных факторов того, что эта операционная система стала настолько известной всего за 10 лет своего развития. Она поддерживает 40 различных языков.
Не только языки, но и пользовательский интерфейс устройств iOS очень привлекателен и стилен по сравнению с устройствами Android.
Говоря о Приложениях подробно, ниже приведены некоторые статистические данные по ним:
- Каждый день в магазин приложений Apple iTunes поступает почти 1000 новых приложений.
- Около 1/3 всех приложений в магазине приложений Apple iTunes можно скачать бесплатно.
- Платные приложения для iOS стоят в среднем от 1,10 до 1,30$.
- Средняя цена игры для iOS колеблется от 0,55 до 0,65$.
Сколько приложений вы использовали на своем iPhone, iPod Touch или iPad?
Довольно много! Верно? Начиная с Gmail и Facebook и заканчивая Clash of Clans и Asphalts. Подобные приложения, количество и разнообразие пользователей – все это дает тестировщикам программного обеспечения серьезное задание. Не так ли?
В качестве тестировщика необходимо не только проверить функциональность, но и провести углубленное тестирование пользовательского интерфейса, чтобы проверить приложение на iPhone, iPod и iPad из-за различий в их размерах.
Тестирование iOS
Как уже говорилось ранее, iOS ограничена только аппаратным обеспечением Apple или устройствами производства Apple. Это действительно большое облегчение. Однако существует множество устройств Apple и их версий, поддерживающих iOS.
В итоге, Apple имеет закрытую систему, в отличие от Android, которая является открытой системой. Выпуски ОС или устройств четко спланированы.
Это является дополнительным преимуществом, потому что:
- Размеры устройств, которые доступны или будут выпущены, фиксированы, и как QA мы должны иметь очень четкое представление о том, какие устройства есть на рынке. QA становится легко определиться с тестовым стендом для тестирования.
- Как и в случае с устройствами, нам не нужно проводить глубокий анализ ОС, поскольку это закрытая система, решение о тестовом стенде для тестирования ОС занимает меньше времени (и усилий).
- У Apple есть хороший выбор собственных инструментов автоматизации, хотя они немного сложны в освоении.
- Я помню, что для тестирования GPS для Android мне пришлось потратить 2-3 дня, чтобы понять, как создавать фиктивные скрипты для отправки поддельного местоположения. Но в iOS это было очень просто и легко, поскольку там есть встроенная функциональность для отправки поддельных GPS для ходьбы, бега, езды на велосипеде и т.д.
- Для первоначального тестирования не рекомендуется проверять GPS с помощью полевых испытаний, целесообразно отправлять фиктивные GPS-данные, что также экономит время.
- Apple имеет строгие рекомендации по подаче заявки, это очень помогает, чем получить отказ после подачи заявки и большой шанс на успех, в отличие от других ОС, где нет строгих рекомендаций.
- Функциональность устройства и самой ОС фиксирована и проста, что снижает вероятность упустить способы, которыми может работать приложение. В iOS нет возможности принудительно остановить приложение, в то время как на Android мы можем убивать и принудительно останавливать приложения. Таким образом, сложность тестирования здесь снижается.
Это некоторые из преимуществ, которые мы получаем от продуктов Apple, но не обязательно, что это преимущества каждого продукта или приложения. В то время как для приложений, которые разрабатываются в кросс-платформе, iOS является сложной в обращении.
Классификация высокого уровня выглядит следующим образом:
Первым шагом в тестировании iOS-приложений является рассмотрение типа реализации.
Реализация приложения может быть любой из трех перечисленных ниже типов:
1) Веб-приложения: Это приложения, которые ведут себя аналогично встроенным приложениям iOS. Это обычные веб-сайты, к которым пользователь обращается через браузер Safari на iPhone.
2) Нативное приложение: Приложение, разработанное с помощью iOS SDK [Software Development Kit], работает на поддерживаемых iOS устройствах, например, VLC, Flipboard, Uber и т.д.
3) Гибридное приложение: Это смесь или гибрид обоих вышеупомянутых типов. Оно предоставляет доступ к веб-контенту через область просмотра веб-контента, а также имеет некоторые элементы пользовательского интерфейса для iOS. Например, Zomato, Twitter, Gmail и т.д.
Виды тестирования приложений для iOS
Различные типы тестирования приложений iOS [как это делается в типичных условиях] могут быть следующими:
- Ручное тестирование – использование устройства
- Тестирование системы
- Тестирование UI/UX
- Тестирование безопасности
- Полевые испытания
- Ручное тестирование – использование эмулятора
- Единичное тестирование
- Интеграционное тестирование
- Тестирование пользовательского интерфейса
- Автоматическое тестирование
- Регрессионное тестирование
- Тестирование BVT
- Тестирование на совместимость
- Тестирование производительности
Пример приложения:
Прежде чем перейти к рассмотрению различных аспектов процессов тестирования iOS, давайте рассмотрим пример типичного iOS-приложения.
Рассмотрим приложение для сбора средств спортивной команды. Приложение будет иметь вход в социальный аккаунт [Google / Facebook] и страницу оплаты.
Перед тем как перейти на страницу оплаты, должна быть возможность выбрать определенные системой суммы или пользовательское поле для ввода суммы. После завершения оплаты на экране должен отображаться PDF-файл сертификата, и в то же время PDF-файл должен быть отправлен по электронной почте на электронный ящик пользователя, который в данный момент вошел в систему.
Ручное тестирование – использование устройства
a) Тестирование системы
Этот тип тестирования iOS проводится на системе, чтобы проверить, работают ли различные компоненты системы вместе.
В процессе тестирования приложение iOS запускается на реальном устройстве Apple, после чего оно взаимодействует с пользовательским интерфейсом, вызывая определенный набор или наборы действий пользователя. Типичными действиями пользователя могут быть прикосновения или проведение пальцем по экрану.
Наконец, результат тестируется на соответствие ожидаемому.
Для нашего примера, приведенного выше, типичное тестирование системы может состоять из следующих этапов:
- Войдите в приложение для спортивных команд и сбора средств на iOS, используя вход в учетную запись Facebook с помощью открытой аутентификации.
- Выберите из предложенных вариантов заранее установленную сумму в $10.
- Перейдите к платежному шлюзу.
- Выберите опцию мобильного кошелька PayTm для процесса оплаты.
Системные тесты – это операции, которые в основном охватывают различные сквозные потоки в системе. Каждый тест должен быть выполнен с различными доступными конфигурациями. Кроме того, это зависит от устройства и версии iOS, на котором установлено приложение.
б) Тестирование пользовательского интерфейса iOS
UI/UX устройств iOS стал ключевым элементом их истории успеха.
Тестирование UI/UX в устройствах iOS можно разделить на следующие категории:
- Исходные данные: К этой категории относится тестирование функциональных возможностей сенсорного экрана [например, длинное/короткое касание, 3D касание, прокрутка], размеров кнопок, их расположения, цвета шрифтов и их размера и т. д.
- Жесткие клавиши: Нативные приложения легко взаимодействуют со встроенными аппаратными клавишами/жесткими клавишами, имеющимися на устройстве, такими как клавиша Home, звуковые кнопки и т.д. Тестируемое приложение также должно взаимодействовать с жесткими клавишами аналогичным образом.
- Мягкие клавиши/мягкая клавиатура: Как раздражает, когда клавиатура не появляется, когда вы находитесь на странице сообщений Whatsapp. Внешний вид клавиатуры, возможность скрыть ее, когда она не нужна, поддержка смайликов, символов, всех знаков/символов и т.д. необходимы.
- В нашем примере клавиатура может появиться в нескольких местах, например, при вводе пользовательской суммы, вводе реквизитов карты в платежном шлюзе и т.д.
- Экран: Приложение, если оно поддерживается на нескольких устройствах, должно быть протестировано на ориентацию на всех устройствах. В зависимости от устройства, выбранного для тестирования, могут быть некоторые изменения разрешения. В то же время, тестирование должно проводиться для режимов портрет/ландшафт и использования клавиатуры в каждом из случаев.
Если ваше приложение создается не только для iOS, есть несколько пунктов, которые необходимо специально протестировать для iOS, например:
- Списки: В iOS, когда нужно отобразить список, он всегда появляется на совершенно новом экране, в отличие от Android, где появляется всплывающее окно.
Ниже приводится пример того же самого:
- Сообщения: При сбое приложения сообщение, отображаемое в iOS, отличается от сообщения в Android. Также, если вы заметили, на телефонах android при освобождении памяти появляются небольшие сообщения, например, “#GB memory freed” и т.д., но в iOS мы никогда не видим таких сообщений.
Ниже приведен пример:
- Подтверждение удаления: Если внимательно понаблюдать за приложением для iOS, то во всплывающем окне подтверждения удаления действие “Отменить” находится слева от опции “Удалить”. В то время как в Android или других ОС все наоборот.
Это некоторые из примеров, которые требуют отдельных тестовых примеров и тестирования, поскольку iOS имеет стандартный пользовательский интерфейс, сообщения и т.д., которые не могут быть изменены.
в) Тестирование безопасности
В нашем примере мы имеем приложение с платежным шлюзом и страницей входа, поддерживаемой интеграцией с социальной страницей.
Допустим, у вас на телефоне установлено приложение ICICI, и когда вы входите в систему, вместо информации о вашем счете отображается чужая информация или если вы выполняете денежный перевод и приложение отправляет OTP на какой-то другой номер телефона, который не является вашим, вы можете представить, что произойдет. Таким образом, тестирование безопасности является обязательным.
Данные для входа в социальные сети и платежный шлюз должны быть зашифрованы или защищены, чтобы обезопасить приложение от взлома.
г) Полевые испытания
Полевое испытание проводится для проверки поведения приложения в сети передачи данных телефона.
Этот тест обычно проводится, когда приложение достигает стабильной стадии и не дает сбоев при тестировании внутри компании, а все функциональные проблемы были устранены. В основном это делается для проверки работы приложения в медленной сети передачи данных.
Ручное тестирование – использование эмулятора
a) Модульное тестирование
В основном это делается командой разработчиков/индивидуальным разработчиком. Это тестирование проверяет, функционирует ли определенный модуль исходного кода так, как ожидается, или нет.
Разработчики разрабатывают случаи модульного тестирования для отдельного компонента, т.е. изолированного модуля, над которым они работают. Этот тест доказывает, что отдельный модуль функционирует, после чего он вводится в исходный код для работы в качестве элемента интегрированной архитектуры. Как сказано в заголовке, это в основном ручное тестирование, выполняемое с помощью эмуляции тестов.
б) Интеграционное тестирование
В предыдущих шагах мы подробнее остановились на модульном тестировании. Теперь, когда мы уверены в функциональности отдельных блоков/модулей, необходимо проверить и интеграцию. Это тестирование проводится для выявления проблем, связанных с различными точками интеграции.
В нашем примере мы можем назвать логин одним модулем, а платежный шлюз – другим.
Юнит-тестирование будет охватывать тестирование обоих модулей по отдельности. Однако интеграционное тестирование будет проверять целостность обоих модулей.
в) Тестирование пользовательского интерфейса
Как объяснялось выше, тестирование пользовательского интерфейса необходимо для приложения, поскольку оно является ключевым фактором успеха приложения.
Приобрести все модели телефонов для тестирования практически невозможно, так как это будет стоить дорого. Поэтому использование эмулятора – лучший вариант, так как это бесплатно, а также очевидные ошибки пользовательского интерфейса легко обнаружить на эмуляторе.
Автоматизация iOS
a) Регрессионное тестирование
В постоянно меняющейся среде постоянно вносятся изменения, чтобы улучшить приложение или устранить проблемы, которые были обнаружены в предыдущей версии. При внедрении изменений возникает вероятность того, что изменения, вносимые в приложение, могут изменить существующую функциональность.
Проще говоря, внесенные изменения могут создать новый набор проблем в приложении.
Чтобы проверить, работает ли приложение так же, как и после внесения изменений, необходимо провести регрессионное тестирование. Поскольку это повторяющееся действие, автоматизация очень полезна для такого рода тестирования.
б) Тестирование BVT
Хорошим обычаем является запуск автоматизированного пакета на новой сборке, выпущенной для тестирования, так как это экономит много времени, и если основные функциональные возможности дают сбой, об этом немедленно сообщается. По сравнению с ручными усилиями результаты автоматизированных базовых проверочных тестов для принятия или отклонения сборки могут быть получены за считанные минуты.
г) Испытание на совместимость
Как уже говорилось, компания Apple выпускает множество устройств/типов. Если быть точным, на рынке представлено 15 различных типов iPhone, 6 моделей iPod Touch, 10 моделей iPad и 2 модели iPad Pro.
Итак, когда разрабатывается такое приложение, как наше [приложение для сбора средств спортивной команды], оно должно поддерживаться всеми вышеупомянутыми устройствами. Это подразумевает одно: все тестовые примеры должны выполняться на всех этих устройствах.
При таком огромном количестве устройств ручная работа невозможна. Для обеспечения совместимости предпочтительнее использовать автоматизированное тестирование.
д) Тестирование производительности
Некоторые из них проверяются при тестировании производительности:
- Как ведет себя приложение, когда оно вводится в эксплуатацию или работает очень долгое время. Во время рабочего периода заставьте приложение общаться/взаимодействовать/продолжать бездействовать.
- Одна и та же операция должна выполняться с разной нагрузкой каждый раз.
- Как ведет себя система, когда передача данных очень велика.
Эти дела носят повторяющийся характер и в основном выполняются с помощью автоматизации.
Лучшие практики тестирования приложений для iOS
Тестирование приложений для iOS может быть сложным, запутанным, трудным, если только оно не выполнено правильно.
Чтобы продвинуть тестирование iOS-приложений в правильном направлении, можно применить следующие методы:
1) Забудьте об эмуляторах: В большинстве случаев эмуляторы предпочтительнее настоящих устройств. Но это не идеальный случай. Такие вещи, как взаимодействие с пользователем, расход батареи, доступность сети, производительность при использовании, распределение памяти не могут быть протестированы на эмуляторах. Поэтому старайтесь всегда тестировать на реальных устройствах.
2) Автоматизируйте дела, а не делайте их вручную: Насколько быстро вы выполняете определенную задачу? В современном мире всех в основном волнует вопрос затраченного времени. Автоматизация не только сокращает время выполнения, но и повышает эффективность, результативность и охват тестирования программного обеспечения.
3) Разделяйте работу: Разделите тестирование между командами, включая команду разработчиков. Мы можем получить помощь в ручном выполнении тестовых случаев, а также получить помощь от команды разработчиков в автоматизации ручных тестовых случаев.
4) Ловите журналы сбоев: Приложение для iOS может зависать или сбоить при определенных обстоятельствах. Для устранения этой проблемы важную роль играют журналы аварий.
Для получения журналов аварий можно выполнить следующие действия:
- Для MacOS:
- Синхронизируйте устройство iOS с компьютером [Mac].
- Для Mac OS удерживайте нажатой клавишу Option, чтобы открыть строку меню.
- Перейдите в меню Go и нажмите на Library.
- Перейдите в ~/Library/Logs/CrashReporter/MobileDevice/<имя устройства iOS>/.
- Имя файла журнала должно начинаться с имени приложения.
- Для ОС Windows:
- Синхронизируйте устройство iOS с компьютером [Windows].
- Перейдите в C:\Users\AppData\Roaming\Applecomputer\Logs\CrashReporter\MobileDevice\\
- Имя файла журнала должно начинаться с имени приложения.
5) Захват журналов консоли:
Журналы консоли предоставляют общую информацию о работе приложений на устройстве iOS.
Это можно сделать с помощью таких инструментов, как iTools. В приложении iTools нажмите на значок “Инструменты”, когда устройство iOS подключено к системе, на которой запущен iTools. Нажав на “Real-Time log”, вы получите журнал консоли в реальном времени.
6) Захват экрана: Легко понять проблему и, следовательно, легко исправить, если шаги визуальны.
Рекомендуется записывать экран или делать скриншоты проблем, чтобы команда разработчиков лучше их понимала. Снимок экрана можно сделать с помощью встроенной функции, нажав вместе кнопки Power и Home.
Запись экрана можно сделать с помощью функции Quick time player recording, когда устройство iOS подключено к Mac с помощью кабеля Lightning.
Фреймворки для автоматизации iOS
Ниже перечислены некоторые из наиболее часто используемых механизмов автоматизации:
1) Appium
Appium использует веб-драйвер Selenium для автоматизации тестирования iOS-приложений.
Эта платформа является независимой и может использоваться как на веб, так и на мобильных устройствах [как Android, так и iOS]. Она имеет открытый исходный код и не ограничена по языку. Для автоматизации с помощью Appium не требуется изменение приложения или доступ к исходному коду.
Appium работает безотказно независимо от типа приложения: будь то нативное, гибридное или веб-приложение.
2) Calabash
Calabash – это кроссплатформенный фреймворк с открытым исходным кодом, который поддерживает автоматизацию тестирования как Android, так и iOS.
Тесты Calabash пишутся на языке Cucumber, который похож на спецификацию и прост для понимания. Calabash состоит из библиотек, которые позволяют пользователю взаимодействовать как с нативными, так и с гибридными приложениями. Он поддерживает такие виды взаимодействия, как жесты, утверждения, скриншоты и т.д.
3) Earl Grey
Earl Grey – это внутренний фреймворк Google для тестирования пользовательского интерфейса. Она использовалась для тестирования YouTube, Google Photos, Google Play Music, Google Calendar и т.д.
Недавно Earl Grey стал открытым исходным кодом. Некоторые из основных преимуществ Earl Grey: встроенная синхронизация, проверка видимости перед взаимодействием, истинное взаимодействие с пользователем [касание, пролистывание и т.д.]. Это очень похоже на Espresso от Google, который используется для автоматизации пользовательского интерфейса Android.
4) UI Automation
UI Automation разработан компанией Apple и очень похож на UI Automator для Android. API определены Apple, а тесты написаны на JAVA.
5) KIF
KIF означает “Keep it Functional”. Это сторонний фреймворк с открытым исходным кодом.
Это фреймворк для интеграционного тестирования iOS, который тесно связан и используется для тестовых целей XCTest. KIF легко настраивается или интегрируется в проект Xcode, поэтому дополнительный веб-сервер или дополнительные пакеты не требуются. KIF имеет широкий охват в плане версий iOS.
Заключение
Тестирование приложений для iOS может быть самой сложной задачей. Надеюсь, вы получили хорошее представление о тестировании iOS-приложений благодаря этой статье.
Однако выбор правильного подхода, наилучшего процесса тестирования, методологии, инструментов, эмуляторов/устройств и т.д. сделает тестирование iOS-приложений очень успешным.
Перевод статьи “IOS App Testing: A Beginners Guide With A Practical Approach”