Какой у вас опыт тестирования нативных мобильных приложений?

Ответ

Да, есть опыт тестирования нативных приложений для iOS (Swift, Objective-C) и Android (Kotlin, Java).

Основные направления тестирования:

  • UI/UX: Тестирование интерфейсов с использованием фреймворков Espresso (Android) и XCTest/XCUItest (iOS).
  • API: Проверка интеграции с бэкендом через инструменты вроде Charles Proxy или Postman.
  • Производительность: Анализ потребления памяти, CPU и скорости отклика.
  • Безопасность: Проверка на хранение чувствительных данных, анализ трафика.

Инструменты: Xcode, Android Studio, Appium (для кроссплатформенной автоматизации), эмуляторы и реальные устройства.

Пример UI-теста для Android (Espresso + JUnit):

@Test
public void testLoginButton_ShowsErrorOnInvalidCredentials() {
    // Проверяем, что кнопка видима и кликабельна
    onView(withId(R.id.loginButton))
        .check(matches(isDisplayed()))
        .perform(click());
    // Убеждаемся, что после клика отображается сообщение об ошибке
    onView(withId(R.id.errorMessage))
        .check(matches(withText("Invalid credentials")));
}

Особенности нативного тестирования: работа с разрешениями, тестирование офлайн-режима, обработка push-уведомлений, анализ логов через Logcat (Android) или Console (iOS).

Ответ 18+ 🔞

Да ты посмотри, какой у нас тут эксперт подъехал! Опыт тестирования нативных приложений, говоришь? Ну-ка, ну-ка, расскажи, как ты эти штуки проверяешь.

Так, по полочкам, блядь. iOS, значит, на этих ихних Swift и Objective-C, которые только свои яблочные девайсы и понимают. А Android — на Kotlin и Java, для всех остальных, кто не в секте. Логично, пиздец.

И чем же ты, собственно, занимаешься, кроме как кнопки тыкаешь?

  • UI/UX: Ага, то есть смотришь, чтобы всё красиво было и не разъезжалось. Используешь ихние родные фреймворки — Espresso для андроида и XCTest для айосов. Чтобы кнопка там нажималась, а текст не уползал за экран, понимаешь?
  • API: Это когда ты проверяешь, как твоя аппликуха общается с сервером. Включил Charles Proxy, смотришь, какие запросы летят — не хуйню ли какую-то шлёт? Или в Postman'е дергаешь эти эндпоинты, чтобы сервер не глючил.
  • Производительность: О, это самое интересное! Смотришь, чтобы приложение память не жрало, как свинья, процессор не нагружало до красного свечения и не тормозило, будто по ухабам едешь. Иначе пользователь просто выбросит это говно.
  • Безопасность: А вот это серьёзно, ёпта. Чтобы пароли в открытом виде не хранились, трафик шифровался, а всякие левые дяди не могли к данным подобраться. Иначе будет не тестирование, а расследование утечки, блядь.

Инструменты? Ну ясное дело: Xcode и Android Studio — святая троица разработчика и тестировщика. Appium — если нужно на обе платформы одним махом. И конечно, эмуляторы — чтобы не сжирать все девайсы в офисе, и реальные железяки — потому что на эмуляторе всегда всё работает, а на телефоне тёщи — хуй знает что.

А вот, смотри, примерчик, как ты кнопку логина мучаешь на Android:

@Test
public void testLoginButton_ShowsErrorOnInvalidCredentials() {
    // Ищем кнопку, глазеть на неё и щёлкать
    onView(withId(R.id.loginButton))
        .check(matches(isDisplayed()))
        .perform(click());
    // А теперь ищем, не вылезло ли сообщение, что мы лохи и пароль не угадали
    onView(withId(R.id.errorMessage))
        .check(matches(withText("Invalid credentials")));
}

Особенности, говоришь? Да их, блядь, овердохуища! Это ж не веб-страничка. Тут тебе и разрешения всякие: доступ к камере, контактам, геолокации — пользователь может и отказать, и приложение не должно на этом накрыться медным тазом. Офлайн-режим проверить — что будет, если интернет сдох? Пуши-уведомления — приходят ли, открываются ли? И, конечно, святое — логи. В Android Studio в Logcat'е ковыряться или в Xcode в Console. Без этого ты как слепой котёнок, вообще ни хуя не понятно, что внутри происходит.

Вот такая, блядь, работа. Не просто пальцем тыкать, а головой думать, куда и с какой силой тыкнуть, чтобы всё не развалилось.