Olá! Meu nome é Danilo de Sousa Miguel, sou um dos instrutores dos cursos de programação aqui da Alura, e irei acompanhar vocês no curso de testes automatizados utilizando a linguagem Python.
Audiodescrição: Danilo é um homem negro, com barba de tamanho médio para longo. Ele veste uma camiseta cinza e está sentado em uma cadeira preta com detalhes vermelhos.
Olá! Meu nome é [Nome do Instrutor] e estou aqui para guiá-lo neste curso.
Audiodescrição: [Nome do Instrutor] está em um ambiente com uma parede branca iluminada por luzes rosa e azul. Ele possui graduação em Ciência da Computação e mestrado em Engenharia da Computação. Tem experiência como docente em universidades e como engenheiro de software no setor corporativo.
Este curso é destinado a quem deseja se aprofundar na elaboração de casos de teste e na preparação do ambiente para a execução desses testes. Vamos explorar desde testes básicos, como testes unitários e de integração, até a medição da complexidade do código. Também abordaremos a avaliação de quão bem o código está alinhado com boas práticas e a integração com pipelines automatizados de testes, como o GitHub Actions.
Nos próximos vídeos, aprofundaremos esses tópicos. Sejam bem-vindos!
Para começar, vamos explorar os principais conceitos de testes de software de forma geral. Primeiramente, precisamos entender o que é um teste de software. Trata-se de um processo que permite analisar e validar se a aplicação ou o sistema está funcionando conforme o esperado. Além disso, o teste possibilita identificar bugs, execuções incorretas e comportamentos inadequados. Portanto, o teste é um processo criado para verificar se a aplicação está operando conforme o esperado.
Dentro do processo de teste, nosso objetivo é detectar erros ou bugs para impedir que eles ocorram em operação. É preferível que o erro aconteça durante o desenvolvimento ou teste, em vez de ocorrer com o cliente ou quando a aplicação está em operação, o que poderia causar interrupções ou comportamentos inadequados. O teste nos proporciona uma visão abrangente de cada funcionalidade, orientando-nos a criar uma boa documentação. Ele traz confiabilidade, pois, antes de implantar a aplicação, verificamos e analisamos seu comportamento para garantir que funcione como deveria, assegurando, assim, a qualidade.
Se a aplicação funciona bem e tem um bom desempenho, ela proporciona uma boa experiência para o usuário, que é o próximo tópico. Analisamos se o usuário está tendo ou terá uma boa interação com a interface da aplicação, oferecendo facilidade e uma experiência satisfatória durante a navegação.
A redução de custo e risco também é um aspecto importante. Cada pessoa envolvida no processo de desenvolvimento do software representa um custo. Se precisarmos aumentar a operação dessa pessoa por não termos analisado ou previsto adequadamente, isso resultará em custos adicionais e aumentará o risco de não cumprirmos um prazo, por exemplo. Prazos não cumpridos elevam os custos, pois a pessoa continuará desenvolvendo a aplicação.
Nesse contexto, encontramos aplicações com diferentes domínios e cenários, o que nos leva a concluir que nem todo teste será adequado para qualquer aplicação. É importante analisar o cenário da aplicação para determinar qual teste deve ser aplicado e em que nível a aplicação se encontra. Aplicações mais básicas, com poucas funcionalidades, como uma calculadora que realiza operações aritméticas básicas (soma, subtração, multiplicação e divisão), podem ser testadas de forma unitária.
Por exemplo, ao testar apenas um módulo ou uma operação, chamamos isso de teste unitário, que verifica uma única unidade da aplicação ou software. No exemplo mencionado, estamos testando apenas a soma, considerando casos como a soma de números positivos, a soma de números negativos, e a soma de um número negativo com um número positivo, entre outros. Estamos testando alguns casos, mas focando em uma única funcionalidade ou função, conforme o código demonstra.
Um teste unitário é utilizado quando precisamos verificar se dois ou mais módulos funcionam bem juntos, especialmente quando um depende do outro. Isso caracteriza um teste de integração. No exemplo apresentado na tela, observamos a integração entre o módulo de soma e o módulo de multiplicação. Quando precisamos realizar uma soma a partir do resultado de uma multiplicação, utilizamos a função de soma e a função de multiplicação para testar se elas operam bem juntas e retornam o resultado esperado.
O teste de regressão é aplicado quando implementamos algo novo ou fazemos alguma correção em uma aplicação que já possui algumas versões lançadas e está operacional. Precisamos garantir que essa alteração não modificou o comportamento da aplicação de forma indesejada. Assim, um teste de regressão verifica se a nova funcionalidade implementada não alterou o comportamento da aplicação de maneira inadequada.
O teste de sistema, por sua vez, avalia a aplicação de ponta a ponta para verificar se ela realiza o que deveria. Já o teste de aceitação é realizado pelo usuário, que testa a aplicação para entender se ela atende a todas as suas expectativas. O teste de aceitação é, portanto, um aceite final para a aplicação.
Dentro desse contexto, existem diferentes tipos de testes, considerando as diversas dimensões das aplicações existentes. Algumas aplicações precisam suportar uma carga de requisições muito alta, enquanto outras devem responder rapidamente, ser responsivas e atender a diversos dispositivos, garantindo estabilidade e disponibilidade. Isso nos leva a diferentes tipos de testes.
Começamos pelo teste funcional, que verifica se todas as funcionalidades estão se comportando como esperado, validando fluxos, regras de negócio, entre outros aspectos. O teste de usabilidade é importante para garantir que o nível de acessibilidade da aplicação seja adequado para todos os públicos, considerando que ela pode ser acessada por pessoas diferentes o tempo todo.
O teste de aceitação do usuário está relacionado a garantir que as expectativas do usuário estão sendo atendidas. O teste de segurança assegura que a aplicação está protegida contra ameaças internas e externas. O teste de carga verifica se a aplicação se comporta bem sob um volume de acessos simultâneos esperado, conforme planejado.
O teste de estresse submete a aplicação a condições extremas para entender como ela reage diante de falhas controladas, por exemplo. Por fim, o teste de aceitação operacional garante que a aplicação está em conformidade com requisitos legais e contratuais, como a LGPD e emissão fiscal.
Esses são alguns dos principais conceitos de testes. Nos próximos vídeos, começaremos a entender qual é o cenário de aplicação que utilizaremos para este curso.
Falaremos agora sobre a aplicação que será utilizada para a construção de todos os cenários de teste durante o curso. Vamos apresentá-la utilizando a ferramenta VS Code. Acreditamos que vocês estejam familiarizados com ela, mas não é obrigatório utilizar o VS Code. Nos próximos vídeos, mostraremos como clonar o projeto e configurar o pouco que precisa ser configurado. Vocês podem utilizar a IDE de sua preferência. Estamos utilizando o VS Code para este curso, mas, novamente, não é uma regra.
A aplicação é desenvolvida em Python e utiliza um servidor Flask para sustentar a aplicação web. Ela incorpora algumas boas práticas, incluindo uma arquitetura distribuída orientada a microserviços. A aplicação possui quatro microserviços.
Antes de detalharmos os microserviços, é importante mencionar que esta aplicação simula uma hamburgueria, onde o cliente pode se cadastrar, fazer pedidos e modificar seu perfil. Existem dois níveis de usuário: o cliente e o administrador. A aplicação adota uma arquitetura orientada a microserviços.
No VS Code, podemos ver a pasta principal da aplicação, que é a "burger app".
Além disso, temos quatro microserviços divididos em quatro pastas, o que é uma boa prática adotada no projeto. Essa prática segue uma arquitetura, um design pattern (padrão de design) adequado, readequado, considerando o MVC e fazendo algumas adaptações. A separação é feita pelo modelo de dados, pela view, que é onde está a interface e onde a pessoa usuária interage mais com a aplicação, e pelo controlador, o controller, que é onde está a gerência das rotas, por exemplo.
Cada microserviço possui uma função específica: o microserviço de autenticação de usuários, o microserviço de pedidos, que é o order service, o microserviço de produto, que é o product server — para fazer um pedido, precisamos escolher um produto — e o microserviço de usuários, que gerencia os usuários. Cada aplicação, ou microserviço, possui uma série de pastas, como explicado, seguindo esse padrão de design, MVC ou MVC adequado. Temos os controllers, os models, os serviços, e também a parte estética e os templates. Além de seguir esse padrão, onde ficam as views e as interfaces, seguimos o padrão que o Flask, junto com o Jinja, estabelece para separar a interface de usuário do modelo de negócio.
Essa é a aplicação. Nos próximos vídeos, vamos entender o que precisa ser configurado, além de como podemos ter essa aplicação em nosso ambiente de trabalho.
O curso Python: testes automatizados e qualidade de código possui 240 minutos de vídeos, em um total de 79 atividades. Gostou? Conheça nossos outros cursos de Python em Programação, ou leia nossos artigos de Programação.
Matricule-se e comece a estudar com a gente hoje! Conheça outros tópicos abordados durante o curso:
Impulsione a sua carreira com os melhores cursos e faça parte da maior comunidade tech.
1 ano de Alura
Assine o PLUS e garanta:
Formações com mais de 1500 cursos atualizados e novos lançamentos semanais, em Programação, Inteligência Artificial, Front-end, UX & Design, Data Science, Mobile, DevOps e Inovação & Gestão.
A cada curso ou formação concluído, um novo certificado para turbinar seu currículo e LinkedIn.
No Discord, você participa de eventos exclusivos, pode tirar dúvidas em estudos colaborativos e ainda conta com mentorias em grupo com especialistas de diversas áreas.
Faça parte da maior comunidade Dev do país e crie conexões com mais de 120 mil pessoas no Discord.
Acesso ilimitado ao catálogo de Imersões da Alura para praticar conhecimentos em diferentes áreas.
Explore um universo de possibilidades na palma da sua mão. Baixe as aulas para assistir offline, onde e quando quiser.
Acelere o seu aprendizado com a IA da Alura e prepare-se para o mercado internacional.
1 ano de Alura
Todos os benefícios do PLUS e mais vantagens exclusivas:
Luri é nossa inteligência artificial que tira dúvidas, dá exemplos práticos, corrige exercícios e ajuda a mergulhar ainda mais durante as aulas. Você pode conversar com a Luri até 100 mensagens por semana.
Aprenda um novo idioma e expanda seus horizontes profissionais. Cursos de Inglês, Espanhol e Inglês para Devs, 100% focado em tecnologia.
Para estudantes ultra comprometidos atingirem seu objetivo mais rápido.
1 ano de Alura
Todos os benefícios do PRO e mais vantagens exclusivas:
Mensagens ilimitadas para estudar com a Luri, a IA da Alura, disponível 24hs para tirar suas dúvidas, dar exemplos práticos, corrigir exercícios e impulsionar seus estudos.
Envie imagens para a Luri e ela te ajuda a solucionar problemas, identificar erros, esclarecer gráficos, analisar design e muito mais.
Escolha os ebooks da Casa do Código, a editora da Alura, que apoiarão a sua jornada de aprendizado para sempre.
Conecte-se ao mercado com mentoria personalizada, vagas exclusivas e networking estratégico que impulsionam sua carreira tech para o próximo nível.