Skip to content
Latchkey

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.

unittestpytest
Vem com o PythonSimNão (pip install)
Estilo de testeClasses + self.assert*assert simples + funções
FixturessetUp/tearDownSistema de fixtures poderoso
ParametrizaçãoManual / subTestEmbutida (@parametrize)
Plugins / paralelismoLimitadoRico (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.

Guias relacionados