Última atualização em 18 de agosto de 2019 — Continuous Testing Expert
Continuous Testing

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:

cmdline

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.

consolá

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

cmdline

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:

nós cmdline

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

teste paralelo

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.

cmdline cmdline

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:

arquivo de configuração

No console IDE veremos os resultados da execução. Clique na linha de informações nesta seção para obter mais informações.

consolá

Depois disso, o caminho para o arquivo de configuração recém-criado aparecerá na parte superior da tela:

configuração

Vá para este diretório e transfira este arquivo para a pasta do nosso projeto para modificação e uso posterior.

anuário

f) Agora vamos editar nosso arquivo de configuração. Para fazer isso, altere primeiro os parâmetros de construção:

parâmetros

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.

parâmetros

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:

 








 
 

 

[html_tags_show][/html_tags_show] [html_tags_show][/html_tags_show] [html_tags_show][/html_tags_show] [html_tags_show] [/html_tags_show] [html_tags_show] [/html_tags_show] [html_tags_show] [/html_tags_show] [html_tags_show] [/html_tags_show] [html_tags_show] [/html_tags_show] [html_tags_show] [/html_tags_show]

 

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:

 

[html_tags_show][/html_tags_show] [html_tags_show][/html_tags_show] [html_tags_show][/html_tags_show] [html_tags_show] [/html_tags_show] [html_tags_show] [/html_tags_show] [html_tags_show] [/html_tags_show] [html_tags_show] [/html_tags_show] [html_tags_show] [/html_tags_show] [html_tags_show] [/html_tags_show] [html_tags_show] [/html_tags_show] [html_tags_show] [/html_tags_show] [html_tags_show] [/html_tags_show] [html_tags_show] [/html_tags_show]

 

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:

[html_tags_show][/html_tags_show] [html_tags_show][/html_tags_show] [html_tags_show][/html_tags_show] [html_tags_show] [/html_tags_show] [html_tags_show] [/html_tags_show] [html_tags_show] [/html_tags_show] [html_tags_show] [/html_tags_show] [html_tags_show] [/html_tags_show] [html_tags_show] [/html_tags_show] [html_tags_show] [/html_tags_show] [html_tags_show] [/html_tags_show] [html_tags_show] [/html_tags_show] [html_tags_show] [/html_tags_show] [html_tags_show] [/html_tags_show] [html_tags_show] [/html_tags_show] [html_tags_show] [/html_tags_show]

 

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:

 

[html_tags_show][/html_tags_show] [html_tags_show][/html_tags_show] [html_tags_show][/html_tags_show] [html_tags_show] [/html_tags_show] [html_tags_show] [/html_tags_show] [html_tags_show] [/html_tags_show] [html_tags_show] [/html_tags_show] [html_tags_show] [/html_tags_show] [html_tags_show] [/html_tags_show] [html_tags_show] [/html_tags_show] [html_tags_show] [/html_tags_show] [html_tags_show] [/html_tags_show] [html_tags_show] [/html_tags_show] [html_tags_show] [/html_tags_show] [html_tags_show] [/html_tags_show] [html_tags_show] [/html_tags_show] [html_tags_show] [/html_tags_show] [html_tags_show] [/html_tags_show] [html_tags_show] [/html_tags_show] [html_tags_show] [/html_tags_show] [html_tags_show] [/html_tags_show] [html_tags_show] [/html_tags_show] [html_tags_show] [/html_tags_show] [html_tags_show] [/html_tags_show] [html_tags_show] [/html_tags_show] [html_tags_show] [/html_tags_show] [html_tags_show] [/html_tags_show] [html_tags_show] [/html_tags_show]

 

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:

 

[html_tags_show]@BeforeTest[/html_tags_show] [html_tags_show]@Parameters({“plataforma”, “browserName”, “remoteurl”})[/html_tags_show] [html_tags_show]public void beforeTest(String plataforma, String browserName, String remoteurl) {[/html_tags_show] [html_tags_show]}[/html_tags_show]

 

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:

 

[html_tags_show]@BeforeTest[/html_tags_show] [html_tags_show]@Parameters({“plataforma”, “browserName”, “remoteurl”})[/html_tags_show] [html_tags_show]public void beforeTest(String plataforma, String browserName, String remoteurl) {[/html_tags_show] [html_tags_show]Recursos DesiredCapabilities = DesiredCapabilities.chrome();[/html_tags_show] [html_tags_show]capabilities.setBrowserName(“cromo”); capacidades.setPlatform(Platform.extractFromSysProperty(“plataforma”));[/html_tags_show] [html_tags_show]capabilities.setVersion(“ANY”);[/html_tags_show] [html_tags_show]}[/html_tags_show]

 

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.

 

[html_tags_show]@BeforeTest[/html_tags_show] [html_tags_show]@Parameters({“plataforma”, “browserName”, “remoteurl”})[/html_tags_show] [html_tags_show]public void beforeTest(String platform, String browserName, String remoteurl) lança MalformedURLException {[/html_tags_show] [html_tags_show]Recursos DesiredCapabilities = DesiredCapabilities.chrome();[/html_tags_show] [html_tags_show]capabilities.setBrowserName(“cromo”);[/html_tags_show] [html_tags_show]capabilities.setPlatform(Platform.extractFromSysProperty(“plataforma”));[/html_tags_show] [html_tags_show]capabilities.setVersion(“ANY”);[/html_tags_show] [html_tags_show]driver = novo RemoteWebDriver(novo URL(remoteurl), recursos);[/html_tags_show] [html_tags_show]}[/html_tags_show]

 

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:

 

[html_tags_show]@Teste[/html_tags_show] [html_tags_show]teste de experiência pública nula(){[/html_tags_show] [html_tags_show] String esperadoTitle = “experitest.com”;[/html_tags_show] [html_tags_show] String actualTitle = “”;[/html_tags_show] [html_tags_show] driver.get(“https://experitest.com/free-trial/”);[/html_tags_show] [html_tags_show] actualTitle = driver.getTitle();[/html_tags_show] [html_tags_show] if (actualTitle.contentEquals(expectedTitle)){[/html_tags_show] [html_tags_show] System.out.println(“TESTE PASSADO!”);[/html_tags_show] [html_tags_show] }else {[/html_tags_show] [html_tags_show] System.out.println(“FALHA NO TESTE”);[/html_tags_show] [html_tags_show] }[/html_tags_show] [html_tags_show] driver.quit();[/html_tags_show] [html_tags_show]}[/html_tags_show]

 

5) Está tudo pronto, agora podemos fazer nosso teste. Para fazer isso, você deve primeiro construir o projeto e depois executá-lo:

consolá consolá

É 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:

 

[html_tags_show]if (browserName.equals(“firefox”)){[/html_tags_show] Capacidade [html_tags_show] = novo DesiredCapabilities().firefox[/html_tags_show] [html_tags_show] }[/html_tags_show] [html_tags_show]if (browserName.equals(“chrome”)){[/html_tags_show] Capacidade [html_tags_show] = novo DesiredCapabilities().firefox[/html_tags_show] [html_tags_show] }[/html_tags_show]

 

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

22 de abril de 2024

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.

Saber Mais​
22 de fevereiro de 2024

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.

Saber Mais​
4 de dezembro de 2023

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.

Saber Mais​