Olá pessoal! Na próxima semana, lançaremos um novo tópico no curso
"Automation Web Testing" . Este será o assunto do material de hoje.
Este artigo discute vários métodos de teste de software, como teste de unidade, teste de integração, teste funcional, teste de aceitação etc.

Existem muitos tipos diferentes de testes que você pode aplicar para garantir que as alterações no seu código estejam com script. Nem todos os tipos de teste são idênticos, embora aqui examinemos como as principais práticas de teste diferem uma da outra.
Teste: manual ou automatizado?Primeiro, você precisa entender as diferenças entre testes manuais e automatizados. O teste manual é realizado diretamente por uma pessoa que clica nos botões do aplicativo ou interage com o software ou API com as ferramentas necessárias. Isso é bastante caro, pois exige que o testador instale o ambiente de desenvolvimento e execute os testes manualmente. Há uma probabilidade de erro devido a um fator humano, como um erro de digitação ou pular etapas em um caso de teste.
Testes automatizados, por outro lado, são executados por uma máquina que executa um script de teste que foi escrito com antecedência. Esses testes podem variar muito, dependendo da complexidade, desde testar um único método em uma classe até elaborar uma sequência de ações complexas em uma interface do usuário para garantir que funcione corretamente. Esse método é considerado mais confiável, mas seu desempenho ainda depende de quão bem o script para teste foi bem escrito.
Os testes automatizados são um componente essencial da
integração contínua e da entrega contínua, além de uma boa maneira de escalar seu processo de controle de qualidade e adicionar novas funcionalidades ao seu aplicativo. No entanto, o teste manual ainda tem seu próprio valor. Portanto, no artigo, falaremos definitivamente sobre testes exploratórios.
Diferentes tipos de testesTestes unitáriosOs testes de unidade são considerados de baixo nível, próximos ao código fonte do seu aplicativo. Eles visam testar métodos e funções individuais dentro das classes, testando os componentes e módulos usados pelo seu programa. Os testes de unidade em geral não exigem custos especiais de automação e podem funcionar extremamente rapidamente se você usar um servidor de integração contínuo.
Testes de integraçãoOs testes de integração verificam se os serviços e módulos usados pelo seu aplicativo funcionam bem juntos. Por exemplo, eles podem testar a integração com um banco de dados ou garantir que os microsserviços interajam corretamente. Esses testes são executados a um custo maior, pois precisam de muitas partes do aplicativo para trabalhar simultaneamente.
Testes de funçãoOs testes funcionais são baseados nos requisitos de negócios do aplicativo. Eles apenas verificam a saída após a ação ser executada e não verificam os estados intermediários do sistema durante a reprodução da ação.
Às vezes, existem contradições entre testes de integração e testes funcionais, como ambos solicitam vários componentes que interagem entre si. A diferença é que os testes de integração podem apenas garantir que o banco de dados esteja acessível, enquanto um teste funcional deseja obter um determinado valor do banco de dados para verificar um dos requisitos para o produto final.
Testes de ponta a pontaO teste de ponta a ponta simula o comportamento do usuário ao interagir com o software. Ele verifica a precisão com que vários usuários seguem o cenário pretendido do aplicativo e pode ser bastante simples, por exemplo, parecer carregar uma página da Web ou entrar em um site ou, em um caso mais complicado, confirmar um endereço de e-mail, pagamentos on-line etc.
Os testes de ponta a ponta são extremamente úteis, mas produzi-los é caro e pode ser difícil de automatizar. Vários testes transversais são recomendados, mas ainda se baseiam mais em testes de baixo nível (testes de unidade e integração) para poder reconhecer rapidamente grandes mudanças.
Teste de aceitaçãoTestes de aceitação são testes formais realizados para garantir que o sistema atenda às necessidades de negócios. Eles exigem que o aplicativo seja executado e executado e imitam as ações do usuário. Os testes de aceitação podem ir além, medir o desempenho do sistema e rejeitar alterações recentes se os objetivos finais de desenvolvimento não forem alcançados.
Testes de desempenhoTestes de desempenho testam o comportamento de um sistema quando ele está sob carga significativa. Esses testes não são funcionais e podem assumir várias formas para testar a confiabilidade, estabilidade e disponibilidade da plataforma. Por exemplo, ele pode monitorar o tempo de resposta ao executar um grande número de solicitações ou observar como o sistema se comporta ao interagir com big data.
Os testes de desempenho são inerentemente dispendiosos, mas podem ajudá-lo a entender quais fatores externos podem eliminar seu sistema.
Teste de fumaçaTestes de fumaça são testes básicos que testam a funcionalidade básica de um aplicativo. Eles trabalham rápido o suficiente e seu objetivo é deixar claro que as principais funções do sistema funcionam como deveriam e nada mais. Esse teste tem como objetivo identificar erros óbvios.
Os testes de fumaça podem ser úteis imediatamente após a construção de uma nova compilação para verificar se você pode executar testes mais caros ou imediatamente após a implantação, para garantir que o aplicativo funcione bem no novo ambiente.
Como automatizar testesUm testador pode executar todos os testes mencionados acima manualmente, mas isso será extremamente caro e improdutivo. Porque as pessoas têm capacidade limitada para executar um grande número de ações repetitivas enquanto ainda testam de maneira confiável. No entanto, a máquina pode reproduzir facilmente as mesmas ações e verificar, por exemplo, se a combinação de nome de usuário / senha funcionará pela centésima vez sem queixas.
Para automatizar o teste, primeiro você deve escrevê-los em algumas das linguagens de programação usando uma estrutura de teste adequada para o seu aplicativo.
PHPUnit ,
Mocha ,
RSpec são exemplos de estruturas de teste que você pode usar para PHP, Javascript e Ruby, respectivamente. Eles têm muitos
recursos para cada idioma; portanto, você deve pesquisar um pouco e consultar as comunidades de desenvolvedores para descobrir qual estrutura é melhor para você.
Se seus testes puderem ser executados usando scripts do terminal, você poderá automatizá-los usando um servidor de integração contínua no estilo Bamboo ou o servidor em nuvem Bitbucket Pipelines. Essas ferramentas monitoram seus repositórios e executam suítes de teste assim que novas alterações são inseridas no repositório principal.

