Pytest do zero!
Esse material passa por atualizações periódicas. Você pode acompanhar as notas de alterações aqui.
Olá, boas-vindas ao curso de testes com Python!
A nossa intenção neste curso é facilitar o aprendizado no desenvolvimento de testes usando Python e pytest, abordando seu ecossistema completo de bibliotecas, para que você consiga escrever testes eficazes e robustos de forma prática.
Sobre o curso
Este curso foi desenvolvido para ajudar desenvolvedores de todos os níveis a integrar testes automatizados no seu fluxo de trabalho de desenvolvimento. A ideia é proporcionar uma experiência prática, com exemplos claros e exercícios que reforçam o aprendizado. Vamos explorar o pytest do zero, cobrindo desde os conceitos iniciais até técnicas avançadas para otimizar sua estratégia de testes.
Ao decorrer do curso vamos criar um pequeno projeto, nada grandioso, ou realmente útil, mas que nos ajude a entender como testar determinadas condições específicas que acabam ocorrendo no dia-a-dia de quem escreve código e precisa efetivamente testar algumas funcionalidades. Como um banco de dados usando SQLAlchemy, uma pequena API web, uma pequena página web, testes de CLI, etc. Um projeto simples, que consiga contemplar os desafios mais corriqueiros do nosso dia a dia.
O que você vai aprender?
Neste curso, vamos explorar o pytest e suas principais funcionalidades. Você aprenderá a:
- Escrever testes automatizados: Como estruturar e escrever testes eficazes.
- Entender a teoria de testes: Conceitos como testes de unidade, testes de integração, conceitos de xUnit.
- Trabalhar com fixtures: como configurar e gerenciar recursos e dependências entre testes.
- Testar código assíncrono: como testar código que utiliza async/await.
- Randomização de testes: bibliotecas como o Faker e Factory-boy para gerar dados aleatórios e tornar seus testes mais robustos e variados.
- Dublês de teste (Test Doubles): descubra como utilizar mocks, stubs e spies para isolar comportamentos no seu código e simular interações externas, facilitando testes mais controlados.
- Cobertura de testes*: saiba como verificar a cobertura de código dos seus testes, identificando áreas do código que precisam ser mais bem testadas.
- Testar cenários comuns: bancos de dados, CLIs, APIs, Páginas web, Containers, etc.
- Integração contínua: como rodar testes a cada push no repositório.
E muito mais coisas como parametrização de testes, testes paralelos, etc.
Esse curso é gratuíto?
TODO: Adicionar material da campanha de financiamento coletivo para tonar esse material gratuito, mas financiado coletivamente.
Como ele vai funcionar?
Abertura da campanha
2026-Q1Chamada para o financiamento coletivo do material. Nesse mesmo dia a primeira aula será liberada em formato de texto. Uma campanha tudo ou nada. Caso atinja a meta o curso acontece, caso contrário, o material não será produzido.
Encerramento da campanha - Tudo ou Nada!
2026-Q2Caso a campanha atinja a meta inicial, a segunda aula do material, em texto, será lançada nesse dia! Um grupo no telegram será criado com as pessoas que apoiarem o projeto nessa fase inicial, onde discutiremos os rumos do curso e também teremos atualizações periódicas sobre o andamento do material. Caso a meta não seja atingida, o material parará de ser desenvolvido.
Ciclo de aulas
A cada 45 diasA ideia principal é que a cada 45 dias uma nova aula seja liberada como pública. Com seus exercícios e quiz desenvolvidos. Durante esse processo bugs também serão corrigidos e o acompanhamento do trabalho poderá ser visto nos Changelogs. Todo o material desenvolvido durante o período entre uma aula e outra já está disponível, mas de forma instável. A cada fim de ciclo será gerada uma minor do material.
Tempo de montar as aulas
Após o material de texto ser finalizadoApós a primeira versão do curso em texto pronta, será o tempo de preparar os slides para todas as aulas, procurar bugs e marcar as datas das apresentações síncronas do curso.
Curso em formato de lives
Após as aulas serem montadasQuando o material de texto estiver finalizado, faremos aulas síncronas no formato de live no meu canal do youtube. Um bom momento para aprender junto, tirar dúvidas e tudo mais...
Entrega do projeto final
Sessenta dias após o fim das livesTodas as pessoas que entregarem o projeto final receberão o certificado simbólico de participação do curso.
Realmente precisamos de mais um material de pytest?
Eu sei que temos materiais sensacionais sobre pytest entre livros de até mesmos páginas como essa:
- Pytest Quick Start Guide: Livro incrível escrito pelo Bruno core maintainer do pytest. (em inglês)
- Python Testing with pytest: Um livro usado como referência sobre pytest, por Brian Okken
- Pytest with Eric: Material incrível na web sobre pytest (em inglês)
- The digital Cat: Blog com postagens maravilhoso sobre pytest. (em inglês)
Mas infelizmente não temos um material base em português e com licenças permissivas. Claro, eu também gostaria de dar minha contribuição para o tema, como uma forma de contribuição a esse ecossistema poderoso e aberto que o pytest nos proporciona.
Pré-requisitos
Para aproveitar ao máximo este curso, é recomendado que você já tenha algum conhecimento prévio em python. Se pudesse listar o que considero importante para não se perder, os tópicos em python importantes são:
- O funcionamento de funções: como criar e usar (referência);
- O funcionamento das estruturas de dados: como listas, dicionários, etc.;
- Uma pitada sobre objetos: saber o que são métodos e atributos (referência);
As referências servem como base caso você ainda não tenha estudado esses assuntos.
TODO: Adicionar aqui outros assuntos como web, html, CLI, bancos de dados. Nada disso será abordado de forma "oficial" no material, mas está presente em forma de testes.
Caso esteja iniciando seus estudos em Python!
Caso você ainda não se sinta uma pessoa preparada, ou caiu aqui sem saber exatamente o que esperar. Temos um pequeno curso introdutório. Destinado aos primeiros passos com python.
Também temos uma live focada em dicas para iniciar os estudos em python
Ou então a leitura do livro Pense em python
Aulas
Isso é um esboço inicial do que iremos tratar e tanto títulos quando a ordem das aulas podem ser alteradas.
- Introdução ao mundo dos testes
- Introdução ao pytest
- Parametrização e subtests
- Um pequeno projeto
- ...
🦖 Quem vai ministrar essas aulas?
Prazer! Eu me chamo Eduardo. As pessoas me conhecem na internet como @dunossauro.

