Skip to content

Reutilização Pytest

1. Versionamento

Versão Data Descrição Autor(es)
1.0 27/03/2022 Abertura do documento Thiago
1.1 27/03/2022 Adição da introdução Thiago
1.2 27/03/2022 Adição dos hot spots Thiago
1.3 27/03/2022 Adição dos plugins Thiago
1.4 27/03/2022 Revisão por pares Brenno e Carlos

2. Introdução

O back-end da Caderneta de Campo digital utilizou da técnica de Desenvolvimento Orientado a Testes (TDD) no seu desenvolvimento para aumentar a qualidade do produto, aumentando a integridade e facilitando a refatoração. Para isso, o Pytest foi o framework escolhido para fornecer ferramentas de testes.

O framework Pytest permite, de forma fácil, escrever testes pequenos e legíveis e escalar facilmente para suportar aplicações complexas [1]. Além disso, há uma interface simples para realizar testes de integração com o Django Rest Framework, fornecendo classes, decorators e métodos de execução e filtragem de testes reutilizáveis.

3. Hot Spots

  • Functions: fornece funções prontas para diversas comparações.
  • Marks: fornece decoradores para estender os testes, como parametrize que permite rodar o teste com diversos parâmetros, e o xfail que permite ao teste falhar dado uma certa condição.
  • Fixtures: fornece meios para preparar o ambiente antes de testar, provendo objetos pré-prontos para os testes.

4. Plugins

  • freezegun: permite testar em diferentes tempos, fornecendo o mock do datetime.
  • ipdb: permite o debug do código.
  • model-bakery: fornece ferramentas para criar instâncias de classe.
  • parameterized: fornece decoradores para testar um mesmo teste com diversos parâmetros diferentes.
  • pytest-cov: fornece integração do pytest com o coverage para registrar a cobertura do código.
  • pytest-django: fornece integração do pytest com o django.
  • pytest-subtests: fornece a possibilidade de realizar subtestes, ou seja, testes dentro de outros testes.

5. Referências

[1] pytest: helps you write better programs. Disponível em: https://docs.pytest.org/en/7.1.x/. Acesso em: 27 mar. 2022.