Preparação do Ambiente
Para começar, é necessário ter um dispositivo físico e um emulador (neste exemplo, estamos usando o "Nox Emulator"). Primeiro, verifique se os dispositivos são detectados pelo comando:
adb devices
Se o emulador não for detectado (mesmo com o Nox Emulator em execução), siga estas etapas de configuração:
- Localize o caminho de instalação do adb e encontre o arquivo adb.exe
- Copie o adb.exe para a pasta bin do diretório de instalação do Nox Emulator e renomeie-o para nox_adb.exe
- Como já existe um arquivo com o mesmo nome, faça uma cópia de segurança do arquivo nox_adb.exe existente, adicionando _1 ao nome para diferenciá-lo
- Execute novamente o comando adb devices para verificar se o emulador é detectado
Se o dispositivo físico estiver conectado, ele será detectado, mas o emulador pode não aparecer. Nesse caso, use o comando:
adb connect 127.0.0.1:62001
Agora ambos os dispositivos (físico e eumlador) devem ser detectados quando você executar adb devices.
Iniciando Múltiplos Serviços Appium
Antes de prosseguir, certifique-se de ter os módulos necessários instalados:
pip install pyyaml
pip install tomorrow
Método 1: Iniciando serviços Appium via linha de comando
Para o primiero serviço Appium (dispositivo físico):
appium -a 127.0.0.1 -p 4723 -bp 4726 -U ML5RRPCUWO
Para o segundo serviço Appium (emulador Nox):
appium -a 127.0.0.1 -p 4724 -bp 4725 -U 127.0.0.1:62001
O parâmetro -bp especifica a porta bootstrap, que deve ser diferante para cada serviço quando vários Appiums são executados simultaneamente.
Método 2: Automatizando o início dos serviços com Python
Aqui está um exemplo de código Python para iniciar e gerenciar múltiplos serviços Appium:
import os
import time
import yaml
from tomorrow import threads
def iniciar_servico_appium(porta, bootstrap, udid):
"""
Inicia um serviço Appium se não estiver em execução
"""
# Verifica se a porta já está em uso
processo = os.popen('netstat -ano | findstr "%s"' % porta)
time.sleep(2)
saida = processo.read()
if "LISTENING" in saida:
print("Serviço Appium já está ativo na porta %s" % porta)
else:
# Inicia o serviço Appium
comando = "start /b appium -a 127.0.0.1 -p %s -bp %s -U %s" % (porta, bootstrap, udid)
os.system(comando)
print("Serviço Appium iniciado na porta %s" % porta)
def parar_servicos_appium():
"""
Encerra todos os processos Appium em execução
"""
os.system("start /b taskkill /F /t /IM node.exe")
print("Todos os serviços Appium foram encerrados")
def obter_configuracao_yaml(nome_dispositivo):
"""
Lê as configurações desejadas de um arquivo YAML para um dispositivo específico
"""
caminho_yaml = os.path.join("caminho/para/seu/arquivo", "config_appium.yaml")
with open(caminho_yaml, "r", encoding="utf-8") as arquivo:
dados_yaml = yaml.load(arquivo, Loader=yaml.FullLoader)
for config in dados_yaml:
if nome_dispositivo in config["descricao"]:
# Inicia o serviço para este dispositivo
iniciar_servico_appium(
porta=config['porta'],
bootstrap=config['porta_bootstrap'],
udid=config['config_caps']['udid']
)
return config['config_caps'], config['porta']
print("Dispositivo não encontrado nas configurações")
return None, None
@threads(2)
def executar_teste_dispositivo(nome_dispositivo):
"""
Executa testes em um dispositivo específico
"""
# Obtém as configurações desejadas
caps, porta = obter_configuracao_yaml(nome_dispositivo)
if caps is None:
return
# Inicia a sessão WebDriver
driver = webdriver.Remote('http://127.0.0.1:%s/wd/hub' % porta, caps)
try:
# Realiza os testes
# Exemplo: login
pagina_login = LoginPage(driver)
pagina_login.inserir_usuario(usuario)
pagina_login.inserir_senha(senha)
pagina_login.clicar_botao_entrar()
# Aguarda a conclusão
driver.implicitly_wait(3)
time.sleep(5)
finally:
# Fecha a sessão
driver.quit()
if __name__ == "__main__":
dispositivos = ["Nox_Emulator", "Dispositivo_Fisico"]
for dispositivo in dispositivos:
executar_teste_dispositivo(dispositivo)
# Encerra todos os serviços Appium ao final
parar_servicos_appium()
Configuração com Arquivo YAML
Para gerenciar múltiplas configurações de dispositivos, use um arquivo YAML. Exemplo:
- descricao: Dispositivo_Fisico_Samsung, porta_appium_4723
porta: 4723
porta_bootstrap: 4726
config_caps:
platformName: Android
deviceName: ML5RRPCUWO
appPackage: com.seuapp.android
noReset: true
platformVersion: 10
udid: ML5RRPCUWO
appActivity: .ui.login.SplashActivity
newCommandTimeout: 120
- descricao: Emulador_Nox, porta_appium_4724
porta: 4724
porta_bootstrap: 4725
config_caps:
platformName: Android
deviceName: 127.0.0.1:62001
appPackage: com.seuapp.android
noReset: true
platformVersion: 8.0
udid: 127.0.0.1:62001
appActivity: .ui.login.SplashActivity
newCommandTimeout: 120
Este arquivo YAML permite gerenciar facilmente as configurações para múltiplos dispositivos, com descrições claras para identificação.