Sou um programador Python muito apaixonado e curioso. Toco um projeto pessoal semanal chamado Live de Python há pouco mais de 8 anos. Onde conversamos sobre tudo e mais um pouco quando o assunto é Python.
Adoro escrever (estamos aqui, não é mesmo?), programar coisas malucas, fazer música com programação e papear sobre software livre, computabilidade e IndieWeb.
Tô sempre pela web e nos eventos de Python, a gente pode se conectar nessa imensa rede mundial de computadores. Meus links!.
Outros materiais em texto produzidos por mim:
Revisão e contribuições
Esse material contou com a revisão e contribuições inestimáveis de pessoas incríveis:
Muito obrigado!
🧰 Ferramentas necessárias para acompanhar o curso
- Um editor de texto ou IDE de sua escolha. Estou usando o GNU/Emacs enquanto escrevo as aulas;
- Um terminal. Todos os exemplos do curso são executados e explicados no terminal. Você pode usar o que se sentir mais a vontade e for compatível com seu sistema operacional;
- Ter o interpretador Python instalado em uma versão oficialmente suportada, atualmente 3.10+.
📖 Licença
Todo esse curso foi escrito e produzido por Eduardo Mendes (@dunossauro).
Todo esse material é gratuito e está sob licença Creative Commons BY-NC-SA. O que significa que:
- Você pode copiar e reproduzir esse material em qualquer meio e em qualquer formato;
- Você pode adaptar esse material e construir outros materiais usando esse material.
Pontos de atenção:
- Você precisa dar os devidos créditos a esse material onde for usar ou adaptar;
- Você não pode usar para fins comerciais. Como vender ou usar para obter vantagens comerciais;
- Todo o material derivado desse material deve ser redistribuído com a licença CC BY-NC-SA.
🔧 Ferramentas de apoio
Todo o conteúdo deste material foi produzido intencionalmente com ferramentas FLOSS.
📝 Para a página
Toda essa página foi escrita em markdown usando as seguintes bibliotecas:
- MkDocs: Para geração das páginas estáticas usando Markdown
- Mkdocs-material: Tema para o MkDocs
- Pymdown-extensions: Extensões para MkDocs, como emojis, diagramas e blocos estilizados de código
- Markdown-exec: Utilitários para executar snippets dinâmicos de código e adicionar o resultado em markdown
- mkdocs-towncrier: Extensão para exibir os changelogs do towncrier no mkdocs
- Mkdocs-quiz: Para os questionários sobre as aulas
- mkdocs-macros: Para criação de macros e variações de textos usando variáveis
- mike: Para manter múltiplas versões do mkdocs online
Ferramentas que não fazem parte do ecossistema markdown, mas se misturam:
- jinja2: Para escrever blocos reutilizáveis
- Mermaid.js: Construção dos diagramas
📝 Notas sobre os aulas em andamento
Durante a leitura você pode encontrar diversas tags envolvidas em [tag], essas tags mostram o avanço das aulas durante o período de escrita.
[RASC]- Rascunhos[TODO]- Coisas que ainda precisam ser feitas[WIP]- Em desenvolvimento[???]- Coisas faltantes / WHAAAAAAAAT!![AA]- Aguardando assets[PA]- Parei Aqui[OK]- Revisado, para evitar releituras
- Revisões
[REV]- Revisão pessoal[RPA]- Revisão parada aqui![RTEC]- Revisão técnica[RGRAM]- Revisão gramatical
[MAN]- Tópico em manutenção[NF]- Não feito
flowchart LR
NF --> WIP
NF --> RASC
RASC --> WIP
WIP --> REV
REV --> RTEC
REV --> WIP
RTEC --> WIP
RTEC --> RGRAM
RGRAM --> WIP
A evolução dos tópicos é sempre não linear, elas podem voltar para [WIP] a qualquer momento antes de estar finalizada.