Testes Orientado a Dados com Test Template e DataDriver Library

No Robot Framework, uma das principais funcionalidades que nos permite escrever testes de forma mais eficiente é o uso de Test Templates. Neste post, vamos explorar o que são os Test Templates, como podemos aproveitá-los para melhorar nossos testes automatizados e como podemos potencializar a utilização dos templates usando a Biblioteca DataDriver Library

O que são Test Templates?

Os Test Templates no Robot Framework são uma maneira flexível de criar casos de teste de forma que fiquem orientados a dados (Data-Driven). Em vez de escrever casos de teste repetitivos para cada combinação possível de entradas e resultados esperados, usando a convenção de cenários orientados por keywords (Keyword-Driven), podemos usar um template e preencher os valores específicos durante a execução.

Com os Test Templates, podemos definir casos de teste que aceitam argumentos, permitindo que uma ou mais keywords sejam executadas várias vezes com diferentes valores. Isso nos ajuda a reduzir a duplicação de código e a manter nossos testes mais concisos e legíveis.

Sintaxe dos Test Templates

A sintaxe dos Test Templates é bastante simples. Podemos definir um template usando o prefixo [Template] dentro de um Cenário de Teste, ou na sessão *** Settings *** da Suíte de Teste.

Utilizando o Test Template dentro do Cenário de Teste:

*** Test Cases ***
Cenário 1: Usando Test Template com Argumentos Posicionais
    [Template]  Multiplicando Números 
    350  920

Cenário 2: Usando Test Template com Argumentos Nomeados
    [Template]  Multiplicando Números 
    arg1=45  arg2=2 

*** Keywords *** 
Multiplicando Números 
    [Arguments]  ${arg1} ${arg2} 
    ${result}  Evaluate  ${arg1} * ${arg2} 
    Log To Console  O resultado é: ${result}

No exemplo acima, temos dois cenários de testes, que utilizam a estrutura do template “Multiplicando Números” para multiplicar dois números diferentes. Perceba que, os argumentos da Keyword utilizada como template, podem ser definidos, tanto de forma posicional, quanto de forma nomeada.

Ao executar esse código, teremos esse resultado:

============================================================================== 
Cenário 1 : Usando Test Template com Argumentos Posicionais O resultado é: 322000 
Cenário 1 : Usando Test Template com Argumentos Posicionais | PASS | 
------------------------------------------------------------------------------ 
Cenário 2: Usando Test Template com Argumentos Nomeados O resultado é: 90 
Cenário 2: Usando Test Template com Argumentos Nomeados | PASS | 
------------------------------------------------------------------------------ ==============================================================================

Utilizando o Test Template na sessão Settings:

*** Settings ***
Test Template  Multiplicando Números 

*** Test Cases ***
Cenário 1 : Usando Test Template com Argumentos Posicionais 
    350  920 

Cenário 2: Usando Test Template com Argumentos Nomeados 
    arg1=45  arg2=2 

*** Keywords *** 
Multiplicando Números 
   [Arguments]  ${arg1}  ${arg2} 

   ${result}  Evaluate  ${arg1} * ${arg2}  
   Log To Console  O resultado é: ${result}

No exemplo acima, diferente do anterior, o template foi utilizado dentro de Settings, de forma que toda a suíte de teste utilize a mesma keyword como template. 

O resultado obtido após a execução será o mesmo do exemplo anterior.

==============================================================================
Cenário 1 : Usando Test Template com Argumentos Posicionais 
O resultado é: 322000 
Cenário 1 : Usando Test Template com Argumentos Posicionais | PASS |
------------------------------------------------------------------------------ 
Cenário 2: Usando Test Template com Argumentos Nomeados
O resultado é: 90 
Cenário 2: Usando Test Template com Argumentos Nomeados | PASS | 
------------------------------------------------------------------------------ ==============================================================================

Heurística alterada:

Como dito no início do post, ao usar o Test Template, estamos mudando a forma como as suítes se comportam. Saímos de uma estrutura orientada por keywords (Keyword-Driven) para uma estrutura orientada por dados (Data-Driven). Essa mudança se da justamente pela forma como se é construído um cenário de teste no Robot Framework, ou seja, ao invés de serem utilizados palavras chaves e argumentos no corpo do cenário de teste, usamos apenas dados para que o template decida as ações que serão tomadas.

Interessante, não é?

Antes de prosseguir com o texto, tente aplicar o que aprendeu até aqui!

É importante que você saia daqui aprendendo sobre este tema!

Fica tranquilo, eu te espero 😉

Se não conseguir, deixe nos comentários que te ajudo a prosseguir …

E se conseguiu, deixe nos comentários a sua experiência até aqui!

Essa é a forma base de utilização do Test Template, existem outros meios nos quais o Test Template pode ser utilizado, e será abordado com mais profundidade no Guia Robot Course. Mas, essa é a forma mais comum de ser utilizar o Test Template. E é com essa base adquirida que podemos utilizar sem problemas o DataDriver Library.

O que é DataDriven Library

