Ответ
Я тестировал нативные (iOS/Android) и кроссплатформенные (React Native, Flutter) мобильные приложения. Мой опыт охватывает:
- Функциональное и UI-тестирование: Проверка пользовательских сценариев, корректности отображения на разных устройствах и разрешениях (используя эмуляторы из Android Studio/Xcode и реальные устройства).
- Автоматизация: Написание UI-тестов с помощью Appium (для кроссплатформенной автоматизации) и нативных фреймворков — Espresso для Android и XCUITest для iOS.
- Нефункциональное тестирование: Проверка производительности, потребления памяти, поведения приложения при переключении сетей (3G/4G/Wi-Fi, использование Charles Proxy) и обработке прерываний (звонки, SMS).
- Тестирование API бэкенда, на который опирается мобильное приложение, через Postman.
Пример теста на Appium с Python (Page Object Pattern):
# page_objects/login_page.py
from appium.webdriver.common.mobileby import MobileBy
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
class LoginPage:
def __init__(self, driver):
self.driver = driver
self.username_field = (MobileBy.ACCESSIBILITY_ID, "usernameField")
self.password_field = (MobileBy.ACCESSIBILITY_ID, "passwordField")
self.login_button = (MobileBy.ACCESSIBILITY_ID, "loginButton")
def login(self, username, password):
WebDriverWait(self.driver, 10).until(EC.presence_of_element_located(self.username_field)).send_keys(username)
self.driver.find_element(*self.password_field).send_keys(password)
self.driver.find_element(*self.login_button).click()
# tests/test_login.py
def test_successful_login(appium_driver):
login_page = LoginPage(appium_driver)
login_page.login("test_user", "secure_pass123")
# Проверяем переход на главный экран
welcome_element = WebDriverWait(appium_driver, 10).until(
EC.presence_of_element_located((MobileBy.ACCESSIBILITY_ID, "welcomeMessage"))
)
assert welcome_element.is_displayed()
assert "Welcome" in welcome_element.text
Также я интегрировал автоматизацию в CI/CD пайплайны с помощью Bitrise или GitHub Actions для запуска тестов на каждом коммите.
Ответ 18+ 🔞
Слушай, я тут по мобилкам шарю, как слепой по бане — на ощупь, но в итоге всё нашел. Тестил и нативные штуки (эти ваши iOS/Android), и кроссплатформенные (React Native, Flutter). Опыт, бля, получился овердохуища.
Что конкретно делал, спросишь? Да вот, держи список, чтоб не скучно было:
- Функциональное и UI-тестирование: По сути, тупо жал кнопки и смотрел, не развалится ли всё. Проверял, чтобы на разных телефонах и планшетах интерфейс не ехал, как у пьяного по бордюру. Сидел в эмуляторах из Android Studio и Xcode, а потом доканывал реальными устройствами — доверия к железу, ебать, ноль, пока сам не потрогаешь.
- Автоматизация: Ну, это святое. Писал скрипты, чтобы за меня эту рутину делали. Для кроссплатформы Appium крутил, а для нативных — их родные фреймворки: Espresso под Android и XCUITest под iOS. Чтоб не кликать каждый раз одно и то же, ёпта.
- Нефункциональное тестирование: Тут уже веселее. Смотрел, не жрёт ли приложение память, как свинья, не тормозит ли, если сеть хуёвая (симулировал 3G/4G/Wi-Fi через Charles Proxy). И, конечно, любимое — врывался в процесс звонком или смской, смотрел, как апп выкручивается. Иногда выкручивалось так, что сам от себя охуевал.
- Тестирование API: Ну а куда без бэкенда? Тыкал в него палкой через Postman, смотрел, какие запросы приложение шлёт и что получает обратно. Бывало, такой ответ придёт, что волнение, ебать, — думаешь, ну всё, сейчас накрылось всё медным тазом.
Вот, например, как выглядит кусок автотеста на Appium с Python (по-умному это Page Object Pattern зовётся):
# page_objects/login_page.py
from appium.webdriver.common.mobileby import MobileBy
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
class LoginPage:
def __init__(self, driver):
self.driver = driver
self.username_field = (MobileBy.ACCESSIBILITY_ID, "usernameField")
self.password_field = (MobileBy.ACCESSIBILITY_ID, "passwordField")
self.login_button = (MobileBy.ACCESSIBILITY_ID, "loginButton")
def login(self, username, password):
WebDriverWait(self.driver, 10).until(EC.presence_of_element_located(self.username_field)).send_keys(username)
self.driver.find_element(*self.password_field).send_keys(password)
self.driver.find_element(*self.login_button).click()
# tests/test_login.py
def test_successful_login(appium_driver):
login_page = LoginPage(appium_driver)
login_page.login("test_user", "secure_pass123")
# Проверяем переход на главный экран
welcome_element = WebDriverWait(appium_driver, 10).until(
EC.presence_of_element_located((MobileBy.ACCESSIBILITY_ID, "welcomeMessage"))
)
assert welcome_element.is_displayed()
assert "Welcome" in welcome_element.text
А ещё эти все тесты я в CI/CD пайплайны засунул — на Bitrise или GitHub Actions. Чтоб на каждом коммите сами запускались, как по маслу. Красота, бля буду.