Пермишены (permissions) для тестировщика: зачем нужно, что такое и как с этим работать |
15.07.2024 00:00 |
Автор: Сухарев Антон @antohen_suh
В тестировании, особенно мобильном, существуют специфические области приложений, которые не всегда тестируются «вдумчиво» в силу своей необычности. Одна из таких областей — это разрешения или, как их принято называть, permissions (пермишены). Всё чаще я сталкиваюсь с ними в работе , на собеседованиях и в различных тренажерах по тестированию, поэтому решил погрузиться и более детально рассмотреть эту необычную и по-своему интересную часть мобильных приложений. Меня зовут Антон, я QA Mobile в компании MobileUp. В статье я разберу, что такое пермишены, для чего нужны, какие виды существуют, где их можно найти и как тестировать. Эту статью я пишу исключительно с точки зрения ручного тестирования, но в конце текста оставлю интересные ресурсы, которые могут пригодиться для QA Auto (но это не точно). Что такое пермишеныPermissions (или разрешения) в мобильных ОС — это механизмы безопасности, предназначенные для защиты конфиденциальности пользователей. Они ограничивают доступ приложений к различным функциям и данным на устройстве. Какие задачи решают permissions:
Виды пермишеновВ iOS- и Android-приложениях существуют различные виды разрешений. Условно их можно разбить на две группы — те, которые требуют разрешения пользователя, и те, которые его не требуют. Пермишены, требующие разрешенияПриложения могут запрашивать у пользователя разрешения, чтобы получить доступ к определенным функциям или данным на устройстве. Стоит отметить, что система разрешений iOS, как и другие составляющие ОС, весьма ограничена по сравнению с Android, это является следствием политики компании. Поэтому «глубина» и количество возможных пермишенов на этих платформах отличаются. Рассмотрим наиболее распространенные разрешения для iOS и Android. AndroidГеолокация. Доступ к точному или приблизительному местоположению. iOSДанные геолокации. Запрос доступа к местоположению пользователя. Может использоваться, например, для отображения карт или предоставления локализованной информации. Эти списки не исчерпывающие, в зависимости от версии операционной системы и конкретных приложений могут потребоваться другие разрешения (с подробным списком всех пермишенов вы можете ознакомиться в документации Android или iOS в разделе Privacy). Пермишены, не требующие разрешенияВ Android и iOS существует несколько разрешений, которые не требуют явного согласия пользователя, так как они оцениваются как не представляющие значительной угрозы конфиденциальности или безопасности. Они автоматически предоставляются при установке или обновлении приложения. Вот несколько примеров таких разрешений: AndroidВ Android эти разрешения относятся к категории "Normal permissions". Вот некоторые из них:
Подробнее о всех «нормальных» пермишенах можно узнать по ссылке на официальном сайте: iOSВ iOS большинство потенциально чувствительных данных и функций устройства требуют явного разрешения пользователя. Однако есть несколько примеров пермишенов, для которых можно обойтись без него:
Apple предоставляет полные справочники и документацию, которые включают информацию о разрешениях, требуемых для использования различных компонентов iOS. Эта информация доступна на сайте Apple Developer . В разделе документации можно поискать по тегу "Privacy" или искать конкретные API, чтобы узнать, требуют ли они запроса разрешений. Где хранится информация о имеющихся у приложения разрешениях в Android и iOSВ Android и iOS информация о запрашиваемых приложением разрешениях хранится в системных файлах конфигурации, которые являются частью пакета приложения. Для каждой из платформ этот механизм работает немного по-разному. AndroidНа платформе Android информация о разрешениях хранится в файле AndroidManifest.xml. Этот файл является обязательным компонентом любого Android-приложения и должен находиться в корневой директории проекта. В AndroidManifest.xml разработчики объявляют необходимые приложению разрешения, используя элемент <uses-permission>. Например, для запроса разрешения на доступ к камере в файле манифеста будет указана строка: Пользовательская система Android затем использует эту информацию для предоставления соответствующих запросов на разрешение при попытке приложения использовать защищенные функции. Информацию о необходимых разрешениях приложения можно найти в Android Studio в файле AndroidManifest.xml или же можно вывести этот файл в дебаг-панель непосредственно внутри мобильного приложения (если такая есть и при помощи коллег-разработчиков, например). iOSВ операционной системе iOS информация о разрешениях, которые приложение может запрсить у пользователя, хранится в файле Info.plist (список свойств). Этот файл содержит конфигурационные данные приложения и используется для хранения различной информации, включая тексты запросов на разрешения. Разработчики должны включить в Info.plist специальные ключи для разрешений, которые они хотят запрашивать, а также поясняющие сообщения, которые будут показаны пользователю в момент запроса. Например, для запроса доступа к камере необходимо добавить ключ NSCameraUsageDescription с описанием, почему приложению требуется доступ к камере. Когда приложение пытается воспользоваться определённой функцией, iOS автоматически отображает диалоговое окно с запросом соответствующего разрешения, используя текст, указанный в Info.plist. В «чистом» виде файл Info.plist внутри вашего проекта можно найти в Xcode версии 12 или старее. В Xcode версии 13 и новее эта информация хранится здесь — Project (нужно нажать на иконку проекта в левой панеле) > Targets > Info Файл Info.plist можно вывести в панель как было до Xcode 13, если возникнет такая необходимость, шаги описаны в этой статье. Как тестировать пермишеныТестирование разрешений является ключевым аспектом обеспечения безопасности и корректной работы мобильных приложений на платформах Android и iOS. Мой подход к тестированию пермишенов включает следующие шаги. Понимание требований и документацииПрежде всего, важно понять, какие разрешения требуются для каждой функциональности приложения, изучив техническую документацию и требования к приложению. Далее нужно создать список всех разрешений, которые приложение запрашивает, и определить, для чего каждое из них необходимо. Сценарии тестированияНужно разработать тестовые сценарии для проверки поведения приложения в различных условиях:
Здесь при проверках понадобится обращение к файлам конфигов пермишенов в AndroidManifest.xml и Info.plist для сравнения, что доступы действительно получены или отозваны. Производительность и безопасностьПроверка на утечки данных. Нужно убедиться, что приложение не запрашивает лишние разрешения, которые могут компрометировать приватность пользователя. Оптимизация разрешений. Проверить, можно ли уменьшить количество запрашиваемых разрешений и не ухудшить при этом функциональность приложения. Тестирование на разных устройствах и версиях ОСТестируем приложение на разных устройствах и версиях операционных систем, так как поведение системы управления разрешениями может отличаться (особенно актуально для девайсов на Android) . Использование реальных сценариевВажно попросить реальных пользователей протестировать приложение и предоставить обратную связь по поводу запросов разрешений. Это позволит убедиться, что они понятны и логичны. Проверка документации и UI/UXНужно убедиться, что все запросы разрешений сопровождаются чётким и понятным объяснением, почему приложению требуется доступ к определенным функциям или данным. Автоматизация тестированияЭтот пункт здесь потому, что пермишены это как раз-таки тот функционал, который хорошо можно автоматизировать. Для автоматизации тестирования для проверки разрешений подойдут следующие инструменты: Appium, Espresso для Android, XCTest для iOS. Это может включать автоматическое предоставление и отзыв разрешений для тестирования приложения в различных сценариях. Пример применения подходаРазберём применения подхода на примере конкретного приложения для записи и сохранения звуковых заметок (запись производится во внутреннюю песочницу приложения). Изучение документации и создание списка разрешенийAndroidПроверяем AndroidManifest.xml для доступа к следующим разрешениям: Запись аудио. android.permission.RECORD_AUDIO — это разрешение необходимо для доступа к микрофону устройства для записи аудио. Сохранение файлов Для версий Android до 10 (API level 29):
Для Android 10 (API level 29) и выше можно не использовать разрешения WRITE_EXTERNAL_STORAGE и READ_EXTERNAL_STORAGE благодаря концепции "scoped storage", которая ограничивает доступ к файлам во внешнем хранилище. iOSПроверяем Info.plist для NSMicrophoneUsageDescription. Запись аудио. NSMicrophoneUsageDescription — в Info.plist должно быть указано описание, объясняющее, почему приложению требуется доступ к микрофону. Это описание покажется пользователю при запросе разрешения на использование микрофона. Сохранение файлов.Для сохранения файлов в локальной файловой системе в пределах песочницы приложения на iOS не требуется специальных разрешений. Приложения могут свободно записывать и читать файлы в своем локальном хранилище. Сценарии тестирования разрешенийAndroidС разрешением. Убедимся, что приложение позволяет записывать и сохранять звуки после предоставления разрешений. Без разрешения. При отклонении разрешения на микрофон, приложение предлагает только просмотр и воспроизведение сохраненных заметок. Отзыв разрешений. В настройках устройства отзываем разрешения и проверяем реакцию приложения на новые попытки использования микрофона. Повторные запросы. Если пользователь пытается снова записать звук, приложение должно корректно запросить разрешение. iOSС разрешением. Проверяем, что приложение корректно записывает и сохраняет звуки после одобрения разрешений. Без разрешения. iOS автоматически блокирует доступ к функционалу и предоставляет уведомление с возможностью перейти в настройки для изменения разрешений. Отзыв разрешений. Пользователь может отключить разрешения в настройках. Приложение должно корректно отреагировать на отключение разрешений и предложить перейти в настройки для их восстановления. Повторные запросы. iOS не позволяет повторно запрашивать разрешение в том же сеансе после отказа. Нужно убедиться, что приложение корректно направляет пользователя изменить настройки вручную. Производительность и безопасностьПроверка на утечки данных. Смотрим на запрашиваемые разрешения в приложении и на прописанные разрешения файлах Info.plist и AndroidManifest.xml. Оптимизация разрешений. Этот пункт я предпочитаю проговаривать с разработчиками, если вдруг нахожу какие-либо ошибки, ведь они разбираются в системе пермишенов лучше. В целом, тестирование производительности и безопасности, в том числе и пермишенов, обычно проводится специализированными отделами с более глубокой экспертизой в данном вопросе. Но если на вашем проекте нет такого, можете оценить настолько, насколько хватает ваших знаний. Тестирование на разных устройствахЗдесь работают всем знакомые правила выбора устройств для тестирования мобильных приложений. Вот наиболее подходящие для этого статьи: https://habr.com/ru/articles/516160/ Использование реальных сценариевПроводим тестирование с реальными пользователями на обеих платформах для сбора отзывов о понятности и логичности запросов разрешений. Проверка документации и UI/UXiOSПроверка документации:Смотрим, что в Info.plist приложения чётко и точно описаны причины запроса доступа к микрофону через NSMicrophoneUsageDescription. Описание должно ясно сообщать пользователю, почему приложению необходим доступ к микрофону для функции записи звуковых заметок. Проверка UI/UX.Проверяем, что запросы разрешений высвечиваются в момент, когда пользователь намеревается впервые использовать функцию записи. Оцениваем, насколько интуитивно понятны уведомления и диалоги разрешений. Они должны быть читабельными и доступными на всех устройствах и в различных условиях использования. Например, в режиме низкой освещённости или при использовании VoiceOver. Android:Проверка документации.Проверяем, что в AndroidManifest.xml корректно указаны разрешения RECORD_AUDIO и при необходимости WRITE_EXTERNAL_STORAGE для версий до Android 10. Документация приложения должна также объяснять, зачем эти разрешения требуются, особенно если приложение сохраняет записи в общедоступном месте. Проверка UI/UX. Смотрим, предоставляет ли приложение пользователю достаточно контекста перед запросом разрешения на запись аудио. Это важно для понимания пользователем необходимости предоставления разрешений.Тестируем, как приложение ведёт себя на разных устройствах и ориентациях экрана, особенно при появлении диалоговых окон с запросом разрешений. Проверяем, что все элементы UI остаются доступными и функциональными, что особенно важно на устройствах с маленькими экранами или нестандартными аспектами. Автоматизация тестированияЭтот пункт остается на ваше усмотрение. В целом, пермишены это хорошая функциональность для автоматизации Большое спасибо, что дочитали, если есть что-то, про что я забыл упомянуть - пишите в комментарии, буду рад почитать их! |