DataDriver Library é uma biblioteca que permite a execução de casos de teste usando dados de arquivos externos. Esses arquivos podem estar em formatos comuns, como CSV (.csv) ou Excel (.xls ou xlxs). Com a DataDriver Library, podemos separar os dados de teste dos casos de teste, o que facilita a manutenção e reutilização dos dados.

Um ponto importante a mencionar, é que a DataDriver Library é uma biblioteca do tipo Listener, por esse motivo, não possui keywords para serem usadas nos testes.

Instalação:

Antes de começar a usar a DataDriver Library, precisamos instalá-la. Podemos fazer isso usando o pip, executando o seguinte comando:

pip install robotframework-datadriver

Estrutura dos Arquivos de Data Driven

Conforme descrito no Readme do projeto, o arquivo de teste deve seguir os seguintes requisitos:

  • Colunas Obrigatórias:
    • A coluna *** Test Case *** é obrigatória e precisa ser a primeira coluna do arquivo;
    • Cada coluna do arquivo representa um argumento, e esses argumentos precisam existir na keyword utilizada como Test Template. O nome de cada coluna precisa necessariamente corresponder a cada argumento desta keyword.
  • Colunas Opcionais:
    • A coluna [Tags] representa as tags que podem ser adicionadas aos cenário de teste
    • A coluna [Documentation] representa a descrição/documentação do cenário de teste

Com isso, teremos um arquivo parecido com o abaixo:


${*** Test Cases ***};${arg1};${arg2};[Tags];[Documentation]
Cenário de Teste 1;235;521;tag1;Documentação do Cenário 1 
Cenário de Teste 2;2318;2154;tag2;Documentação do Cenário 2
Cenário de Teste 3;8132;181;tag3;Documentação do Cenário 3
Cenário de Teste 4;154;399;tag4;Documentação do Cenário 4
Cenário de Teste 5;23863;1235;tag5;Documentação do Cenário 5
Cenário de Teste 6;1234;3840;tag6;Documentação do Cenário 6

O arquivo da suíte de teste, independente da quantidade de cenários existentes dentro do arquivo de dados, ficará dessa forma.

*** Settings ***
Test Template  Multiplicando Números 
Library  DataDriver  file=datadriven.csv  encoding=utf-8

*** Test Cases ***
${*** Test Cases ***}  ${arg1}  ${arg2}

*** Keywords ***
Multiplicando Números
    [Arguments]  ${arg1}  ${arg2}
    
    ${result}  Evaluate  ${arg1} * ${arg2} 
    Log To Console  O resultado é: ${result}

Uma “limitação” do DataDriver Library é a necessidade da keyword que será utilizada com template estar no arquivo da Suíte de Teste. Caso não esteja, o DataDriver irá ignorar o template, e a execução falhará.

Quando executarmos essa suíte, veremos que todos os cenários que estão presentes foram no arquivo de dados foram executados.

============================================================================== 
Datadriven Template 
============================================================================== 
Cenário de Teste 1 :: Documentação do Cenário 1 
O resultado é: 122435 
Cenário de Teste 1 :: Documentação do Cenário 1 | PASS | 
------------------------------------------------------------------------------ 
Cenário de Teste 2 :: Documentação do Cenário 2 
O resultado é: 4992972 
Cenário de Teste 2 :: Documentação do Cenário 2 | PASS | 
------------------------------------------------------------------------------ 
Cenário de Teste 3 :: Documentação do Cenário 3 
O resultado é: 1471892 
Cenário de Teste 3 :: Documentação do Cenário 3 | PASS | 
------------------------------------------------------------------------------ 
Cenário de Teste 4 :: Documentação do Cenário 4 
O resultado é: 61446 
Cenário de Teste 4 :: Documentação do Cenário 4 | PASS | 
------------------------------------------------------------------------------ 
Cenário de Teste 5 :: Documentação do Cenário 5 
O resultado é: 29470805 
Cenário de Teste 5 :: Documentação do Cenário 5 | PASS | 
------------------------------------------------------------------------------ 
Cenário de Teste 6 :: Documentação do Cenário 6 
O resultado é: 4738560 
Cenário de Teste 6 :: Documentação do Cenário 6 | PASS | 
------------------------------------------------------------------------------ 
Datadriven Template | PASS | 6 tests, 6 passed, 0 failed ==============================================================================

Antes de prosseguir com o texto, tente aplicar o que aprendeu até aqui!

É importante que você saia daqui aprendendo sobre este tema!

Fica tranquilo, eu te espero 😉

Se não conseguir, deixe nos comentários que te ajudo a prosseguir …

E se conseguiu, deixe nos comentários a sua experiência até aqui!

Bom, é isso pessoal …

Espero que esse conteúdo te ajude de alguma forma. Não esqueça de exercitar o que aprendeu. E deixe aqui nos comentários o que achou dessa técnica. E lembre-se, caso tenha alguma dificuldade ou dúvida, deixe aqui nos comentários do post que tentarei te ajudar …

GRANDE ABRAÇO PESSOAL!

VALEU!

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *