Automatização e testes com Selenium

PorRhau Fazul

Automatização e testes com Selenium

O desenvolvimento de aplicações web tornou-se extremamente popular nos últimos anos. Entretanto, garantir o bom funcionamento desses sistemas – considerando a grande variedade de browsers existentes – pode causar uma grande dor de cabeça (olá, Internet Explorer!). Diversas ferramentas foram criadas para auxiliar nessa tortuosa função e, entre elas, está o Selenium.

Com o Selenium é possível automatizar diferentes tipos de testes que são necessários para a manutenção do ciclo de vida de um software, tais como testes de aceitação e testes funcionais (ainda nesta redação, veremos como utilizá-lo em conjunto com testes unitários). Além disso, a ferramenta permite a automatização de praticamente qualquer tarefa repetitiva que precisamos realizar na web (exemplos por conta de sua imaginação).

Selenium automates browsers. That’s it! SeleniumHQ

Podemos utilizar o Selenium através de sua IDE ou por uma client API. De forma geral, os comandos definidos são enviados para o Selenium WebDriver que, os repassa para o browser desejado e, se necessário, retorna os resultados. Aqui, iremos utilizá-lo através da API em Python. Vamos lá!


Preparando o ambiente — setup:

  • Antes de continuar certifique-se de ter instalado em seu computador o Python 3, pipe o virtualenv ($ pip install virtualenv). Os passos abaixos são específicos para Linux (usuários Windows podem consultar a documentação aqui).

1. Inicialmente, crie e ative um ambiente virtual:

$ virtualenv -p python3 myenv
$ cd myenv
$ source bin/activate

2. Instale o Selenium com o pip:

$ pip install selenium

3. Baixe o driver do browser em que você deseja executar os testes. Nesse exemplo iremos utilizar o Firefox, outros drivers são listados na tabela abaixo.

Chrome https://sites.google.com/a/chromium.org/chromedriver/downloads
Edge https://developer.microsoft.com/en-us/microsoft-edge/tools/webdriver/
Firefox https://github.com/mozilla/geckodriver/releases
Safari https://webkit.org/blog/6900/webdriver-support-in-safari-10/

$ wget https://github.com/mozilla/geckodriver/releases/download/v0.24.0/geckodriver-v0.24.0-linux64.tar.gz && tar -xvzf geckodriver-v0.24.0-linux64.tar.gz && rm geckodriver-v0.24.0-linux64.tar.gz

4. Adicione o drivera varíavel do sistema PATH ou mova-o para a pasta bin do virtualenv:

$ mv geckodriver bin/


Partiu automatizar!

Vamos fazer um programa bem simples que irá realizar uma busca no Google, printar o link dos primeiros resultados e tirar um screenshot da página. Para tal, crie um arquivo Python qualquer (e.g. gsearch.py) e cole o seguinte trecho de código:

Para rodar o exemplo utilize o comando $ python gsearch.py

Agora é só usar e abusar da criatividade para automatizar as tarefas do seu dia a dia no browser: procure pelo preço de algum produto em múltiplas lojas simultaneamente ou verifique se saiu um novo episódio da sua série preferida – é com você! 🙂

Dica: Usuários Linux podem fazer uso do cron para agendar a execução de scripts!


Hora dos testes!

Com o Selenium é possível reproduzir todo o test suite de um sistema no ambiente real onde a aplicação web está rodando. Existem diferentes tipos de casos de teste que podem ser realizados com o apoio da ferramenta. Nesse exemplo iremos utilizar o Selenium em conjunto com o framework para testes unitários do Python, o unittest. O unittest é inspirado no famoso JUnit e está incluído como um módulo nativo na biblioteca padrão do Python.

Vamos definir dois testes, um teste para validar a abertura do menu ‘Publicações’ no site do PET-SI e outro para verificar se a busca por ‘PET Redação’ retorna algum resultado. Para tal, crie um arquivo (e.g. utest_1.py) e cole o código abaixo:

Rode o programa ($ python utest_1.py) e veja o resultado. Você deve ter percebido que uma nova instância do browser é aberta para cada um dos testes. Nem sempre esse comportamento é desejado (veja a necessidade da redundância das linhas 15 e 19). Vamos melhorar um pouco nosso código fazendo uso de algumas anotações. Para tal, crie um novo arquivo (e.g. utest_2.py):

Rode o código ($ python utest_2.py) e veja o resultado. É importante notar que os testes são executados de acordo com seus nomes (ordenação de strings padrão do Python, i.e. alfabeticamente + numericamente), por isso a adição do número do teste (01 e 02) garante a ordem de execução. É claro que isso é apenas uma alternativa, nestes casos seria mais inteligente não criar métodos independentes e sim um único caso de teste.


Por onde continuar?!

O Selenium possui diversas funcionalidades a serem exploradas, nessa redação apenas fizemos um overview geral da ferramenta. Aos interessados, seguem alguns tópicos para prosseguir os estudos na linha de testes automatizados:

Behavior Driven Development: escreva cenários de testes poderosos e elegantes com o Cucumber (para Python veja o Behave).

Selendroid: automatização de testes para aplicativos Android (nativos ou híbridos);

castro: gravação da execução dos testes (muito útil em ambientes em que é necessário apurar a razão da falha de algum caso de teste);

Robot Framework: Acceptance test-driven development (ATDD) e Robotic process automation (RPA).


Referências:

  1. SeleniumHQ. Selenium Documentation
  2. Python. unittest — Unit testing framework
  3. Read the Docs. Selenium with Python
  4. TechBeamers. Build A Selenium Python Test Suite From Scratch Using Unittest
  5. TechBeamers. Selenium Webdriver – 20 Coding Tips to Improve Quality
  6. CherCher Tech. Python Unittest Selenium
  7. DevMedia. Dominando o Selenium Web Driver na prática
  8. Medium. Top Tutorials To Learn Selenium For Beginners
  9. Medium. BDD, Cucumber and Selenium WebDriver based Test Automation Framework in Python
  10. IBM. Automated testing with Selenium and Cucumber
  11. The Tara Nights. Google Search Using Selenium And Python – Selenium Python Basics
  12. Sauce Labs. Selenium Tips: CSS Selectors
  13. Sauce Labs. Getting Started with Selenium for Automated Website Testing

Feedback e publicações anteriores:

Caso você tenha interesse em ler as edições anteriores do PET Redação ou conhecer um pouco mais sobre o trabalho desenvolvido pelo PET-SI não deixe de conferir nossa página. Antes de você partir gostaríamos também de pedir que você nos ajude, respondendo o formulário de avaliação abaixo. Esse formulário nos ajuda a moldar nossas atividades para melhor atender os nossos leitores.

Comentários não são aceitos para este Post!!!