Недавно я заметил проблему с Эмуляторы Genymotion и виртуальная коробка конфигурации. До сих пор я использовал только один эмулятор genymotion, который, как только я начал все время, имел один статический IP-адрес, а тесты автоматизации Java-скриптов не дали мне никаких проблем, потому что он был настроен на вызов именно этого IP-адреса и запуск тестов на эмуляторе. Недавно я решил добавить несколько других эмуляторов в свой список, и теперь эти IP-адреса перепутались. Иногда IP с одного устройства (если он выключен) назначается другому эмулятору, или IP из последнего созданного эмулятора назначается первому и так далее. Предположим, у меня есть 4 устройства в списке; Я заметил порядок приоритетности назначения IP-адресов. Если я запускаю виртуальную коробку, открываю genymotion и запускаю, например, первое устройство, он получает 192.168.155.101; второе устройство 192.168.155.102; третье устройство 192.168.155.103; и т. д. соответственно. Но если я закрою и снова открою genymotion и виртуальную коробку, решите сначала запустить четвертое устройство, он получит IP-адрес от первого 192.168.155.101, который приносит мне проблемы с конфигурацией с помощью сценариев Appium/Selenium. Можно ли назначать определенные IP-адреса определенным устройствам в genymotion, поэтому после перезапуска виртуальной коробки и genymotion они будут одинаковыми?Эмуляторы Genymotion получают разные IP-адреса каждый раз, когда я их запускаю
ответ
С вашего поста, я не уверен, какую хост-систему вы используете. Я нахожусь в Linux (Ubuntu 16.04). Если вы находитесь на чем-то другом, детали могут отличаться от того, что ниже, но понятия одинаковы.
Genymotion опирается на хост-адаптер только VirtualBox (например, vboxnet0
и подсети 192.168.56.0
, если вы работаете типичный хост Linux) для adb
подключения к вещам, как Android Studio. При развертывании виртуальной машины Genymotion этот адаптер создается, и на нем включен сервер DHCP, встроенный в VirtualBox. Таким образом, после загрузки, вы увидите что-то подобное с несколькими виртуальными машинами стали:
$ adb devices
List of devices attached
192.168.56.101:5555 device
192.168.56.102:5555 device
Пока вы не перезагрузите VirtualBox, вы можете выключение и перезагрузка этих виртуальных машин и они получат тот же самый адрес каждый раз, когда , Однако, как вы заметили, если вы перезапустите VirtualBox, нет памяти об их предыдущем адресе, и адресация будет зависеть от порядка загрузки.
Большинство полнофункциональных DHCP-серверов (даже в дешевых домашних маршрутизаторах) позволяют регистрировать MAC для фиксированного IP-аренды. К сожалению, как это сейчас стоит, встроенный сервер VirtualBox DHCP этого не поддерживает.
Одна из идей, которые я использовал для обхода, заключалась в том, чтобы отключить DHCP-сервер VirtualBox только в сети, подключенной к виртуальной машине, запустить собственное прослушивание адаптера vboxnet0
хоста и настроить его для предоставления фиксированных IP-адресов для виртуальных машин Genymotion на основе их индивидуальных MAC-адресов. Вы можете отключить DHCP для виртуальных адаптеров VirtualBox под номером Файл-> Настройки-> Сеть-> Сети только для хостов. Фрагмент из файла конфигурации DHCP-сервера на моем хосте выглядит следующим образом:
subnet 192.168.56.0 netmask 255.255.255.0 {
range 192.168.56.101 192.168.56.200;
}
host n5_2 {
hardware ethernet 08:00:27:1F:F2:7E;
fixed-address 192.168.56.123;
}
где 192.168.56.0
относится к назначению на vboxnet0
подсети, а hardware ethernet
адрес показанный на передовой части Настройки-> Сеть -> Адаптер 1 для каждой виртуальной машины, для которой вы хотите иметь фиксированные IP-адреса.
Это в основном работает, за исключением одной отягчающей проблемы: Genymotion Launcher проверяет конфигурацию сети каждый раз, когда запускается виртуальная машина.Когда он видит, что виртуальная машина использует адаптер только для хоста с отключенным DHCP, он будет создавать новый, если он не существует (например, vboxnet1
, подсеть 192.168.57.0
) с включенным DHCP и изменить сетевую конфигурацию виртуальной машины, чтобы указать на этот адаптер. Таким образом, после загрузки, вы будете иметь это (обратите внимание на новую подсеть .57 по сравнению с ранее):
$ adb devices
List of devices attached
192.168.57.101:5555 device
192.168.57.102:5555 device
В короткий промежуток времени, я экспериментировал, единственный способ я нашел, чтобы предотвратить Genymotion Launcher от изменения сетевые настройки при загрузке должны были открыть соответствующую панель VirtualBox при запуске каждой виртуальной машины с помощью запуска Genymotion Launcher. Я предполагаю, что при открытии он блокирует файл конфигурации, делая Launcher неспособным что-либо изменить. Когда я это сделал, когда VM установил использование адаптера не DHCP и моего DHCP-сервера хоста, как указано выше, одно устройство получает фиксированный IP-адрес в соответствии с конфигурацией DHCP, в то время как другие получают адреса на основе порядка загрузки:
$ adb devices
List of devices attached
192.168.56.101:5555 device
192.168.56.123:5555 device
Если вы можете настроить сервер DHCP на вашем хосте, и не против Открывание настройки панели каждый раз, когда вы начинаете каждую виртуальную машину, я думаю, вы могли бы рассмотреть это обходной путь. Для меня это не очень практично и лучшие варианты включают в себя:
- VirtualBox добавлена поддержка для регистрации MAC в своем встроенном DHCP сервере.
- Genymotion удаляет (или опционально) проверку конфигурации во время загрузки.
- Выясните, как и почему имеет Настройки открытые блокирует конфигурацию виртуальной машины, а затем просто фиксируют ее.
Я считаю, что вы можете использовать имя устройства для дифференциации устройств. – karthick23
Я понимаю это, но я должен избегать того, чтобы всегда идти к моему сценарию и настраивать возможности UDID в соответствии с тем, какое устройство подключено прямо сейчас. – GordonFreaman
Это будет означать, что дифференцирующий фактор appium поймет – karthick23