Как эмулировать местоположение при тестировании
Что проверяют
Знаете ли вы, откуда приложение берёт местоположение, и умеете ли подменить его в каждом источнике: GPS устройства, геолокация браузера, регион по IP. Следом обычно спрашивают, какие сценарии вы проверите, кроме «координаты подставились».
Как отвечать
Разложите по платформам:
- Android-эмулятор: Extended controls, вкладка Location, там точка на карте или маршрут из GPX/KML. Из консоли
adb emu geo fix 37.62 55.75, сначала долгота, потом широта; - реальное Android-устройство: в параметрах разработчика выбрать приложение для фиктивного местоположения;
- iOS Simulator: меню Features → Location или команда
xcrun simctl location booted set 55.75,37.62; в Xcode можно подключить GPX-файл к схеме запуска; - мобильные автотесты: в Appium координаты задаются методом
set_location; - веб: в Chrome DevTools панель Sensors, в Playwright параметр контекста
geolocationплюс разрешениеgeolocationвpermissions, в Selenium 4 команда CDPEmulation.setGeolocationOverride.
Регион по IP подменяется иначе: VPN или прокси с выходом в нужной стране либо тестовая настройка GeoIP на стенде. Заголовок вроде X-Forwarded-For помогает, только если бэкенд ему доверяет, а на проде так быть не должно.
Сценарии, которые стоит назвать: отказ в разрешении, долгое ожидание координат, низкая точность, движение по маршруту для доставки и такси, граница зоны обслуживания, смена часового пояса вместе с регионом (в Playwright timezone_id). Отдельно упомяните защиту от подмены: многие приложения распознают фиктивное местоположение и блокируют действие, поэтому тестовой сборке нужен флаг, который это отключает.
Где спотыкаются
Путают GPS и IP. Подмена координат в эмуляторе никак не меняет регион, который сервер определяет по адресу.
Переопределяют navigator.geolocation своим скриптом. Такой тест не проверяет работу с разрешениями и ломается при любом изменении страницы, встроенные механизмы браузера надёжнее.
Проверяют только удачную точку. Основные баги живут в отказе от разрешения, потере сигнала и переходе через границу зоны.