Manufaturação industrial
Internet das coisas industrial | Materiais industriais | Manutenção e reparo de equipamentos | Programação industrial |
home  MfgRobots >> Manufaturação industrial >  >> Industrial programming >> python

Tutorial PyTest: Instale, Escreva e Execute Testes Python com Confiança

O que é PyTest?

PyTest é um framework de testes poderoso e open-source que permite desenvolvedores escreverem casos de teste concisos e escaláveis para projetos Python — sejam testes unitários, de integração ou end-to-end de APIs. Suporta execução paralela, injeção de fixtures, parametrização e relatórios ricos out of the box.

Por que Escolher PyTest?

Instalando PyTest

Instale o último release estável com pip:

pip install pytest

Verifique a instalação:

pytest --version

Para controle de versão específico, você pode fixar em um release, ex: pip install pytest==7.4.0.

Primeiros Passos: Um Teste Básico

Crie um diretório de projeto e adicione um arquivo de teste chamado test_sample1.py:

import pytest
def test_file1_method1():
    x = 5
    y = 6
    assert x + 1 == y, "Addition failed"
    assert x == y, "Values should match"
def test_file1_method2():
    x = 5
    y = 6
    assert x + 1 == y, "Addition failed"

Execute a suíte de testes:

pytest

Exemplo de saída:

==================== test session starts ====================
collected 2 items
test_sample1.py F. [100%]
=================================== FAILURES ===================================
...

Entendendo Assertions

Assertions do PyTest comportam-se como statements assert padrão do Python. Em falha, o teste para de executar e PyTest reporta a localização exata e mensagem:

assert "hello" == "Hai", "Mismatched greeting"

Regras de Descoberta de Testes

Executando Testes Específicos

Execute todos os testes em um diretório:

pytest

Execute um único arquivo:

pytest test_sample1.py

Filtre por substring:

pytest -k method1 -v

Execute por marker:

pytest -m set1

Execução Paralela

Instale o plugin xdist e inicie uma execução paralela com 4 workers:

pip install pytest-xdist
pytest -n 4

Usando Fixtures

Defina lógica de setup reutilizável uma vez e injete-a nos testes:

import pytest
@pytest.fixture
def supply_data():
    return [25, 35, 45]
def test_compare_with_first(supply_data):
    assert supply_data[0] == 25

Coloque código de fixture em conftest.py para compartilhar entre múltiplos módulos de teste.

Testes Parametrizados

Execute um único teste com múltiplas entradas:

import pytest
@pytest.mark.parametrize("a, b, expected", [(5, 5, 10), (3, 5, 8)])
def test_add(a, b, expected):
    assert a + b == expected

Pulando e Falhas Esperadas

Use markers para pular ou esperar falhas sem poluir resultados:

import pytest
@pytest.mark.skip(reason="Feature not yet available")
def test_future_feature():
    pass
@pytest.mark.xfail(reason="Known bug")
def test_known_issue():
    assert 1 == 2

Gerando Relatórios XML

Gere um arquivo XML compatível com JUnit para pipelines CI:

pytest -v --junitxml=result.xml

Exemplo Prático: Testando uma API Pública

Abaixo está um framework mínimo que exercita https://reqres.in/:

# conftest.py
import pytest
@pytest.fixture
def base_url():
    return "https://reqres.in/api"
# test_list_user.py
import requests, json
import pytest
@pytest.mark.parametrize("user_id, first_name", [(1, "George"), (2, "Janet")])
def test_valid_user(base_url, user_id, first_name):
    resp = requests.get(f"{base_url}/users/{user_id}")
    data = json.loads(resp.text)
    assert resp.status_code == 200
    assert data["data"]["id"] == user_id
    assert data["data"]["first_name"] == first_name
def test_invalid_user(base_url):
    resp = requests.get(f"{base_url}/users/50")
    assert resp.status_code == 404
# test_login_user.py
import requests, json
import pytest
def test_login_success(base_url):
    payload = {"email": "test@test.com", "password": "something"}
    resp = requests.post(f"{base_url}/login/", data=payload)
    data = json.loads(resp.text)
    assert resp.status_code == 200
    assert data["token"] == "QpwL5tke4Pnpja7X"
def test_login_missing_password(base_url):
    payload = {"email": "test@test.com"}
    resp = requests.post(f"{base_url}/login/", data=payload)
    data = json.loads(resp.text)
    assert resp.status_code == 400
    assert data["error"] == "Missing password"

Conclusão

Este tutorial cobriu instalação do PyTest, escrita de testes claros, uso de fixtures e markers, execução de testes em paralelo, geração de relatórios XML e construção de uma suíte simples de testes de API. Com essas bases, você pode escalar suas práticas de teste Python com confiança.

python

  1. Como Instalar WordPress no Google Cloud: Guia Passo a Passo
  2. Framework de Automação de Testes Coded UI: Guia Completo para Iniciantes
  3. Descubra Sua Chave de Segurança de Rede: Passos Fáceis para Encontrar e Proteger Seu Wi‑Fi
  4. Chamada Wi-Fi Explicada: Como Funciona e Por Que Importa
  5. Explorando o 6G: O Futuro da Conectividade Ultra-Rápida
  6. Guia do Especialista: Instalação de Niveladores de Doca para Máxima Eficiência
  7. Entendendo Testes de Descarga Parcial: Protegendo Equipamentos de Alta Tensão
  8. Prevenindo Cavitação em Bombas: Causas, Sintomas e Como Evitar
  9. Brasagem de Cobre Explicada: Técnicas e Dicas para Conexões Fortes e Confiáveis
  10. Backlog de Manutenção Explicado: Estratégias para Resolvê-lo