Parametrização de Dados para Automação de Teste – Parte 4

Série de posts

Este post faz parte de uma série chamada Parametrização de Dados de Teste!
Clique neste link para acessar a série de posts, ou acesse pelo menu Série de Posts.

Pré-Condição

Leia novamente e exercite o post Parametrização de Dados para Automação de Teste – Parte 2: Data Driven com JUnit para relembrar como funciona o Data Driven com JUnit.

JUnit Params

Página: http://pragmatists.github.io/JUnitParams
GitHub: https://github.com/Pragmatists/JUnitParams

Ele é um projeto open source que adiciona um executor (runner) que torna a parametrização de dados com JUnit (versão => 4.6) mais fácil. São algumas das diferenças entre a parametrização do JUnit versus JUnit Params:

  • os parâmetros passam a ser nos métodos de teste e não na classe
  • menos código para parametrizar os testes
  • podemos ter, na mesma classe de teste, métodos parametrizados e não parametrizados
  • os parâmetros podem ser passados através de um arquivo .csv
  • você pode criar uma classe concentrando os dados parametrizados

Como parametrizar os testes usando um arquivo .csv

1. Adicionar a biblioteca do JUnit Params

Adicionar a biblioteca nas dependências do seu projeto:

Maven

<dependency>
    <groupId>pl.pragmatists</groupId>
    <artifactId>JUnitParams</artifactId>
    <version>1.1.0</version>
    <scope>test</scope>
</dependency>

Gradle

testCompile group: 'pl.pragmatists', name: 'JUnitParams', version: '1.1.0'

2. Criar o arquivo .csv (massa de dados)

Antes de escrever o código com os parâmetros é necessário que você tenha a massa de dados já criada.
Seguindo o mesmo exemplo da série de posts, temos as seguintes informações que estão no arquivo .csv separadas por vírgula ( , ):

  • Nome
  • Cidade
  • Faixa de idade
  • Resultado

Conteúdo do arquivo .csv

Jose, São Paulo, Até 18 anos, Os juros serão de 60%
Maria, Belo Horizonte, Entre 19 e 25 anos, Os juros serão de 40%
João, Florianópolis, Entre 26 e 60 anos, Os juros serão de 30%
Carla, Vitória, Maior que 60 anos, Os juros serão de 20%

Observação: neste exemplo não estou usando cabeçalhos no arquivo. No final deste post há um exemplo utilizando um cabeçalho.

3. Criar um método de teste com parâmetros

O método de teste deve ser público, sem retorno e, neste caso, ter a quantidade de parâmetros iguais as colunas do arquivo .csv

@Test
public void testeParametrizacaoJUnit(String nome, String cidade, String faixaIdade, String resultado) {
   // restante do codigo ignorado
}

O nome dos atributos não importa, mas é recomendado que ele seja facilmente lembrado e associado ao que a informação significa.

4. Adicionar anotação de teste

Para que seja necessário carregar as informações do arquivo .csv devemos usar a anotação @FileParameters. Ela recebe como parâmetro o local (caminho completo) e nome do arquivo.

@Test
@FileParameters("massa_dados/dados.csv")
public void testeParametrizacaoJUnit(String nome, String cidade, String faixaIdade, String resultado) {
   // restante do codigo ignorado
}

5. Associação dos dados

Utilizar o nome das variáveis, que são os parâmetros do método de teste, dentro do script de teste.

@Test
@FileParameters("massa_dados/dados.csv")
public void testeParametrizacaoJUnit(String nome, String cidade, String faixaIdade, String resultado) {
   driver.findElement(By.id("nome")).sendKeys(nome);
   driver.findElement(By.id("cidade")).sendKeys(cidade);
   new Select(driver.findElement(By.name("faixa"))).selectByVisibleText(faixaIdade);
   driver.findElement(By.cssSelector(".btn.btn-primary.nextBtn.btn-lg.pull-right")).click();

   assertEquals(nome, driver.findElement(By.cssSelector("span[ng-bind='nome']")).getText());
   assertEquals(cidade, driver.findElement(By.cssSelector("span[ng-bind='cidade']")).getText());
   assertEquals(faixaIdade, driver.findElement(By.cssSelector("span[ng-bind='faixaSelecionada']")).getText());
   assertEquals(resultado, driver.findElement(By.cssSelector("span[ng-bind='retorno']")).getText());
}

6. Adicionar Runner

O último passo é adicionar o runner (executor) customizado do JUnit Params. Como ele altera a forma de execução interna do JUnit ele se faz necessário para que as funcionalidades realmente funcionem durante a execução, como a leitura dos dados no arquivo que estamos fazendo.

A anotação @RunWith(JUnitParamsRunner.class) deve ir acima da linha com o nome da classe de teste.

@RunWith(JUnitParamsRunner.class)
public class ParametrizacaoJUnitCSV {
   // restante do codigo ignorado
}

Código completo

Visualize o projeto no GitHub: https://github.com/eliasnogueira/parametrizacao-script-teste

https://gist.github.com/eliasnogueira/1c7130950bff2699dd3c96de441f5930

Utilizando um cabeçalho no arquivo .csv

Se você deseja adicionar um cabeçalho ao arquivo .csv e fazer com que ele não seja utilizado como uma informação dentro do script de teste siga estes passos:

  • Adicione os cabeçalhos no arquivo .csv
  • Na anotação @FileParameters:
    • adicione o atributo value e associe com o caminho completo e nome do arquivo .csv
    • adicionar o atributo mapper e associe com a classe CsvWithHeaderMapper.class

O mapper é o tipo de mapeamento que será feito ao ler o arquivo .csv, neste caso iremos informar para a anotação que existe um header (cabeçalho) no arquivo, e este deve ser ignorado. Por isso informamos a classe CsvWithHeaderMapper.class.

Exemplo de código simplificado:

Arquivo csv
Note que agora há um cabeçalho.

nome, cidade, faixa idade, resultado
Jose, São Paulo, Até 18 anos, Os juros serão de 60%
Maria, Belo Horizonte, Entre 19 e 25 anos, Os juros serão de 40%
João, Florianópolis, Entre 26 e 60 anos, Os juros serão de 30%
Carla, Vitória, Maior que 60 anos, Os juros serão de 20%

Anotação modificada
Note que há dois parâmetros na anotação @FileParameters: value e mapper

@Test
@FileParameters(value = "massa_dados/dados.csv", mapper = CsvWithHeaderMapper.class)
public void testeParametrizacaoJUnit(String nome, String cidade, String faixaIdade, String resultado) {
   // restante do codigo ignorado
}

 

Leave a Reply

Your email address will not be published. Required fields are marked *