Как вы тестируете deep links (диплинки) в мобильных приложениях?

«Как вы тестируете deep links (диплинки) в мобильных приложениях?» — вопрос из категории Мобильное тестирование, который задают на 10% собеседований QA Тестировщик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Тестирование deep links (ссылок, которые открывают конкретный экран или выполняют действие внутри приложения) — важная часть проверки интеграции приложения с внешним миром.

Что такое deep link? Это URI-схема (например, myapp://) или универсальная ссылка (https), которая ведет прямо в определенное место приложения: myapp://product/123 или https://example.com/product/123.

Ключевые сценарии для тестирования:

Сценарий Что проверяем
Приложение установлено Корректное открытие нужного экрана с переданными параметрами (например, товар с ID 123).
Приложение не установлено Перенаправление в App Store/Play Market (для кастомных схем) или открытие fallback-веб-страницы (для универсальных ссылок).
Невалидная/битая ссылка Обработка ошибки: показ информативного сообщения пользователю или открытие главного экрана.
Глубокое состояние Ссылка открывает экран, доступный только авторизованным пользователям. Проверяем корректный redirect на логин.

Практические шаги тестирования:

  1. На устройстве/эмуляторе:

    • Ввод ссылки в браузере Safari/Chrome.
    • Открытие ссылки из приложения "Заметки" или почтового клиента.
    • Использование командной строки:

      # iOS (через Simulator)
      xcrun simctl openurl booted "myapp://settings"
      
      # Android (через ADB)
      adb shell am start -W -a android.intent.action.VIEW -d "myapp://settings"
  2. В автоматизации (Пример для Android Espresso):

    @Test
    fun testDeepLinkOpensProductScreen() {
        // Запуск активности по deep link
        val intent = Intent(Intent.ACTION_VIEW, Uri.parse("myapp://product/789"))
        activityTestRule.launchActivity(intent)
    
        // Проверка, что открылся экран с деталями товара и ID корректный
        onView(withId(R.id.product_title)).check(matches(isDisplayed()))
        onView(withId(R.id.product_id)).check(matches(withText("789")))
    }
  3. Инструменты: Postman (для проверки HTTP-редиректов универсальных ссылок), Charles Proxy/Fiddler (для анализа сетевых запросов).