pytest vs unittest: qual test runner de Python para o CI?
O unittest vem com o Python; o pytest adiciona testes mais concisos, fixtures poderosas e um rico ecossistema de plugins - e ainda executa seus testes unittest.
O unittest é o framework nativo do Python no estilo xUnit. O pytest é um framework de terceiros com sintaxe de assert simples, fixtures, parametrização e um grande ecossistema de plugins, e consegue descobrir e executar testes no estilo unittest.
| unittest | pytest | |
|---|---|---|
| Vem com o Python | Sim | Não (pip install) |
| Estilo de teste | Classes + self.assert* | assert simples + funções |
| Fixtures | setUp/tearDown | Sistema de fixtures poderoso |
| Parametrização | Manual / subTest | Embutida (@parametrize) |
| Plugins / paralelismo | Limitado | Rico (pytest-xdist, etc.) |
No CI
O pytest normalmente vence em experiência de desenvolvimento e ergonomia no CI: testes concisos, parametrização, fixtures e plugins como pytest-xdist para execução paralela e pytest-cov para coverage. Ele também consegue executar testes unittest existentes, então a adoção é incremental. O unittest não precisa de instalação e é uma boa escolha quando você quer zero dependências extras ou está restrito à biblioteca padrão.
Testes instáveis
Use pytest-xdist para paralelizar suítes grandes e planeje reexecutar falhas transitórias (por exemplo, pytest-rerunfailures) para que testes instáveis não quebrem o build. Runners gerenciados mais rápidos encurtam longas matrizes de testes Python.
O veredito
Querendo testes concisos, fixtures, parametrização e plugins paralelos: pytest (ele executa seus testes unittest também). Precisando de zero dependências extras ou apenas da stdlib: unittest. A maioria das equipes recorre ao pytest no CI.