Как тестировать маршруты и геолокацию
Что проверяют
Умеете ли вы тестировать то, что зависит от реального положения и движения, не выходя из офиса. Следом обычно спрашивают, как автоматизировать поездку по маршруту и что делать с разрешениями.
Как отвечать
Разделите задачу на три части: получение координат, построение маршрута и реакцию на движение.
Подмена геопозиции:
- iOS: в Xcode симуляция локации и GPX-файлы с маршрутом, в симуляторе готовые сценарии движения вроде City Run и Freeway Drive;
- Android: расширенные настройки эмулятора с загрузкой GPX или KML и воспроизведением маршрута, команда
adb emu geo fix(сначала долгота, потом широта); - веб: панель Sensors в Chrome DevTools, в Playwright
context.setGeolocation()вместе с разрешениемgeolocation; - автотесты: Appium задаёт координаты через
setLocation.
Сценарии:
- разрешения: отказ, «только при использовании», фоновый доступ, приблизительная геопозиция (с iOS 14 и Android 12 пользователь может не дать точную), отзыв разрешения во время поездки;
- качество сигнала: выключенный GPS, большая погрешность, прыжки координат, пропадание сигнала в тоннеле;
- маршрут: недостижимая точка, старт равен финишу, много промежуточных точек, перестроение при съезде, единицы измерения и локализация адресов;
- геозоны: вход и выход, дребезг на границе, лимиты платформы (на iOS приложение отслеживает не больше 20 регионов);
- фон и батарея: трекинг при свёрнутом приложении и заблокированном экране, расход заряда за час поездки.
Картографический сервис в автотестах лучше подменить заглушкой: иначе тесты зависят от чужих данных и лимитов запросов, да ещё и стоят денег.
Где спотыкаются
Проверяют одну статичную точку. Большинство багов появляется при движении: перестроение маршрута, фоновый трекинг, потеря сигнала.
Путают порядок координат. В одних API первой идёт широта, в GeoJSON и adb emu geo fix первой идёт долгота, и точка улетает в океан.
Игнорируют состояния разрешений, особенно приблизительную геопозицию. Приложение, которое ждёт точности в 10 метров, с погрешностью в километры ведёт себя странно.