В этой статье рассмотрим особенности тестирования мобильных приложений с помощью эмуляторов/симуляторов и на реальных устройствах. Эмуляторы и симуляторы — это программные инструменты, которые имитируют различные операционные системы. Поскольку поисковые системы быстрее индексируют сайты, имеющие мобильные версии по сравнению с сайтами, ориентированными только на десктоп, перед выпуском приложения на рынок критически важно решить все серьезные проблемы. Фундаментальные принципы тестирования для мобильных и десктопных приложений одинаковы, но для мобильных все же есть нюансы. Содержание: Что такое мобильные эмуляторы и симуляторы; Типы мобильных тестов; Инструменты/фреймворки автоматизации мобильного тестирования; Когда можно использовать эмуляторы/симуляторы, а когда — стоит тестировать на реальных устройствах. Мобильный эмулятор это программа, которая аппаратно и программно имитирует работу реального необходимого устройства. Эмуляторы настраиваются в виртуальной среде. Настроив виртуальную среду, команда разработки получает доступ к полноценному непрерывному функциональному тестированию.  Примеры аппаратных компонентов, которые можно протестировать с помощью эмулятора, включают производительность батареи, оперативную память (RAM), процессор, камеру и клавиатуру. С программной точки зрения можно говорить об обмене сообщениями, безопасности и просмотре веб-страниц. Если веб-сайт тяжелый, эмулятор может не справиться с поддержкой желаемого темпа из-за технических характеристик телефона. Мобильный симулятор это программа, созданная в виртуальной среде, которая также копирует конфигурацию и поведение реального целевого устройства. По описанию звучит очень похоже на эмулятор, потому что обе программы служат аналогичной цели. Довольно часто эти названия используются взаимозаменяемо, но разница все же есть, и лежит она в плоскости аппаратной части. Симуляторы не имитируют аппаратную часть устройств. Только с помощью эмуляторов можно протестировать, например, работу микрофона или динамика. Симуляторы созданы для того, чтобы проверять только программную часть, которая существует в производственной среде мобильного устройства.  Есть множество мобильных приложений и несколько видов тестирования этих приложений. Самый распространенный вид это функциональное тестирование, целью которого является подтверждение того, что приложение работает в соответствии с требованиями. Другие виды: Тестирование совместимости (Compatibility Testing) — с его помощью проверяется, совместимо ли мобильное приложение с разными операционными системами и версиями. Тестирование установки (Installation Testing) — направлено на проверку удобства процесса установки и удаления приложения для пользователя. С его помощью можно удостовериться, что обновления не содержат ошибок и исследовать, что происходит с приложением, если пользователь его не обновляет. Проверка помех (Interruption Testing) — целью этого вида тестирования является проверка поведения приложения в состоянии приостановки, а затем возврата в предыдущее состояние. Например, пользователь смотрит видео и в этот момент ему позвонили. Приложение, проигрывающее видео, должно перейти в фоновый режим, а после вернуться в предыдущее состояние до звонка. Нагрузочное тестирование (Load Testing) предназначено для проверки того, как отвечает приложение, если к нему обращаются одновременно очень много пользователей. Пользователи пытаются одновременно установить, удалить и использовать приложение, чтобы посмотреть, не даст ли оно сбой или медленную загрузку. Тестирование локализации (Localization Testing) проверяет качество адаптации под определенный географический регион. Например, тест может включить верификацию определенного языка, соответствие требованиям местного законодательства или временной зоны. Тестирование производительности (Performance Testing) — проверяет производительность приложения под определенными условиями загруженности, таких как проверка скорости приложения, плохое покрытие сети и недостаток доступной памяти. Тестирование безопасности (Security Testing) — проверяет уязвимость аутентификации, авторизации, взломов и безопасности данных. Юзабилити-тестирование (Usability Testing) проверяет, удобно ли пользователям использовать приложение. Цель в том, чтобы удостовериться, легко ли с помощью приложения выполнить определенную задачу. Тенденция использования инструментов автоматизации тестирования мобильных устройств набирает обороты. Причины тому — быстрый фидбек, CI/CD, более точные тесты и увеличенная производительность. Вот список некоторых новых инструментов: Appium — опенсорсный фреймворк для автоматизации для тестирования нативных, гибридных и мобильных приложений.  TestProject — бесплатная платформа для автоматизации тестирования мобильных приложений (Android и iOS), веба и API. Detox  — опенсорсный комплексный фреймворк для тестирования, работающий на реальном устройстве или симуляторе. Espresso — нативный фреймворк для тестирования Android-приложений. XCUITest — фреймворк для тестирования iOS-приложений. В использовании эмуляторов, симуляторов и реальных устройств для тестирования есть свои сильные стороны. Выбранный путь тестирования зависит от степени риска и фазы. К примеру, если единственный риск связан с рендерингом веб-сайта, тогда лучше выбрать эмулятор или симулятор. Оба варианта приемлемы, если необходимо проверить важную для конечного пользователя отзывчивость. Кроме того, стоимость такого тестирования будет более оптимальной по сравнению с использованием реального устройства. Однако некоторые дефекты можно найти только на реальном устройстве. Если основной риск связан с такими действиями, как свайп или перетаскивание приложения, то, пожалуй, будет лучше не выбирать эмулятор или симулятор. Организации предпочитают для тестирования использовать только реальные устройства, но они стоят денег. Из соображений экономии бюджета мы стараемся использовать комбинацию из эмуляторов, симуляторов и реальных устройств. Эмпирическое правило гласит — использовать эмуляторы для тестирования аппаратной части и симуляторы для тестирования программной части. Эмулятор может проверить, как работает наше приложение, используя CPU или разное выделение памяти. Хороший тому пример — тестирование встроенного программного обеспечения с использованием эмулятора. Встроенное программное обеспечение в нашем телефоне повсюду. Это программное обеспечение, которое обеспечивает низкоуровневый контроль за аппаратной частью мобильных телефонов. Симулятор может гарантировать высокую производительность внутреннего приложения во время взаимодействия с внешним приложением, например, при обмене данными между приложениями. Эмуляторы и симуляторы полезны для тестирования при широком диапазоне условий. Несмотря на это, целесообразно, когда они не служат заменой реальным устройствам. Тестирование на реальном устройстве очень полезно, когда производится на важных этапах перед продакшеном. Чем ближе мы подходим к продакшену, тем серьезнее становится наш выбор. Организация может использовать виртуальную платформу на ранней стадии, которая включает циклы разработки. Юнит-тестирование и смоук-тестирование выполняются потому, что разработчики изолируют куски кода. Вывод Эмуляторы и симуляторы помогают получить быструю обратную связь. Поскольку реальные устройства довольно дорогостоящи, их оставляют для тестирования на более поздних этапах, таких как интеграционное и функциональное тестирование. Материал подготовлен в рамках курса «Python QA Engineer». Всех желающих приглашаем на бесплатный двухдневный интенсив «Про Python для автоматизатора: основы основ». Содержание: 1. Пару слов про Python.2. Разберёмся, какие есть типы данных/объекты в Питоне и зачем про это вообще знать.3. Декораторы и их использование в автотестах: потренируемся писать декораторы и поищем им полезное применение. Подходит для тех, кто не так давно автоматизирует на Python, но не разбирался в возможностях и ограничениях Python и для тех, кто ещё новенький, но хотел бы. Для тех, кто давно программирует на Python, будет скучновато и вряд ли вы узнаете что-то новенькое.  Редактор