O que é Automação de Testes? Uma introdução simples e clara
Existem dois tipos de testes no mundo do software – manual e automatizado. Alguns tipos de testes manuais, tais como testes de descoberta e testes de usabilidade, são inestimáveis. Você pode fazer outros tipos de testes – como testes de regressão e testes funcionais – normalmente, mas é uma prática bastante esbanjadora para os humanos continuar fazendo a mesma coisa repetidas vezes. São estes tipos de testes repetitivos que se prestam a testes de automação.
Test automation is the practice of running tests automatically, managing test data, and using results to improve software quality. É principalmente uma medida de garantia de qualidade, mas suas atividades envolvem o comprometimento de toda a equipe de produção de software. De analistas de negócios a desenvolvedores e engenheiros DevOps, tirar o máximo proveito da automação de testes leva a inclusão de todos.
Este post lhe dará uma compreensão de alto nível do que é a automação de testes. Existem todos os tipos de testes, mas nem todos devem ser automatizados; portanto, vamos começar com critérios gerais para automação de testes.
Critérios para Automação
Um teste precisa atender a alguns critérios para ser automatizado – de outra forma, ele pode acabar custando mais do que economiza. Afinal, um dos principais objetivos da automação é economizar tempo, esforço e dinheiro. Aqui estão alguns critérios gerais para a automação de testes. Estes são pontos de partida, lembre-se. Seus critérios podem diferir dependendo de suas circunstâncias.
Repetitivo
O teste deve ser repetível. Não há sentido em automatizar um teste que só pode ser executado uma vez. Um teste repetível tem os seguintes três passos:
- Configurar o teste, incluindo dados e ambiente.
- Executar a função e medir o resultado.
- Limpar os dados e ambiente.
No primeiro passo, queremos ser capazes de colocar o ambiente em um estado consistente. Em outras palavras, se tivermos um teste para tentar adicionar um usuário existente, precisamos ter certeza de que o usuário existe antes de realizar o teste. Uma vez que o teste esteja completo, o ambiente deve retornar ao estado base.
Determinante
Quando uma função é determinante, isso significa que o resultado é o mesmo toda vez que ela é executada com a mesma entrada. O mesmo é verdade para testes que podem ser automatizados. Por exemplo, digamos que queremos testar uma função de adição. Sabemos que 1 + 1 = 2 e que 394,19 + 5,81 = 400,00. A adição é uma função determinante.
Software, por outro lado, pode usar um número tão alto de entradas variáveis que é difícil ter o mesmo resultado ao longo do tempo. Algumas variáveis podem até ser aleatórias, o que pode tornar difícil determinar o resultado específico. O projeto do software pode compensar isso permitindo entradas de teste através de um arnês de teste.
Outras características de uma aplicação podem ser aditivas; por exemplo, a criação de um novo usuário adicionaria ao número de usuários. Pelo menos quando adicionamos um usuário, sabemos que o número de usuários deve crescer apenas por um. No entanto, a execução de testes em paralelo pode causar resultados inesperados. O isolamento pode evitar este tipo de falsos positivos.
Nãoopinionados
Não se pode automatizar assuntos de opinião. Aqui é onde os testes de usabilidade, testes beta, e assim por diante realmente brilham. O feedback do usuário é importante, mas não pode ser automatizado… desculpe!
Tipos de testes automatizados
Existem tantos tipos de testes, muitos dos quais podem ser automatizados, que realmente não podemos colocá-los todos em um único post. Mas aqui estão os suficientes para lhe dar um bom ponto de partida.
Análise de código
Existem na verdade muitos tipos diferentes de ferramentas de análise de código, incluindo análise estática e análise dinâmica. Alguns destes testes procuram falhas de segurança, outros verificam o estilo e a forma. Estes testes são executados quando um desenvolvedor faz uma verificação em código. Além de configurar regras e manter as ferramentas atualizadas, não há muito a fazer com estes testes automatizados.
Unit Tests
É possível também automatizar uma suíte de testes unitários. Os testes unitários são projetados para testar uma única função, ou unidade, de operação em isolamento. Eles normalmente são executados em um servidor de construção. Estes testes não dependem de bancos de dados, APIs externas, ou armazenamento de arquivos. Eles precisam ser rápidos e são projetados para testar apenas o código, não as dependências externas.
Testes de integração
Testes de integração são um tipo diferente de animal quando se trata de automação. Como um teste de integração – às vezes chamado de testes de ponta a ponta – precisa interagir com dependências externas, eles são mais complicados de serem configurados. Muitas vezes, é melhor criar recursos externos falsos, especialmente quando se trata de recursos fora do seu controle.
Se você, por exemplo, tem um aplicativo de logística que depende de um serviço web de um fornecedor, seu teste pode falhar inesperadamente se o serviço do fornecedor estiver em baixo. Isso significa que o seu aplicativo está quebrado? Talvez, mas você deve ter controle suficiente sobre todo o ambiente de teste para criar cada cenário explicitamente. Nunca dependa de um fator externo para determinar o resultado do seu cenário de teste.
Testes de aceitação automatizados
Existem hoje várias práticas que utilizam testes de aceitação automatizados (AAT), mas basicamente estão fazendo a mesma coisa. O desenvolvimento controlado pelo comportamento (BDD) e o desenvolvimento controlado por testes automatizados de aceitação (AATDD) são semelhantes. Ambos seguem a mesma prática de criar o teste de aceitação antes que a funcionalidade seja desenvolvida.
No final, o teste de aceitação automatizado é executado para determinar se a funcionalidade entrega o que foi acordado. Portanto, é fundamental para os desenvolvedores, o negócio e a GQ escreverem esses testes juntos. Eles servem como testes de regressão no futuro, e eles garantem que a funcionalidade se mantém até o que é esperado.
Testes de Regressão
Sem AATs em vigor, você tem que escrever testes de regressão após o fato. Enquanto ambos são formas de testes funcionais, como são escritos, quando são escritos, e por quem são escritos são muito diferentes. Como os AATs, eles podem ser conduzidos através de uma API por código ou por uma IU. Existem ferramentas para escrever estes testes usando uma GUI.
Testes de Performance
Muitos tipos de testes de performance existem, mas todos eles testam algum aspecto da performance de uma aplicação. Será que ele aguentará uma pressão extrema? Estamos testando o sistema para altas temperaturas? É um tempo de resposta simples sob carga que estamos procurando? Que tal escalabilidade?
Por vezes estes testes requerem a emulação de um grande número de usuários. Neste caso, é importante ter um ambiente que seja capaz de realizar tal proeza. Recursos em nuvem estão disponíveis para ajudar neste tipo de testes, mas também é possível usar recursos no local.
Testes de fumo
O que é um teste de fumo? É um teste básico que normalmente é realizado após uma janela de implantação ou manutenção. O objectivo de um teste de fumo é assegurar que todos os serviços e dependências estão a funcionar. Um teste de fumaça não é para ser um teste funcional completo. Ele pode ser executado como parte de uma implementação automatizada ou acionado através de um passo manual.
Processo Geral de Automação de Testes
Agora vimos critérios para automação e tipos suficientes de testes automatizados para ter uma idéia das coisas, aqui está o processo geral de automação de testes. Há três passos principais para a automação de testes: preparar, agir, relatar resultados.
Preparar
Primeiro, precisamos preparar o estado, os dados do teste e o ambiente onde os testes acontecem. Como vimos, a maioria dos testes requer que o ambiente esteja em um certo estado antes que uma ação ocorra. Em um cenário típico, isto requer alguma configuração. Ou os dados terão de ser manipulados ou a aplicação terá de ser colocada num estado específico ou ambos!
Take Action
Após o estado e/ou ambiente estar no estado predefinido, é hora de agir! O driver de teste irá executar o teste, seja através da chamada da API ou interface de usuário de uma aplicação ou executando o código diretamente. O driver de teste é responsável por “conduzir” os testes, mas o sistema de gerenciamento de testes assume a responsabilidade de coordenar tudo, incluindo reportar resultados.
Reportar resultados
Um sistema de automação de testes irá registrar e reportar os resultados. Estes resultados podem vir em vários formatos diferentes e podem até criar tickets de problemas ou bugs em um sistema de rastreamento de trabalho. O resultado básico, no entanto, é um passe ou falha. Normalmente, há um indicador verde ou vermelho para cada cenário de teste para indicar aprovação ou reprovação.
Por vezes, os testes são inconclusivos ou não são executados por algum motivo. Quando isto acontece, o sistema de automação terá um log completo da saída para que os desenvolvedores possam revisar. Este log ajuda-os a rastrear o problema. Idealmente, eles serão capazes de reproduzir o cenário uma vez que eles tenham colocado uma correção.
The Bottom Line
The bottom line is this: test automation helps improve quality with speed. Mas nem todos os testes podem ser automatizados. Há definitivamente um investimento envolvido. Com tantos tipos de testes, é importante que você obtenha a mistura certa. A pirâmide de testes é uma regra simples para ajudar a fazer isto bem. Ela diz que a maioria dos testes devem ser testes unitários, seguidos por testes de serviço, depois testes de IU.
A test automation system coordinates testing concerns, incluindo o gerenciamento de dados de teste, testes em execução e rastreamento de resultados. A automação de testes é o próximo passo para as equipes que estão ficando sobrecarregadas com a carga de repetir os mesmos testes manuais que devem ser automatizados.
Author bio: Este post foi escrito por Phil Vuollet. Phil usa software para automatizar processos para melhorar a eficiência e a repetibilidade. Ele escreve sobre tópicos relevantes à tecnologia e negócios, ocasionalmente dá palestras sobre os mesmos tópicos, e é um homem de família que gosta de jogar futebol e jogos de tabuleiro com seus filhos.