If you’ve been thinking to yourself: “Hmm… com que linguagem de programação devo começar a minha jornada de testes?” – Python é a sua resposta. Mas não é só para iniciantes! Em uma pesquisa recente que fiz no LinkedIn, podemos ver que mesmo entre programadores experientes, quase 35% votaram que Python é a sua linguagem de programação favorita (embora não muito à frente do Java favorito de todos os tempos, que ficou em 2º lugar com 32%).
O decorrer dos anos, Python tem de fato ganhado impulso entre os testadores e desenvolvedores e é a linguagem de programação que mais cresce por aí (como podemos ver no gráfico de Tendências de Excesso de Pilha abaixo), e todos nós sabemos o que isso significa… Popularidade = relevância!
No final deste artigo, meu objetivo é ajudá-lo a ver o quão poderosa é a linguagem de programação Python, e qual framework de testes Python é o mais adequado para as necessidades do seu projeto.
O que há de tão bom em Python para Automação de Testes?
Python é uma linguagem de programação open-source que foi lançada pela primeira vez em 1991 com a intenção de fornecer uma linguagem de programação intuitiva, simples, legível para o ser humano, elegante e menos complicada para se trabalhar. E quando se trata de testes, tais qualidades são uma necessidade, especialmente quando temos testadores manuais na equipe (que não necessariamente têm habilidades de programação) que agora estão fazendo a transição para a automação e podem aproveitar a curva de aprendizado rápido do Python para escrever scripts rapidamente.
Existem várias razões para a popularidade do Python no campo da automação de testes e porque ele é considerado uma das melhores escolhas para a automação de testes. Entre essas razões você vai encontrar: O Zen de Python (19 princípios orientadores da filosofia de design Python), amigável para iniciantes mas também poderoso para especialistas, é orientado a objetos e funcional, tem uma rica biblioteca de pacotes para testes, uma comunidade mundial forte, e muito mais! Eu recomendo ler mais sobre ele no incrível AutomationPanda Blog.
The Right Python Testing Framework For You
With the increasing use of Python, the popularity of testing frameworks based on Python is increasing as well as. A princípio, pode ser um pouco confuso saber qual deles escolher entre toda a riqueza de ferramentas que existem por aí, pois cada um tem os seus prós e contras. Dito isto, cada projeto e organização tem requisitos e limitações diferentes, portanto precisamos levá-los todos em consideração ao selecionar uma ferramenta que será a mais adequada para nós. Recomendo a leitura destes excelentes artigos sobre como escolher a ferramenta certa para você:
- Como selecionar a ferramenta certa de automação de testes
- Como selecionar a melhor ferramenta – Processo de pesquisa
- Critérios para selecionar as ferramentas certas de testes funcionais
E claro – por que existem listas de prós e contras, se não para nos ajudar a obter orientação adicional sobre nossas ferramentas favoritas, tudo em um só lugar! 😉 Então, vamos mergulhar nas 8 principais estruturas de teste Python e explorar tanto os seus benefícios quanto as suas falhas para que você possa chegar muito mais perto de selecionar a estrutura de teste Python ideal para as suas necessidades.
Pros e Cons of Top 8 Python Testing Frameworks
- Robot Framework
- Pytest
- TestProject
- PyUnit (Unittest)
- Nose2
- Behave
- Lettuce
- Testificação
- Conclusão
Robot Framework (RF)
Robot Framework (RF) é um framework de automação de testes de código aberto para testes de aceitação, desenvolvimento orientado a testes de aceitação (ATDD) e automação de processos robóticos (RPA). Seu núcleo é implementado em Python, mas também pode ser executado em Jython (implementação Java do Python) e IronPython (Python para o framework .NET). Para executá-lo você precisará instalar o Python versão 2.7.14 ou superior.
Pros
- Baseado na abordagem Keyword-driven testing (KDT), permitindo-nos assim criar facilmente casos de teste usando palavras-chave legíveis por humanos (sem experiência de codificação necessária).
- Suporta todos os sistemas operacionais (Windows, Linux ou MacOS), e todas as aplicações (aplicações web, móveis e desktop).
- Provê dados claros e fáceis de usar para relatórios HTML (incluindo capturas de tela).
- Sistema rico com muitas APIs, tornando-o um framework altamente extensível e permitindo a integração com qualquer outra ferramenta de terceiros.
- Grande suporte à comunidade e recursos online.
Cons
- Testes paralelos não são suportados fora da caixa, mas podem ser alcançados via Selenium Grid ou via Pabot (um executor paralelo para RF).
- Para o bem e para o mal forçá-lo a trabalhar de acordo com uma metodologia predefinida, a curva de aprendizagem inicial pode ser um pouco mais longa do que o habitual para os novatos
- Criar palavras-chave genéricas pode levar mais tempo do que apenas escrever testes codificados
- Não é fácil personalizar os relatórios.
- Não tem uma construção if/else real, mas há várias maneiras de obter o mesmo efeito (como pode ser explorado em sua documentação oficial)
Bottom line: Se você está procurando implementar uma abordagem de estrutura orientada por palavras-chave que permitirá que testadores manuais e analistas de negócios criem testes de automação, RF é a solução para você, fornecendo uma variedade de extensões & bibliotecas e fácil de usar. No entanto, se você está procurando desenvolver cenários complexos, como você precisará fazer algumas customizações que não estão embutidas no framework.
Pytest
Pytest é um framework de teste de código aberto que possivelmente está em um dos frameworks de teste Python mais amplamente utilizados por aí. Pytest é compatível com testes unitários, testes funcionais e testes API também. Para executá-lo você precisará da versão 3.5 ou superior do Python.
Pros
- Permite testes compactos e simples.
- É altamente extensível usando plugins, tais como: pytest-randomly, pytest-cov, pytest-django, pytest-bdd.
- Pode também adicionar o plugin html pytest ao seu projecto para imprimir relatórios HTML com uma simples opção de linha de comandos.
- Pode executar testes em paralelo usando um plugin Pytest pytest-xdist. Você pode ler mais sobre isso aqui também.
- Tem uma comunidade muito grande.
- Suporta fixações ajudando você a cobrir todas as combinações de parâmetros sem reescrever casos de testes, e são uma ótima maneira de gerenciar o contexto entre os passos.
Cons
- Compatibilidade não é fundamental para o Pytest, pois embora você possa facilmente escrever casos de teste com o Pytest, você não será capaz de usar aqueles dentro de qualquer outra estrutura de teste devido ao uso das rotinas únicas do Pytest.
TestProject
TestProject é uma estrutura de automação completa 100% GRATUITA com relatórios de nuvens. Usando TestProject, você pode facilmente desenvolver automação de testes para fins móveis, web ou genéricos com o SDK de código aberto Python. Ele suporta Python versão 3.6 ou superior, e suporta ambos os frameworks Pytest e Unittest. TestProject inclui todas as dependências necessárias como parte do único executável agente de plataforma cruzada (Você pode assistir a esta gravação de webinar para começar).
Pros
- Single Agent executável que inclui todas as bibliotecas de terceiros necessários para executar e desenvolver a automação de testes para testes móveis, web e genéricos.
- FREE Relatórios automáticos baseados em nuvem em formato HTML/PDF (incluindo capturas de tela).
- Histórico de execução acessível através da API RESTful.
- Sempre atualizado com as versões mais recentes e estáveis do driver Selenium/Appium.
- Single SDK para Web, Android, iOS e testes genéricos.
- Corrente de teste e capacidade de relatórios.
- Suporte de plataforma Cross para Mac, Windows, Linux e Docker.
- Grande comunidade e suporte: fórum, blog e chat ao vivo embutido.
>
Cons
- O agente pode executar testes um teste de cada vez, assim para testes paralelos você precisaria usar Docker Agents.
- Os relatórios estão disponíveis apenas na nuvem TestProject, para armazená-lo localmente você precisará baixar um relatório PDF ou usar a API RESTful.
- O agente precisa de conexão à internet para executar/executar testes.
Bottom line: Se você está procurando por um único framework que cubra todos os seus esforços de automação de ponta a ponta, então TestProject é definitivamente o ideal para você e um ajuste perfeito para equipes com conjuntos de habilidades mistas, de iniciantes a especialistas em automação experientes.
PyUnit (Unittest)
PyUnit (Unittest) é um framework de testes unitários para Python que foi inspirado pelo JUnit. É o framework de teste padrão do Python que sai da caixa com o pacote Python, e assim a maioria dos desenvolvedores começam seus testes com.
Pros
- Desde que ele é parte da biblioteca Python padrão, não há necessidade de instalar módulos adicionais – ele sai da caixa com o pacote Python.
- Oferece uma execução simples e flexível de casos de teste.
- Geração rápida de relatórios de teste, tanto relatórios XML quanto unittest-sml-reporting.
Cons
- A intenção do código de teste às vezes não fica clara, pois ele suporta abstração.
- É necessária uma enorme quantidade de código de caldeira.
- Desde baseado em Junit, o método de nomenclatura camelCase está em uso, em vez da convenção de nomenclatura de nomes de casos Python.
>
Nose2
Nose2 é um sucessor de Nose e é basicamente PyUnit (Unittest), mas com plugins. Nose2 estende o PyUnit além de sua funcionalidade com vários plugins que adicionam suporte para execução de testes, descoberta de testes, decoradores, fixadores, parametrização, etc.
Pros
- Easiy para começar, pois estende o framework PyUnit (Unittest) que sai da caixa com a biblioteca Python.
- Inclui um grande número de plugins embutidos que podem tornar seus testes mais rápidos e fáceis.
- Permite testes paralelos usando o plugin mp.
- Recolhe testes automaticamente, desde que você siga algumas diretrizes simples para organizar sua biblioteca e código de teste.
Cons
- Falta de documentação extensa que pode retê-lo se você está apenas começando.
- Não mantido ativamente ao contrário de outros frameworks.
Bottom line: Se você já está usando o PyUnit, você pode também dar uma chance ao Nose2 e explorar como ele estende o PyUnit.
Comportar-se
Comportar-se é um dos mais populares frameworks de teste Python BDD (desenvolvimento orientado ao comportamento). Embora não seja oficialmente parte do projeto Cucumber, ele funciona muito similar aos frameworks Cucumber.
Pros
- Permite escrever casos de teste em linguagem legível, levando a uma fácil colaboração entre equipes com características similares.
- Uma grande quantidade de documentação e suporte estão disponíveis para ajudar a começar.
- Suporta totalmente a linguagem Gherkin – assim a criação de arquivos de características não requer nenhum conhecimento técnico.
- Tem integrações de Django e Flask.
Cons
- Não há suporte para execução paralela.
- Apenas para teste de caixa preta.
Bottom line: Se sua equipe segue uma abordagem BDD, você tem conhecimento BDD anterior (como Cucumber, SpecFlow, etc) e está procurando por testes com caixas pretas – você deve definitivamente verificar Behave. Você também deve explorar outros frameworks Python BDD, como por exemplo: Pytest-bdd, Lettuce (a ser descrito abaixo), Radish e mais neste artigo Python BDD testing frameworks comparison. Se você precisa mais do que testes com caixas pretas, então você deve procurar em outro lugar.
Lettuce
Lettuce é outro framework Python BDD e é baseado no Cucumber. Requer Python 2.7.14 ou superior.
Pros
- Suporta a linguagem Gherkin, permitindo assim que mesmo membros não técnicos da equipe criem facilmente testes usando linguagem natural.
- Comportamento simples, é usado principalmente para testes de caixas pretas, mas pode ser usado para mais tipos de testes. Por exemplo, Alface pode testar vários comportamentos e interações de servidor e banco de dados.
Cons
- Precisa de alguma da riqueza de recursos de outros frameworks, então mais adequado para pequenos projetos.
- O suporte e documentação não parece ser mantido.
- Requer comunicação dedicada entre todas as partes interessadas no projeto: dev, QA e gerentes a fim de garantir o sucesso da implementação.
Bottom line: Se você tem um pequeno projeto BDD, Alface é uma ótima opção para a criação de testes de linguagem fácil e natural entre todos os membros da equipe.
Testificar
Testificar é projetado para substituir as estruturas comuns de teste unitário e nariz e tem características avançadas para o teste unitário padrão.
Pros
- Usado para testes unitários, testes de integração e testes de sistema.
- Para aqueles que estão familiarizados com Unittest, Testify é muito fácil de começar com.
- Tem plugins extensivos.
- Similiar ao Nose2, Testify permite a descoberta do teste.
- Simples syntax to fixture method.
Cons
- Falta de documentação extensiva, assim os iniciantes podem precisar investir em encontrar recursos relevantes.
- Testes paralelos não são fáceis de conseguir.
Bottom line: Se você tem experiência anterior com Unittest, será muito fácil para você ajustar seus testes existentes para trabalhar com Testify, então definitivamente vale a pena conferir.
Conclusion
Chegamos ao fim desta lista de comparação de estruturas de teste python, e agora é hora de escolher a que mais se encaixa nas suas necessidades.
Você está procurando mais de uma abordagem BDD? Você está procurando por testes unitários ou mais de testes funcionais? A sua equipe tem experiência técnica ou de codificação, ou é composta principalmente de iniciantes? Estas e muitas outras questões são as que você precisa levar em consideração ao tentar tomar uma decisão. Cada um dos quadros acima tem as suas vantagens e desvantagens, e não existem coisas boas ou más, mas sim adequadas. Adequado para as suas próprias necessidades e requisitos de produto.
Eu espero que este artigo tenha sido capaz de ajudá-lo não só a entender o quão grande é o Python para testes de automação, mas também ajudá-lo em sua jornada para testes fáceis Python!