Можно ли настроить прокси на мобильном симуляторе/эмуляторе для тестирования?

«Можно ли настроить прокси на мобильном симуляторе/эмуляторе для тестирования?» — вопрос из категории Мобильное тестирование, который задают на 24% собеседований AQA / Automation. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Да, это стандартная практика для анализа сетевого трафика мобильного приложения во время тестирования. Я часто использую Charles Proxy или Fiddler для перехвата, модификации и отладки HTTP/HTTPS-запросов.

Настройка прокси для разных платформ:

  1. Android Emulator:

    • Через командную строку при запуске:
      emulator -avd Pixel_4_API_30 -http-proxy http://192.168.1.10:8888
    • Через настройки внутри запущенного эмулятора (Settings → Network & internet → Internet → кнопка шестеренки у сети → Advanced → Proxy).
  2. iOS Simulator: Он использует сетевые настройки хостовой машины (Mac). Поэтому нужно:

    • Настроить прокси (например, Charles) на самом Mac.
    • В симуляторе трафик автоматически будет идти через этот прокси.
    • Важно: Для HTTPS-трафика необходимо установить SSL-сертификат Charles в симулятор (Help → SSL Proxying → Install Charles Root Certificate in iOS Simulators).

Автоматизация в UI-тестах (Пример на Java + Appium): Иногда нужно динамически менять прокси в тесте.

import io.appium.java_client.android.AndroidDriver;
import org.openqa.selenium.Proxy;
import org.openqa.selenium.remote.CapabilityType;
import org.openqa.selenium.remote.DesiredCapabilities;

public class ProxyTest {
    public static void main(String[] args) {
        DesiredCapabilities caps = new DesiredCapabilities();
        caps.setCapability("platformName", "Android");
        caps.setCapability("deviceName", "emulator-5554");
        // Настройка прокси
        Proxy proxy = new Proxy();
        proxy.setHttpProxy("192.168.1.10:8888");
        caps.setCapability(CapabilityType.PROXY, proxy);

        AndroidDriver driver = new AndroidDriver(new URL("http://127.0.0.1:4723"), caps);
        // ... выполнение тестов с перехватом трафика
        driver.quit();
    }
}

Цели такого тестирования: проверка корректности отправляемых запросов и ответов, тестирование поведения приложения при ошибках сети (с помощью инструментов типа Charles, которые могут симулировать медленную сеть или обрывы).