Rodando testes em paralelo com Appium, Selenium Grid e Java: Parte 1
Estive estudando um pouco sobre como rodar testes em paralelo e a minha maior curiosidade era como poderia executar testes em paralelo para diferentes tipos de plataforma. Para isso tive que entender e estudar o funcionamento de algumas ferramentas antes. Nesta série quero compartilhar minha experiência com vocês de como eu fiz isso, e fazer um tutorial um pouco mais mastigado pra vocês, para que não tenham tantos problemas quanto eu e veja que testar em paralelo não é um bicho de sete cabeças!
Ferramentas necessárias para configuração inicial dos testes.
- Configuração Android Home
- Configuração Java Home
- Eclipse ou IDE de preferencia
- Java 8
- Appium
- Node
- Android Emulator
- Maven
- Xcode
Let’s Go!
Configuração Inicial
Vamos primeiramente criar o nosso projeto de testes, abra sua IDE, e crie um projeto maven (no meu caso vou usar o eclipse):
File > New > Maven > Maven Project (Eclipse)
Escolha maven-archetype-quickstart 1.1, para gerar um projeto mais simples possível.
Perfeito, agora vamos no nosso arquivo pom.xml e vamos adicionar todas as dependências e plugins que vamos usar no nosso projeto.
- Java-Client Appium
- Surefire Maven Plugin
Lembrando que no nosso projeto já vem setado o Junit, vamos somente alterar a versão dele para 4.7.
- Junit 4
Depois da configuração do pom.xml, vamos criar um diretório que vamos colocar os nossos apps.
File > New > Folder > [folder-name]
Vou colocar aqui também os arquivos dos app para download:
Faço o download deles e jogue na pasta que vc acabou de criar!
Criação das Classes
Ufa, depois de todas essas configurações podemos começar a criar nossas classes, a idéia seria utilizar o padrão Page Object, nos nossos testes. Vamos também testar aplicações semelhantes onde a aplicação IOS tem as mesmas funcionalidades que a aplicação android! Dentro da nossa estrutura src/test/java/meu-pacote-de-tests já existe uma classe de teste que foi criado junto com nossa estrutura. (pode excluir ela!)
Vamos criar um outro pacote que ficará todas as nossas screens.
File > New > Package > [package-name]
E dentro deste pacote vamos criar a classe screen que vai contemplar todos elementos da tela da nossa aplicação.
Esse é o início da nossa classe e a parte mais importante rsrsrs, o PageFactory responsável por buscar todos os meus elementos em tela, para isso precisamos de uma instância do nosso driver e do contexto da page. Criamos o PageFactory no meu construtor porque sempre criar uma instância da minha CalculatorScreen ele vai buscar todos os seu elementos com o driver específico que recebermos no construtor. Agora vamos pegar os elementos da tela, não vou mostrar como fazer isso aqui e nem como configurar os emuladores mais posso ajudar com os links, existem diversas ferramentas para isso!
Cofigurando Emuladores
Inspetores de tela
E depois de pegar os elementos podemos atualizar nossa page, e agora temos esse resultado :
Reparem nas annotations, dentro delas especificamos qual será o nosso locator, temos os locators separados tanto do android como o do ios em apenas uma variável! Visivelmente não temos aquele findElement(By())… Consegue visualizar a abstração da nossa page? Agora vamos finalizar nossa classe criando os métodos com as ações da page.
Beleza! Vamos criar as duas classes de teste para android e ios, dentro do pacote src/test/java/meu-pacote-de-tests
- Classe de Teste Android
- Classe de Teste IOS
Os casos de teste são bem simples, estão apenas verificando se a aplicação está realizando corretamente o fluxo da soma. Especifiquei também o capabilities de cada dispositivo, e vou deixar um link aqui explicando o que faz cada capability.
Show, agora já podemos rodar os testes. Inicie seu emulador android (não precisa iniciar o simulador ios) e inicie o appium como de costume com o comando :
$ appium
Prontinho agora só rodar os testes, para isso vamos aproveitar e usar o maven! Dentro do diretório AndroidAndIosTesteParaleloComAppium/ execute o comando :
$ mvn clean test
Tcharannn!!
Foi executado um teste de cada vez com a mesma page, próximo post vou focar no selenium grid e como vamos fazer nossa estrutura atual rodar em paralelo no selenium grid.
Obrigado ❤