A automação é uma parte crítica do desenvolvimento e teste de software moderno. Economiza tempo, reduz erros manuais e garante consistência entre processos. A estrutura Pytest é uma das ferramentas mais populares e poderosas para automatizar tarefas em Python, principalmente em testes. É leve, fácil de usar e oferece vários plug-ins e recursos integrados para simplificar o processo de automação.
Neste artigo, exploraremos as melhores maneiras de automatizar tarefas usando a estrutura Pytest. Examinaremos três exemplos práticos, demonstrando como o Pytest pode automatizar diferentes tipos de tarefas de forma eficaz.
Por que Pytest?
Antes de mergulhar nos exemplos, vamos discutir por que o Pytest é uma ótima opção para automação de tarefas:
Simplicidade: Pytest possui uma sintaxe simples e concisa, facilitando a escrita e a leitura de casos de teste.
Extensibilidade: Com uma ampla variedade de plug-ins e ganchos, o Pytest pode ser estendido para oferecer suporte a diferentes necessidades de teste.
Fixtures: Pytest fornece fixtures, que são um recurso poderoso para configurar pré-condições ou estados para testes, melhorando a reutilização.
Integração: Pytest integra-se bem com outras ferramentas, incluindo plataformas CI/CD, permitindo automação ponta a ponta.
Exemplo 1: Automatizando testes de API com Pytest
As APIs são a espinha dorsal de muitos aplicativos e garantir sua confiabilidade é fundamental. O Pytest, junto com a biblioteca de solicitações, facilita a automatização dos testes de API.
Etapa 1: instalar as bibliotecas necessárias
Primeiro, certifique-se de ter o Pytest e a biblioteca de solicitações instaladas:
solicitações de pip install pytest
Etapa 2: escrever o script de teste
Vamos automatizar uma solicitação GET simples para uma API pública como JSONPlaceholder, uma API REST online falsa para teste.
`solicitações de importação
importar pytest
BASE_URL = "https://jsonplaceholder.typicode.com"
@pytest.fixture
def api_client():
# Este fixture fornece um objeto de sessão para fazer solicitações de API
sessão = solicitações.Sessão()
sessão de rendimento
sessão.close()
def test_get_posts(api_client):
# Envie uma solicitação GET para buscar postagens
resposta = api_client.get(f"{BASE_URL}/postagens")
# Asserções
afirmar resposta.status_code == 200
afirmar len(response.json()) > 0, "Nenhuma postagem encontrada"`
Explicação:
Fixture (api_client): Este fixture configura uma sessão reutilizável para fazer solicitações HTTP, garantindo que não precisamos criar uma nova sessão a cada vez.
Função de teste (test_get_posts): Esta função envia uma solicitação GET para o endpoint /posts e verifica se:
O código de status é 200, indicando sucesso.
A resposta contém pelo menos uma postagem.
Etapa 3: execute o teste
Para executar o teste, execute o seguinte comando:
festa
Copiar código
pytest -v test_api.py
Por que isso funciona
O teste é conciso e reutilizável, aproveitando os acessórios do Pytest para lidar com a configuração e desmontagem.
A saída do Pytest mostra quais testes foram aprovados ou reprovados, facilitando o rastreamento da confiabilidade da API ao longo do tempo.
Exemplo 2: Automatizando testes de UI da Web com Pytest e Selenium
O teste de UI da Web garante que o frontend de um aplicativo se comporte conforme o esperado. Pytest pode ser combinado com Selenium para automatizar essas tarefas de forma eficiente.
Etapa 1: instalar as bibliotecas necessárias
Instale Pytest, Selenium e WebDriver Manager:
pip install pytest selenium webdriver-manager
Etapa 2: escrever o script de teste
Veja como você pode automatizar um teste simples de IU da web que verifica uma função de pesquisa no Google:
`importar pytest
do webdriver de importação de selênio
de selenium.webdriver.common.by importar por
de selenium.webdriver.common.keys importar chaves
de webdriver_manager.chrome importar ChromeDriverManager
@pytest.fixture
def navegador():
# Configure o Chrome WebDriver
driver = webdriver.Chrome(ChromeDriverManager().install())
fator de rendimento
motorista.quit()
def test_google_search(navegador):
# Navegue até o Google
navegador.get("https://www.google.com")`{% endraw %}
# Find the search box and enter a query search_box = browser.find_element(By.NAME, "q") search_box.send_keys("Pytest Automation") search_box.send_keys(Keys.RETURN) # Assert that results are shown results = browser.find_elements(By.CSS_SELECTOR, "div.g") assert len(results) > 0, "No search results found"
Explicação:
Fixture (navegador): Este fixture configura uma instância do Chrome WebDriver usando webdriver-manager e garante que ela seja fechada corretamente após cada teste.
Função de teste (test_google_search): Esta função:
Abre a página inicial do Google.
Pesquisa por “Automação Pytest”.
Afirma que a pesquisa retorna pelo menos um resultado.
Etapa 3: execute o teste
Execute o teste com:
{% bruto %}pytest -v test_ui.py
Por que isso funciona
O dispositivo Pytest gerencia a instância do navegador, tornando a configuração e desmontagem do teste limpa e eficiente.
Usando Selenium, o script interage com a página da web como um usuário real, garantindo que a UI funcione conforme o esperado.
Exemplo 3: Automatizando a validação de dados com Pytest e Pandas
A validação de dados é crucial em processos de engenharia de dados, análise e ETL. Pytest pode automatizar tarefas de validação de dados usando a biblioteca pandas.
Etapa 1: instalar as bibliotecas necessárias
Certifique-se de que Pytest e Pandas estejam instalados:
pip instalar pandas pytest
Etapa 2: escrever o script de teste
Vamos automatizar uma tarefa onde validamos se um conjunto de dados atende a certas condições (por exemplo, nenhum valor nulo, tipos de dados corretos, etc.).
`importar pytest
importar pandas como pd
@pytest.fixture
def dados_amostra():
# Crie um DataFrame de amostra
dados = {
"nome": ["Alice", "Bob", "Charlie", "David"],
"idade": [25, 30, 35, 40],
"e-mail": ["[email protected]", "[email protected]", Nenhum, "[email protected]"]
}
df = pd.DataFrame(dados)
retornar df
def test_data_not_null(dados_de_amostra):
# Verifique se há algum valor nulo no DataFrame
assert sample_data.isnull().sum().sum() == 0, "Os dados contêm valores nulos"
def test_age_column_type(dados_de_amostra):
# Verifique se a coluna 'idade' é do tipo inteiro
assert sample_data['age'].dtype == 'int64', "A coluna Age não é do tipo inteiro"`
Explicação:
Fixture (sample_data): Este fixture configura um DataFrame de amostra, simulando um conjunto de dados que pode ser reutilizado em vários testes.
Função de teste (test_data_not_null): Este teste verifica se há algum valor nulo no DataFrame e falha se algum for encontrado.
Função de teste (test_age_column_type): Este teste verifica se a coluna age é do tipo inteiro, garantindo a consistência dos dados.
Etapa 3: execute o teste
Execute o teste com:
pytest -v test_data.py
Por que isso funciona
A flexibilidade do Pytest permite testes centrados em dados, garantindo que os conjuntos de dados atendam aos critérios esperados.
O acessório facilita a configuração e modificação de dados de teste sem duplicar o código.
Práticas recomendadas para automatizar tarefas com Pytest
Use luminárias para configuração e desmontagem: As luminárias ajudam a gerenciar a configuração e a desmontagem com eficiência, tornando seus testes modulares e reutilizáveis.
Aproveite os plug-ins: Pytest tem uma variedade de plug-ins (por exemplo, pytest-html para relatórios HTML, pytest-xdist para execução paralela) para aprimorar seus esforços de automação.
Parametrize testes: use @pytest.mark.parametrize para testar vários conjuntos de dados ou entradas, reduzindo a duplicação de código.
Integre com pipelines de CI/CD: integre testes Pytest com ferramentas de CI/CD como Jenkins ou GitHub Actions para testes contínuos.
Conclusão
Pytest é uma ferramenta poderosa para automatizar uma variedade de tarefas, desde testes de API e UI da web até validação de dados. Sua simplicidade, combinada com flexibilidade e amplo suporte a plug-ins, torna-o uma excelente escolha tanto para desenvolvedores quanto para engenheiros de controle de qualidade. Ao aproveitar os recursos do Pytest, como fixtures, parametrização e integrações com pipelines de CI/CD, você pode construir estruturas de automação robustas, sustentáveis e escaláveis.
Se você deseja automatizar seu fluxo de trabalho ou aprimorar seu processo de teste, o Pytest é um excelente ponto de partida. Bons testes!
Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.
Copyright© 2022 湘ICP备2022001581号-3