Se você é novo no teste, consulte nosso guia de
integração contínua para criar seu primeiro conjunto de testes.
Teste de pesquisaQuanto mais funções e aprimoramentos forem adicionados ao seu código, maior a necessidade de teste, pois em cada estágio você precisará garantir que o sistema funcione corretamente. Além disso, será necessário toda vez que você corrigir um bug, já que não seria supérfluo garantir que ele não retorne novamente após várias versões. Automação é a chave para tornar isso possível; escrever testes mais cedo ou mais tarde fará parte da sua prática de desenvolvedor.
A questão é: é necessário realizar testes manuais nesse caso? A resposta curta é sim e deve se concentrar no que é chamado de teste exploratório, o que ajuda a identificar erros não óbvios.
Uma sessão de teste de pesquisa não deve exceder duas horas e deve ter um escopo claramente definido para ajudar os testadores a se concentrarem em uma área específica do software. Depois de informar todos os testadores sobre os limites dos testes, permanece a seu critério as ações que serão executadas para verificar como o sistema se comporta. Esses testes são caros por natureza, mas muito úteis para identificar problemas com a interface do usuário ou verificar a integridade de fluxos de trabalho complexos para os usuários. É importante realizar esses testes sempre que uma função radicalmente nova for adicionada ao aplicativo para entender como ele se comportará em condições limítrofes.
Nota de testeAntes de terminar este artigo, quero falar sobre o objetivo dos testes. Por um lado, é muito importante garantir que os usuários possam usar seu aplicativo ("Não consigo fazer login", "Não consigo salvar dados" etc.), mas, por outro lado, é igualmente importante verificar se o seu sistema Não quebra ao inserir dados incorretos ou ações inesperadas. Você precisa prever o que acontecerá quando um usuário digitar um erro, tentar salvar um formulário incompleto ou usar a API errada. Você precisa verificar se um dos usuários pode facilmente comprometer os dados, obter acesso a um recurso específico ao qual ele não deve ter acesso. Um bom conjunto de testes deve tentar quebrar seu aplicativo e ajudar a entender o limite de seus recursos.
E, finalmente, os testes também são códigos! Portanto, não os esqueça durante a revisão do código, pois pode ser o último passo antes de liberar o produto no mercado consumidor.
De acordo com a tradição estabelecida, aguardamos seus comentários e convidamos todos para
o dia de portas abertas , que será realizado em 18 de março por nosso professor, o engenheiro líder de automação de testes do Grupo-IB,
Mikhail Samoilov .