Pular para conteúdo

Tempo estimado de leitura: 3 minutos

[RASC] Introdução pytest


Objetivos dessa aula:

  • Configurar nosso ambiente com as bibliotecas
  • Introduzir e instalar o pytest
  • O funcionamento básico do CLI do pytest
  • Escrever nossos primeiros testes

Sempre que trabalhamos com testes, uma boa forma de organizar as coisas e também manter um pouco de sanidade mental, é essencial usar um framework dedicado a isso.

Existem várias opções nesse ecossistema:

  • unittest: A biblioteca nativa do python para criar, gerenciar e executar testes
  • behave: Um framework completo de testes para criar cenários usando Gherkin
  • pytest: A biblioteca mais tradicional e completa do ecossistema
  • Outras: como Doctest, Robot, testify, Mamba, Ward, Radish, ...

Todas são extremamente funcionais e realizam as tarefas a sua maneira. Durante esse nosso período junto vou dar preferencia ao pytest. Por ser uma das bibliotecas mais sólidas e com larga adoção dentro da comunidade de python em geral.

[WIP] O pytest

[TODO]: Explicações iniciais sobre o pytest.

O pytest se define como1:
"O framework pytest facilita a escrita de testes pequenos e legíveis, e pode ser dimensionado para suportar testes funcionais complexos para aplicações e bibliotecas."

Instalação

$ Execução no terminal!
pip install pytest #(1)!
  1. Lembre de fazer isso em ambiente virtual :)

Primeiros testes com pytest

Existem várias formas de criar testes usando o pytest. A mais tradicional e simples é criando funções de teste. Existe uma regrinha básica para criar as funções:

  • Ela deve ter um nome iniciado com test_

Como por exemplo:

Código de exemplo
def test_a():
    assert True


def test_b():
    assert True

Dessa forma, dentro de um arquivo python, o pytest consegue saber quais funções são testes ou não.

Nosso primeiro teste

Nos baseando nas funções e nos testes que criamos na aula passada, podemos englobar a nossa querida função inverte_string:

aula_02.py
1
2
3
def inverte_string(texto: str):
    """Inverte qualquer string passada."""
    return texto[::-1]

E podemos montar o mesmo teste, mas dessa vez dentro da função do pytest:

aula_02.py
def test_inverte_string():
    # Arange
    entrada = 'alface'
    esperado = 'ecafla'

    # Act
    resultado = inverte_string(entrada)

    # Assert
    assert resultado == esperado

O testrunner

TODO: Explicações básicas sobre testrunners

TODO: Explicações básicas sobre o CLI do pytest

Executando o teste

pytest aula_02.py

O resultado:

============================= test session starts ==============================
platform linux -- Python 3.13.7, pytest-8.4.2, pluggy-1.6.0
rootdir: /home/dunossauro/git/pytest-do-zero
configfile: pyproject.toml
plugins: xonsh-0.20.0, hypothesis-6.148.2, typeguard-4.4.4
collected 1 item

aulas/codigos_das_aulas/aula_02.py .                                     [100%]

============================== 1 passed in 0.47s ===============================

  1. Parágrafo inicial da documentação oficial. https://docs.pytest.org/