Back-End

9 fev, 2018

Testes web com Robot Framework para Python: introdução

Publicidade

Antes de começar, gostaria de agradecer ao Darling Lopes Cabral por me apresentar o Robot e por me ajudar com os primeiros passos; Mayara Ribeiro Fernandes, por me auxiliar indiretamente por meio do portal Robotizando Testes, e diretamente pelo LinkedIn. Nesta introdução, vou dar uma visão geral sobre o que é o Robot e fazer um script simples de busca no Google.

O que é o Robot Framework?

O Robot é um framework para automação de testes de aceitação (acceptance test-driven development – ATDD). É open source e independente de sistema operacional. Nativamente implementado para Python e Java, mas também roda em Jython (JVM) e IronPython (.NET).

Sua sintaxe é tabular, como o Python, e usa uma abordagem de palavras chave (keyword driven). Esta abordagem é o que mais me chamou atenção no Robot, pois permite a escrita de cenários com uma linguagem totalmente natural. É possível também usar a sintaxe Gherkin.

Estrutura do código

A estrutura do script é simples e pode ser dividida em quatro seções:

Settings

Aqui é onde você configura as bibliotecas que serão utilizadas, caminhos para arquivos auxiliares (page objects, por exemplo), contextos e hooks.

Variables

Lista das variáveis a serem usadas (de preferência com descrição) e definição dos valores de algumas dessas variáveis.

Test Cases

Esta é a seção mais importante, pois sem ela seu teste não roda. É aqui que ficam os cenários/casos de teste, com ou sem implementação.

Keywords

Aqui você pode definir palavras chave ou implementar os cenários de teste descritos acima.

Todas as seções acima são opcionais, dependendo de como seu código foi escrito, exceto a *** Test Cases ***. Aconselho a usá-las sempre para uma melhor organização do código.

Os rótulos abaixo não são obrigatórios, mas também ajudam na organização.

Documentation

Esta palavra chave precede a descrição da funcionalidade ou do cenário de teste. Fique atento, porque se a documentação é feita na seção *** Settings ***, ela não deve estar entre colchetes. Eles só são usados dentro dos *** Test Cases ***

Tags

Um rótulo mais simples para o cenário, caso queira ou precise rodar somente um ou poucos casos. É possível fazer isso chamando pelo título dos cenários na linha de comando, mas, como geralmente eles são grandes, as tags acabam sendo a melhor opção no geral.

Espaços e Variáveis

As variáveis no Robot são representadas por ${variavel}. O Robot tem a peculiaridade de ignorar um espaço entre palavras. ${nome_da_variavel} é igual a ${nome da variavel}. Elas também são case insensitive.

As divisões dos argumentos são feitas por, no mínimo, dois espaços. Por exemplo:

comando (dois espaços) argumento1 (dois espaços) argumento 2.

Reparem que o espaço no “argumento 2” é ignorado. O sinal de atribuição (=) também é opcional. Valores podem ser atribuídos, tanto:

${valor} valor

${valor} = valor

Indentação

O Python é uma linguagem indentada, ou seja, blocos de comando são separados por espaços ou tabulações, formando uma indentação visual obrigatória. Não existem símbolos de “abre” e “fecha”, o Robot herda essa formatação.

Instalação

O pré requisito é ter o Python 2.7 instalado na máquina. O Robot também suporta o Python 3, mas como Python 2 e 3 não são inteiramente compatíveis, vamos aqui usar a versão 2.7.

Após instalar o Python, verifique se o Pip, gerenciador de pacotes do Python também está instalado. Ele deve vir instalado por padrão. Digite os comandos abaixo:

$ python --version
Python 2.7.12
$ pip --version
pip 9.0.1 from .local/lib/python2.7/site-packages (python 2.7)

Se a mensagem aparecer assim, está tudo pronto para prosseguir. Baixe o arquivo requirements.txt e digite:

$ pip install -r requirements.txt

Se preferir a instalação passo a passo, siga as instruções abaixo:

$ pip install robot-framework

Espere completar a instalação e verifique se tudo ocorreu bem com o comando.

$ robot --version
Robot Framework 3.0.2 (Python 2.7.12 on linux2)

Usuários de Windows devem executar o Robot no cmd. Em outros terminais do Windows, como o Git Bash ou Cmder – geralmente – não reconhecem o comando Robot, por ser instalado como um arquivo bat.

Depois, instale a biblioteca do Selenium:

$ pip list
robotframework (3.0.2)
robotframework-ride (1.5.2.1)
robotframework-seleniumlibrary (3.0.0b3)
selenium (3.6.0)

Webdrivers

Depois das nossas linguagens instaladas, precisamos baixar os drivers que vão controlar os browsers utilizados. No site do Selenium você encontra esses drivers. Os drivers, após baixados, devem ser descompactados e colocados na pasta Python27/Scripts. Funciona também se colocar na pasta do seu projeto, mas isso não é recomendado, pois você teria que replicar o driver para cada projeto.

É possível, no Windows, colocar em qualquer outra pasta, por exemplo, C:\webdrivers (onde eu coloco) e adicionar essa pasta ao path. Tecle “window+s”, digite “path”, clique em “Editar variáveis de sistema” > “Variáveis de Ambiente” > “Path”, e adicione o caminho onde estão seus webdrivers.

