Como dizer ao py.test para pular certos diretórios?

91

Tentei usar a norecursedirsopção dentro do setup.cfg para dizer ao py.test para não coletar testes de certos diretórios, mas parece que ele o ignora.

[tool:pytest]
norecursedirs=lib/third

Quando eu corro py.test, vejo como ele faz testes de dentro lib/third!

Sorin
fonte
Parece que eu py.teste os pytestdois executamos testes e sendo bestas diferentes. Estranho, mas pytesté o que está falhando porque não carrega as exclusões de [pytest].
Sorin
1
pytesté do logilab. Você quer py.test.
ecatmur de
3
também tente fazernosecuredirs=lib/third/*
intelis
existe uma maneira de ignorar algumas pastas no próprio script com o código?
bicepjai,
2
acabei aqui porque eu estava curioso por que diabos meus pytest de aplicativo da web em desenvolvimento local são tão extremamente lentos ... O motivo foi algum diretório de recursos carregado com estrutura aninhada aa / dd / mm ... causando uma verdadeira merda! felizmente [pytest] norecursedirs = resourcesem pytest.inifaz um truque! 💪
andilabs

Respostas:

86

py.test --ignore=somedir trabalhou para mim

shadfc
fonte
5
E --ignorepode ser especificado várias vezes para ignorar vários diretórios
phoenix
Como pular certos testes em vez do diretório
Rajat jain,
Você pode usar a -kopção como mostra outra resposta abaixo. Consulte "Executar testes por expressões de palavra-chave" em docs.pytest.org/en/latest/… . As marcas também podem ser úteis aqui. Marque seus testes como "lentos", etc e, em seguida, use-k "not slow"
shadfc
3
Também é possível usar--ignore-glob a ignorar caminhos de arquivo de teste baseados em Unix wildcards de estilo concha. Por exemplo, --ignore-glob=**/sandbox/*irá ignorar todos os arquivos em qualquer sandboxpasta.
Jan M.
28

Se você tiver vários diretórios com pais diferentes, poderá especificar --ignoreparâmetros diferentes :

py.test --ignore=somedir --ignore=otherdir --ignore=etcdir

  • nova opção: --ignore impedirá que o caminho especificado seja coletado.
    Pode ser especificado várias vezes.
David Batista
fonte
24

Resolvi o mistério: se uma seção pytest for encontrada em um dos arquivos de configuração possíveis ( pytest.ini, tox.inie setup.cfg), o pytest não procurará por nenhum outro, portanto, certifique-se de definir as opções de py.test em um único arquivo.

Eu sugeriria usar setup.cfg.

Sorin
fonte
9
Por quê setup.cfg? A documentação atual parece recomendar os outros dois
jebob
Acho importante mencionar que, se você quiser usar um .iniarquivo, será necessário especificá-lo pytest -c pytest.ini. por algum motivo, os setup.cfgconteúdos foram coletados automaticamente.
therightstuff
17

Você pode usar

py.test -k 'not third'

que exclui todo o conteúdo do 'terceiro' diretório.

Salvatore Avanzo
fonte
11

norecursedirsDeveria trabalhar. Verifique se você possui um pytest.ini ou outros arquivos setup.cfg. Como você está invocando py.test?

ecatmur
fonte
1
Eu tenho setup.cfgcom o próprio [pytest]e norecorsedirs dentro, mas parece ser ignorado e, em vez disso, procurará todos os arquivos.
Sorin
10

No meu caso, o problema era o caractere curinga ausente. O seguinte funciona para mim:

[tool:pytest]
norecursedirs = subpath/*

considerando que simplesmente norecursedirs = subpathnão o fez.

bluenote10
fonte
O mesmo aqui. Comportamento muito estranho.
azmeuk
0

Para usar pytest.ini(o que é recomendado, a menos que você esteja usando tox, nesse caso tox.inifaria sentido), chame pytestcom pytest -c pytest.ini.

A fim de evitar que o meu amostra not_me_1.pye not_me_2.pyde ser testados ou linted, meus pytest.inié a seguinte:

[pytest]
addopts = --ignore-glob=not_me_*

[pycodestyle]
ignore = not_me_* ALL

a coisa certa
fonte