Pytest tem os decoradores skip e skipif, semelhantes ao módulo Python unittest (que usa skip
e skipIf
), que pode ser encontrado na documentação aqui .
Exemplos do link podem ser encontrados aqui:
@pytest.mark.skip(reason="no way of currently testing this")
def test_the_unknown():
...
import sys
@pytest.mark.skipif(sys.version_info < (3,3),
reason="requires python3.3")
def test_function():
...
O primeiro exemplo sempre ignora o teste, o segundo exemplo permite que você ignore condicionalmente os testes (ótimo quando os testes dependem da plataforma, versão executável ou bibliotecas opcionais.
Por exemplo, se eu quiser verificar se alguém tem a biblioteca pandas instalada para um teste.
import sys
try:
import pandas as pd
except ImportError:
pass
@pytest.mark.skipif('pandas' not in sys.modules,
reason="requires the Pandas library")
def test_pandas_function():
...
.skip
que o Mocha (Node.js) tem?it('tests something'...)
->it.skip('tests something'...)
que desabilitaria aquele teste específico. Ele também tem o oposto útil: o.only
que executará apenas aquele teste e nada mais.only
parte, você pode fazer isso por meio da linha de comando ou o que quer que você use para inicializar o executor de teste: stackoverflow.com/a/36539692/4131059 Quanto aoit
eit.skip
, acredito que a funcionalidade aqui cobre isso totalmente.O
skip
decorador faria o trabalho:@pytest.mark.skip(reason="no way of currently testing this") def test_func_one(): # ...
(o
reason
argumento é opcional, mas é sempre uma boa ideia especificar por que um teste é ignorado).Existe também
skipif()
que permite desabilitar um teste se alguma condição específica for atendida.Esses decoradores podem ser aplicados a métodos, funções ou classes.
Para pular todos os testes em um módulo , defina uma
pytestmark
variável global :# test_module.py pytestmark = pytest.mark.skipif(...)
fonte
Não tenho certeza se ele está obsoleto, mas você também pode usar a
pytest.skip
função dentro de um teste:def test_valid_counting_number(): number = random.randint(1,5) if number == 5: pytest.skip('Five is right out') assert number <= 3
fonte
Você também pode executar o teste, mesmo se suspeitar que ele falhará. Para tal cenário, https://docs.pytest.org/en/latest/skipping.html sugere o uso do decorador @ pytest.mark.xfail
@pytest.mark.xfail def test_function(): ...
Nesse caso, o Pytest ainda executará o teste e informará se ele foi aprovado ou não, mas não reclamará e quebrará a compilação.
fonte
Se você deseja pular o teste, mas não codificar um marcador, é melhor usar a expressão de palavra-chave para escapá-lo.
pytest test/test_script.py -k 'not test_func_one'
fonte
Você pode marcar um teste com os decoradores
skip
eskipif
quando quiser pular um teste nopytest
.Pulando um teste
@pytest.mark.skip(reason="no way of currently testing this") def test_func_one(): ...
A maneira mais simples de pular um teste é marcá-lo com o
skip
decorador que pode ser aprovado em um opcionalreason
.Também é possível pular imperativamente durante a execução ou configuração do teste chamando a
pytest.skip(reason)
função. Isso é útil quando não é possível avaliar a condição de ignorar durante o tempo de importação.def test_func_one(): if not valid_config(): pytest.skip("unsupported configuration")
Pular um teste com base em uma condição
@pytest.mark.skipif(sys.version_info < (3, 6), reason="requires python3.6 or higher") def test_func_one(): ...
Se você quiser pular com base em uma condição, poderá usar
skipif
. No exemplo anterior, a função de teste é ignorada quando executada em um interpretador anterior ao Python3.6.Por fim, se quiser pular um teste porque tem certeza de que ele está falhando, você também pode usar o
xfail
marcador para indicar que espera que um teste falhe.fonte