Selenium é uma ótima ferramenta para automatizar as ações do seu navegador. No entanto, a sua aplicação não se limita ao uso local. Imagine que precisamos executar nossos testes em diversas máquinas ao mesmo tempo, ou em diferentes configurações de sistema, em diferentes navegadores e assim por diante. Podemos pensar em alguma forma de automatizar o lançamento síncrono de instâncias locais, mas o Selenium tem uma boa solução pronta para este caso – Grade de selênio.
Grade de selênio passo a passo
1) Transferir Servidor autônomo de selênio. No momento em que este artigo foi escrito, a versão atual é 3.141, que é a que usaremos. Este arquivo pode ser utilizado tanto pelo cliente quanto pelo servidor, portanto deve ser colocado em cada uma das máquinas que você planeja utilizar.
2) Execute o hub Selenium, usando a seguinte linha de comando:
java -jar /somePathToJARfile/Selenium-server-standalone-3.141.59.jar -role hub -port 3333
Dicas:
a) Aqui a chave “-port” é opcional. Se você não usá-lo, a porta padrão 4444 será usada, porém, se estiver ocupada, você poderá usar qualquer uma livre.
b) Quando utilizado em um projeto real, será necessário fazer o lançamento mais de uma vez. Isso significa que faz sentido simplificar e automatizar imediatamente esta etapa. A maneira mais fácil é usar o arquivo bat/sh.
Na inicialização, você verá o seguinte:
Após iniciar o hub, você recebe instruções sobre como registrar e conectar os nós (clientes-escravos).
http://localhost:3333 (você pode usar seu endereço IP em vez de “localhost” e a porta em vez de 3333) em seu navegador para verificar o status de nosso sistema distribuído.
Como você pode ver na imagem acima, o Grid Console funciona no endereço especificado. Está vazio até não registrarmos um escravo.
3) Agora precisamos iniciar os nós do Selenium. Suponha que planejemos executar 2 instâncias, uma na máquina local (onde o hub está localizado) e outra na máquina remota. Para fazer isso, use o seguinte comando em cada máquina:
java -Dwebdriver.chrome.driver=F:chromedriver.exe -jar /somePathToJARfile/Selenium-server-standalone-3.141.59.jar -role node -hub http://172.17.10.182:3333/grid/register -browser browserName =”cromo”,versão=QUALQUER,plataforma=WINDOWS,maxInstances=5
Dicas:
a) Aqui o parâmetro -Dwebdriver.chrome.driver=F:chromedriver.exe indica que esta instância do cliente usará um driver chrome, e o arquivo chromedriver.exe está na raiz do disco F.
b) O parâmetro -role node significa que executamos a instância como um nó.
c) -hub http://172.17.10.182:3333/glivrar/registrar parâmetro é o caminho onde nosso hub está localizado (pode ser reconhecido no console do hub).
d) -browser browserName=”chrome”,version=ANY,platform=WINDOWS,maxInstances=5 Esta parte define as opções de inicialização do navegador.
e) podemos adicionar a chave -port, mas se você não especificá-la, uma porta livre será selecionada automaticamente.
Agora vamos ter certeza de que todos os nós foram registrados com sucesso em nosso hub:
4) Agora precisamos criar um projeto Java com testes Selenium que iremos executar. Por esta:
a) No IDE você usa criar um novo projeto java Maven com configurações padrão (estou usando IntelliJ IDEA)
b) Em seguida, adicione a classe java ParallelTest.java
c) Importe os testes Selenium necessários e as bibliotecas TestNG:
importar org.openqa.Selenium.Platform;
importar org.openqa.Selenium.remote.DesiredCapabilities;
importar org.openqa.Selenium.remote.RemoteWebDriver;
importar org.testng.annotations.BeforeTest;
importar org.testng.annotations.Parameters;
importar org.testng.annotations.Test;
importar java.net.MalformedURLException;
importar java.net.URL;
Mais tarde discutiremos por que precisamos de anotações. Após importar as bibliotecas, você deve permitir que o IDE adicione todas as dependências necessárias.
d) Adicione o próximo código à nossa classe ParallelTest{}:
driver RemoteWebDriver público;
@AntesTeste
public void beforeTest() {}
@Teste
teste de experiência pública void(){}
Aqui:
@BeforeTest e @Test são anotações TestNG.
beforeTest(), experitest() são métodos.
RemoteWebDriver é uma classe importada.
e) Precisamos executar o teste no estado atual para garantir que tudo funcione corretamente e para obter o arquivo de configuração padrão do TestNG:
No console IDE veremos os resultados da execução. Clique na linha de informações nesta seção para obter mais informações.
Depois disso, o caminho para o arquivo de configuração recém-criado aparecerá na parte superior da tela:
Vá para este diretório e transfira este arquivo para a pasta do nosso projeto para modificação e uso posterior.
f) Agora vamos editar nosso arquivo de configuração. Para fazer isso, altere primeiro os parâmetros de construção:
Nesta tela, definimos o parâmetro “Tipo de teste” como “Suite” e atribuímos o caminho do arquivo de configuração xml ao parâmetro “Suite”. O arquivo de configuração está localizado dentro da pasta do projeto.
g) Vamos dar uma olhada no arquivo de configuração TestNG e editá-lo para o nosso caso. O arquivo de configuração padrão criado pelo IDE é o seguinte:
Aqui:
a) – Esta tag define um conjunto de nossos testes.
b) – Esta tag define parâmetros de teste.
c) e – Essas tags definem quais classes serão utilizadas neste teste.
Dentro da tag podemos especificar quais métodos desta classe usaremos. Para simplificar, usaremos uma classe – Experiest:
Poderíamos terminar a configuração nisso, mas como planejamos executar diversas instâncias do nosso teste, precisamos de parametrização. Vamos adicionar as tags relevantes ao código:
Aqui:
a) Os nomes das tags “plataforma” e “browserName” são parâmetros que especificamos quando iniciamos as instâncias do nó da grade Selenium.
b) A “URL remota” é um parâmetro que determina qual instância do cliente Selenium Grid será utilizada por determinada máquina. Lembro que você pode ver este parâmetro no console do hub:
Dica aqui:
Observe que a tag é especificada no arquivo XML no início desta descrição de teste, antes de especificar as classes. Isso é necessário para que a parametrização seja relevante para todas as classes utilizadas neste teste.
Segue-se do exemplo do arquivo de configuração mostrado acima que precisamos fazer tantas cópias da seção dentro da tag de teste no arquivo de configuração quanto o número de instâncias que planejamos usar. No nosso caso, existem 2 instâncias, então atualize o arquivo de configuração conforme mostrado abaixo:
Por favor, note que:
a) Também alteramos o nome dos testes – Eles devem ser únicos.
b) Adicionamos paralelo=”testes” à tag. – Esta é uma parte muito importante. Este parâmetro controla a simultaneidade. Neste caso, indica que os testes desta suíte devem ser realizados em paralelo. Mais informações você pode obter com o oficial Documentação do TestNG (pág. 5.11). Este é o motivo da utilização do TestNG no nosso caso porque, na realidade, o sistema distribuído pressupõe a execução de testes simultaneamente, ou seja, em paralelo.
h) Agora que tudo está pronto, podemos prosseguir com a escrita do teste em si. Vamos retornar ao arquivo ParallelTest.java. Para começar, adicionaremos a capacidade de usar parâmetros para cada instância de teste. Para fazer isso, adicione a anotação @Parameter e atualize o método beforeTest da seguinte maneira:
i) Agora adicione a capacidade a este método – indicamos o navegador utilizado, a plataforma, a versão. Esses parâmetros devem coincidir com o que determinamos para cada nó Selenium específico:
j) Crie uma nova instância do driver, levando em consideração capacidade e remoteurl. Preste atenção também na necessidade de adicionar uma exceção a este método para usar o remoteurl; se você usar o IDEA IDE, será solicitado a fazê-lo.
Dica:
Se você teme que seu teste não seja iniciado simultaneamente em todas as máquinas, devido a atrasos na rede, você pode adicionar Thread.sleep(3000); no final do método beforeTest. Isso aliviará um pouco o possível problema.
Vamos ao teste principal:
k) Adicione navegação ao site experitest.com e verifique o título da página e, em seguida, envie o resultado do nosso teste para o console:
5) Está tudo pronto, agora podemos fazer nosso teste. Para fazer isso, você deve primeiro construir o projeto e depois executá-lo:
É isso! Agora você sabe como pode executar testes Selenium no modo distribuído. Vimos um exemplo simples de dois escravos e duas instâncias, usando qualquer versão do Chrome, mas seguindo estas instruções você pode experimentar as configurações de suas máquinas escravas para obter melhor cobertura e resultados de teste. Este projeto você pode baixar em no seguinte link.
Dicas finais:
a) Se você usa navegadores, sistemas diferentes ou tem algo mais que deva ser levado em consideração, então no método beforeTest você deve defini-los usando um conjunto consistente de operandos “if”, como mostrado abaixo:
b) Para automatizar o processo, você pode usar scripts sh/bat, ou até mesmo uma ferramenta de CI, por exemplo, Jenkins, para executar automaticamente projetos maven.
E para mais informações sobre os testes Selenium e Selenium você pode sempre dar uma olhada no Experitest's Integração do Selenium Webdriver.
Maxim Babilo – Equipe de controle de qualidade do Engenheiro de Desempenho ISSArt
[/ Vc_column_text] [/ vc_column] [/ vc_row]
Você está pronto para escalar sua empresa?
Explore
O que há de novo no mundo da Digital.ai
O preconceito na máquina: preconceitos de dados de treinamento e seu impacto no código gerado pelos assistentes de código de IA
Explore preconceitos nos dados de treinamento de IA que afetam a geração de código e aprenda estratégias para mitigá-los para um desenvolvimento de IA e inovação de software mais justos.
Como o futurismo está moldando os testes em nuvem: uma previsão
Desbloqueie o futuro dos testes em nuvem: abordagens estratégicas para aproveitar a tecnologia de maneira eficaz, aprimorar a qualidade do software e garantir o sucesso dos negócios.
A busca pela qualidade: testes contínuos de software automatizados para a indústria automotiva
Desde a criação de testes com tecnologia de IA até sistemas de autocorreção, descubra como continuous testing e desenvolvimentos inovadores estão moldando o futuro das tecnologias conectadas, safee veículos confiáveis.