Testes dirigidos a dados(Data-Driven-Testing) tornando seus testes automatizados Easy

O DDT é uma estratégia de testes que possui como seu ponto forte a diminuição de duplicação de código em scripts de automação quando os dados de entrada e saída sofrem variações. Isso permite que os engenheiros de automação tenham um único script de teste que possa executar testes para todos os dados de teste, os valores de entrada são lidos dos arquivos de dados e são armazenados em uma variável nos scripts de teste. O Data Driven Testing permite a criação de casos de teste positivos e negativos em um único teste. Na estrutura de automação de testes baseada em dados, os dados de entrada podem ser armazenados em fontes de dados únicas ou múltiplas, como xls, xml, csv e bancos de dados.

Data Driven Testing

Em que este tipo de abordagem pode nos ajudar?

Muitas vezes nos deparamos com vários conjunto de dados, para os quais precisamos executar os mesmos testes várias vezes, criar um teste para cada conjunto de dados se torna um processo longo e demorado. Com abordagem DDT resolve este problema pois executa o mesmo script de teste para diferentes combinações de dados de teste de entrada e gerando resultados de teste para estas combinações utilizadas.

DDT de forma Easy

EasyTest é um framework de DDT(Data Driven Testing) baseado em JUNIT, fornece uma forma intuitiva e ágil para executar testes automatizados orientado a DDT. Pode-se utilizar arquivos no formato CSV, XLS ou mesmo JSON. Mais vamos deixar de papo e meter a mão massa, neste exemplo utilizo as seguintes ferramentas:

Como forma de demonstração usaremos o site http://automationpractice.com/index.php?controller=authentication para efetuar login com diferentes usuários.

Configurando projeto de teste

Iremos criar um projeto simples de teste com java + selenium utilizando maven como gerenciador de dependências.

Após configurações iniciais temos que efetuar o download das bibliotecas utilizadas no projeto, para isso abrimos o arquivo de configuração pom.xml como mostra a imagem abaixo:

Como citado anteriormente iremos utilizar como gerenciador de dependências o Maven e para baixar as bibliotecas vamos utilizar o https://mvnrepository.com/

Nosso arquivo pom.xml com as dependências configuradas pode ser visto na imagem abaixo:

Próximo passo será a criação do arquivo usado no DDT, o mesmo deve ser criado dentro da pasta com nome resources para que o framework do EasyTest possa localizar o arquivo. Para este exemplo criei o arquivo InfUsuariosTestData.csv para o teste buscar informações de email e senha necessário para o login, segue imagem do mesmo.

OBS: A estrutura do arquivo deve seguir a lógica abaixo para exemplo que está sendo demonstrado. Em que o primeiro valor é o nome da classe de teste, seguido pelo campos que se deseja testar. Logo abaixo temos os valores que serão imputados nos campos.

Na nossa classe de teste que se chama EfetuarLoginTest, temos que importar as bibliotecas do framework do easytest, e utilizar as seguintes annotations @RunWith e @DataLoader a primeira nos informa que a classe deverá usar DDT para executar o teste e a segunda nos informa o nome do arquivo usado como fonte de valores nos testes. Como podemos ver na imagem que se segue:

Ainda na nossa classe de teste EfetuarLoginTest, agora vamos efetuar configuração do nosso método de teste testLoginUsuario será necessário efetuar especificação dos valores que serão utilizados no nosso método de teste, fazemos isso utilizando a annotation @Param para representar os valores que serão usado no interior do nosso método como variáveis, podemos visualizar esta configuração abaixo:

Resultado da execução do nosso método de login utilizando valores de acordo com arquivo InfUsuariosTestData.csv

Boas práticas utilizados em teste baseado em dados:

  • É ideal usar informações realistas durante o processo de teste orientado por dados.
  • A navegação do fluxo de teste deve ser codificada dentro do script de teste.
  • Usar dados para gerar afirmações dinâmicas.
  • Teste resultados positivos e negativos.
  • Adapte os testes funcionais baseados em dados para segurança e desempenho.

Vantagens do DDT

  1. Permite testar a aplicação com vários conjuntos de valores de dados durante o teste de regressão.
  2. Dados de teste e dados de verificação podem ser organizados em apenas um arquivo e são separados da lógica do caso de teste.
  3. Ações e funções podem ser reutilizadas em diferentes testes.
  4. Algumas ferramentas geram dados de teste automaticamente. Isso é útil quando grandes volumes de dados de teste aleatórios são necessários, o que ajuda a economizar tempo.
  5. O teste orientado por dados pode executar qualquer fase do desenvolvimento.
  6. Permite que os desenvolvedores e testadores tenham separação clara para a lógica de seus casos / scripts de teste dos dados de teste.
  7. Os mesmos casos de teste podem ser executados várias vezes, o que ajuda a reduzir o caso de teste e os scripts.
  8. Quaisquer alterações no script de teste não afetam os dados de teste

Desvantagens DDT

  1. A qualidade do teste depende das habilidades de automação da equipe de implementação.
  2. A validação de dados é uma tarefa demorada ao testar uma grande quantidade de dados.
  3. A manutenção é um grande problema, pois é necessária uma grande quantidade de codificação para o teste baseado em dados.
  4. Habilidades técnicas de alto nível são necessárias. Um testador pode ter que aprender uma nova linguagem de script.
  5. Haverá mais documentação. Principalmente relacionado à infraestrutura de testes de gerenciamento de scripts e resultados de testes.

Conclusão

O DDT(Data-Driven-Testing) se mostra uma solução viável para casos em que para cada conjunto de dados é necessário a criação de um teste individual tornando este processo longo e demorado. Permite ainda testar o sistema com múltiplos conjuntos de valores de dados durante o teste de regressão. Uma de suas principais desvantagens é a dependência das habilidades da equipe de automação.

Links de referência

Projeto: https://github.com/FernandoRLCruz/mediumDdt

  1. https://medium.com/@AyaAkl/data-driven-testing-using-csv-in-ruby-38a443ebbfb9
  2. https://github.com/EaseTech/easytest-core/wiki/Passing-JSON-Object-in-test-data
  3. https://github.com/EaseTech/easytest/wiki/EasyTest-:-Loading-Data-using-Excel
  4. https://github.com/EaseTech/easytest/wiki/EasyTest-:-An-Introduction