No Linux, eu coloco direto na pasta /usr/local/bin/.

Agora está tudo pronto para começar!

Primeiro script

Como esse texto é uma introdução, vamos fazer uma busca simples no Google, tudo em um único arquivo. Nos próximos artigos vamos adicionar mais funcionalidades e organização.

Usaremos o BDD keyword driven, e não o Gherkin, por permitir maior liberdade na escrita dos cenários. Nosso script vai ser salvo em um arquivo de extensão .robot.

Você pode baixar a fonte no meu meu GitHub.

Os editores que indico são o Pycharm (que uso) com os plugins Intellibot e Robot Framework Support (File>Settings>Plugins>Browser Repositories) ou o Visual Studio Code, com algum plugin para o Robot, mas você pode usar outros que tenham suporte.

Settings

Vamos começar com a seção *** Settings ***. Como vamos usar biblioteca do Selenium, é preciso declarar isso nesta seção.

*** Settings ***
Library  SeleniumLibrary

Não é obrigatório, mas é bom também colocar uma descrição da suíte, antes ou depois, não importa.

*** Settings ***
Documentation  Suíte de apresentação do Robot Framework
...  com uma busca simples no Google
...  para o blog da Concrete

Library  SeleniumLibrary

Test Cases

Aqui é onde nossos cenários e casos de teste, em linguagem natural, vão ser descritos.

Esta parte não tem muito segredo, só escreva o nome do cenário como se fosse um título, alinhado à esquerda, e os passos indentados abaixo.

*** Test Cases ***
Cenário: Buscar por Robot Framework no Google e entrar na página
   [Documentation]  Cenário para uma busca sobre Robot Framework
   ...              no Google
   [Tags]  busca
   Abrir o Chrome na página <http://www.google.com.br>
   Digite "Robot Framework" no campo de busca
   Verifique se a busca retornou o resultado esperado
   Clique no primeiro link
   Verifique se a página mostrada e a correta
   Fechar o browser

Note que, diferente da seção *** Settings ***, aqui, a palavra-chave [Documentation] está entre colchetes. Note também que as reticências de continuação de linha estão indentadas.

Agora vamos a implementação do cenário.

Key Words

Nesta seção é onde você implementa todas as suas palavras chave (ou frases chave). A implementação segue o mesmo formato acima, com a palavra chave alinhada à esquerda e a implementação indentada abaixo. Vou colocar toda a implementação e depois vou explicar linha por linha.

*** Keywords ***
Abrir o ${browser} na página <${url}>
   Open Browser  ${url}  ${browser}

Digite "${palavra busca}" no campo de busca
   Set Test Variable  ${palavra busca}
   Input text      id = lst-ib  ${palavra busca}
   Click Button    Pesquisa Google

Verifique se a busca retornou o resultado esperado
   ${titulo} =  Get title
   Should Contain  ${titulo}  ${palavra busca}

Clique no primeiro link
   ${texto} =  Get text  css = #rso > div:nth-child(1) > div > div > div > div > h3
   Click link  ${texto}

Verifique se a página mostrada e a correta
   ${titulo}                   Get title
   Should Contain              ${titulo}       ${palavra busca}
   Element text should be      css = h1        ROBOT FRAMEWORK
Fechar o browser
   Close browser

Compare o que está dentro dos *** Test Cases *** com o que está nas *** Keywords ***.

Test Cases

Abrir o Chrome na página <http://www.google.com.br>

Digite “Robot Framework” no campo de busca:

Keywords

Abrir o ${browser} na página <${url}>

Digite “${palavra busca}” no campo de busca

Veja que o Robot reconhece os parâmetros a serem passados só pela posição na frase. Basta você substituir o parâmetro pelo nome que você quer dar à variável. Não precisa de nenhum comando ou caractere especial para isso.

Cada variável fica no contexto da sua palavra chave. ${browser} e ${url} só existem dentro de Abrir o ${browser} na página <${url}>; para a variável ser visível em outros contextos, é preciso especificar isso. No nosso caso, usei o Set Test Variable para torná-la visível dentro do nosso cenário. Existem também o Set Suite Variable e o Set Global Variable, mas não vamos falar deles aqui.

O Robot é “esperto” o suficiente para saber onde você quer clicar, como no Click Button Pesquisa Google. Não é preciso informar o css selector ou o xpath e o mesmo vale para o Click Link mais abaixo.

A verificação do resultado da busca é feita pelo título da página, que aparece escrito na aba do browser; ao clicar no primeiro link da busca, a verificação é feita pelo título e pela tag H1, já que esta tag deve ser única.

A suíte termina com o fechamento do browser.

Reports e logs

Após a execução dos testes, o Robot gera um Report e um Log em html bem completo. Se algum teste falhar, olhe o que aconteceu no log. Certamente ele vai ajudar.

É possível fazer algumas customizações nesses arquivos, mas não vou entrar em detalhes aqui. Aconselho que os explorem, principalmente o log.

O Robot se mostra como mais uma opção de frameworks para automação de testes, não se prende a uma sintaxe exclusiva, como o Cucumber/Gherkin, sendo uma alternativa ao Ruby.

Para saber mais

***

Este artigo foi publicado originalmente em: https://www.concrete.com.br/2018/01/30/testes-web-com-robot-framework-para-python-introducao/