Como faço para configurar o PyCharm para executar testes py.test?

162

Quero começar a escrever testes de unidade para o meu código Python, e a estrutura py.test parece uma aposta melhor do que a mais compacta do Python . Então, adicionei um diretório "tests" ao meu projeto e adicionei test_sample.py . Agora eu quero configurar o PyCharm para executar todos os testes no meu diretório "tests".

O PyCharm supostamente suporta py.test em seu executor de testes. Você deveria ser capaz de criar uma configuração de execução / depuração para executar seus testes, e o PyCharm supostamente possui uma caixa de diálogo "criar configuração" especificamente para o py.test . Mas essa é a extensão completa da documentação deles sobre o assunto, e não consigo encontrar essa suposta caixa de diálogo em nenhum lugar.

Se eu botão direito do mouse o diretório na janela ferramenta do Projeto, estou suposto ver um "Criar <nome>" item de menu, mas o único item de menu começando com "Criar" é "Criar Configuração de execução". Ok, talvez a documentação esteja incorreta e "Criar configuração de execução" parece promissor. Infelizmente, os dois únicos itens em seu submenu são "Unittests in C: \ mypath ..." e "Doctests in C: \ mypath ...", nenhum dos quais se aplica - não estou usando o unittest nem o doctest. Não há item de menu para py.test.

Se eu abrir meu test_sample.py e clicar com o botão direito na janela do editor, recebo os itens de menu prometidos "Create <name>": há "Create 'Unittests in test_sa ...'...", seguido por "Run 'Unittests em test_sa ...' "e" Depurando 'Unittests em test_sa ...' ". Então, novamente, é tudo específico para a estrutura mais unida; nada para py.test.

Se eu tentar os itens de menu que dizem "mais unittest", recebo uma caixa de diálogo com as opções para "Name", "Type", uma caixa de grupo "Tests" com "Folder" e "Pattern" e "Pattern" e "Script" e "Class "e" Função "etc. Isso soa exatamente como o que está documentado como caixa de diálogo para adicionar uma configuração para o Teste de Unidade Python , e não como as opções" Nome "e" Teste para executar "e" Palavras-chave "que devem aparecer na configuração da caixa de diálogo py.test . Não há nada dentro da caixa de diálogo para alternar qual estrutura de teste estou adicionando.

Estou usando o PyCharm 1.5.2 no Windows com Python 3.1.3 e pytest 2.0.3. Posso executar py.testcom êxito meus testes na linha de comando, portanto, não é algo simples como o pytest não sendo instalado corretamente.

Como faço para configurar o PyCharm para executar meus testes py.test?

Joe White
fonte

Respostas:

228

Por favor, vá para o arquivo | Configurações | Ferramentas | Ferramentas Integradas do Python e altere o executor de teste padrão para py.test. Então você terá a opção py.test para criar testes em vez do mais unittest.

yole
fonte
Hah! Não sei como eu perdi isso. No entanto, ele funciona pela metade: se eu clicar com o botão direito do mouse na pasta na janela da ferramenta Projeto, isso me dará a opção de criar testes de documentos, não py.tests. (Vou escrever um relatório de bug.) Mas funciona se eu clicar com o botão direito do mouse no editor e depois alterar "Script:" para o nome do diretório.
Joe White
3
Lembre-se também de marcar o diretório de origem como uma "raiz de fontes": jetbrains.com/pycharm/webhelp/content-root.html
Inti
1
Existe uma maneira de definir isso para todo o projeto (ou todos os projetos), e não por módulo?
precisa saber é o seguinte
1
Parece que File | Settings | Tools | Python Integrated Toolssó está disponível nas configurações do projeto, em vez das configurações padrão no PyCharm 5.
killthrush
2
Depois de configurado, como você realmente executa os testes?
21818 Chris Anderson
51

PyCharm 2017.3

  1. Preference -> Tools -> Python integrated Tools- Escolha py.testcomo Default test runner.
  2. Se você usa Django Preference -> Languages&Frameworks -> Django- Ative o tick onDo not use Django Test runner
  3. Limpe todas as configurações de teste existentes anteriormente Run/Debug configuration, caso contrário, os testes serão executados com essas configurações mais antigas.
  4. Para definir alguns argumentos adicionais padrão, atualize a configuração padrão do py.test. Run/Debug Configuration -> Defaults -> Python tests -> py.test -> Additional Arguments
Sergey Kubrak
fonte
2
No PyCharm 2017.3.2, mesmo depois de definir py.test como padrão, quando clico com o botão direito do mouse no projeto no painel Projetos e seleciono New => Python File, o Kind:menu suspenso oferece apenas: arquivo Python, teste de unidade, stub de Python, e não Pytest. Procurei em todos os locais mencionados nos tópicos acima. o que estou perdendo?
Tom Baker
Arquivo Python, Teste de unidade, Stub Python - são arquivos python, com alguns dados predefinidos, você pode adicionar seus próprios, leia este tópico jetbrains.com/help/pycharm/… . Mas isso não afeta a execução do teste py.test, você pode criar apenas um arquivo python e ele funcionará. Neste tópico, discutimos como configurar esse recurso jetbrains.com/help/pycharm/running-tests.html para executar py.test.
Sergey Kubrak 15/01/19
No PyCharm mais recente, "Padrões" é chamado de "Modelos"
AgDude 30/07/19
19

Eu acho que você precisa usar o item Executar / Depurar Configuração na barra de ferramentas. Clique nele e em 'Editar configurações' (ou use o item de menu Executar-> Editar configurações). Na seção 'Padrões' no painel esquerdo, há um item 'py.test' que eu acho que é o que você deseja.

Também descobri que o manual não correspondia à interface do usuário para isso. Espero ter entendido o problema corretamente e isso ajude.

Scott Griffiths
fonte
4
A página "Padrões> py.test" não me deu nenhuma maneira de criar uma configuração. Mas se eu fosse para a caixa de diálogo Editar configurações, clique no botão "+" da barra de ferramentas, selecione "py.test" e defina "Diretório de trabalho" como o diretório que contém meus testes, que criou uma configuração que executaria meus testes. Então, +1 por me indicar uma parte útil do programa. Contudo, darei a resposta aceita ao @yole, já que acho que alterar o padrão para py.test é uma solução melhor - ele deve permitir que eu execute apenas o arquivo atual e coisas assim.
Joe White
@JoeWhite Por favor, adicione-o como resposta, pois foi útil #
Hariom Singh
Na configuração Janela de edição, depois de escolher a configuração do meu pytest, eu também tinha que escolher Targetpara ser Script athe aponte para a raiz dos meus testes pasta
RAbraham
Isto é muito melhor maneira como ela abre outra característica bem como passar-linha-comando argumentos etc.
chirag nayak
13

Aqui está como eu fiz funcionar com pytest 3.7.2(instalado via pip) e pycharms 2017.3:

  1. Vamos para edit configurations

  1. Adicione uma nova configuração de execução e selecione py.test

  1. Nos detalhes da configuração da execução, você precisa definir target= pythone o campo sem nome abaixo para tests. Parece que este é o nome da sua pasta de teste. Não tenho muita certeza. Também recomendo o -sargumento para que, se você depurar seus testes, o console se comportará corretamente. Sem o argumento, o pytest captura a saída e torna o console de depuração com erros.

  1. Minha pasta de testes é assim. Isso está logo abaixo da raiz do meu projeto ( my_project/tests).

  1. Meu foobar_test.pyarquivo: (nenhuma importação é necessária):
def test_foobar ():
    print ("olá pytest")
    afirmar True
  1. Execute-o com o comando de execução normal

Benjamin Crouzier
fonte
Existe alguma possibilidade de executar apenas o teste do arquivo atual? Eu só descobri que eu preciso mudar nome de arquivo nas configurações de configuração cada vez que abro outro arquivo
Algot
@ Algot Eu não sei isso no topo da minha cabeça. Ter um olhar para isto: jetbrains.com/help/pycharm/performing-tests.html e isso: jetbrains.com/pycharm/guide/tips/run-single-test
Benjamin Crouzier
5

Está mal documentado para ter certeza. Depois de adicionar uma nova configuração a partir dos padrões, você estará executando o script "/ Applications / PyCharm CE.app/Contents/helpers/pycharm/pytestrunner.py". Não está documentado e tem suas próprias idéias de argumentos de linha de comando.

Você pode:

  1. Tente brincar, inverta o script e veja se de alguma forma o py.test aceita argumentos. Pode funcionar; não aconteceu na primeira meia hora para mim.
  2. Basta executar "py.test * .py" em um console.

Estranhamente, você achará difícil encontrar qualquer discussão, pois o JetBrains faz um bom trabalho ao bombardear os algoritmos do Google com suas próprias páginas.

Charles Merriam
fonte
3

encontre esse tópico quando eu acertei a mesma pergunta e encontrei a versão do pycharm da solução: 2017.1.2, vá para "Preferências" -> "Ferramentas" -> "Ferramentas Integradas do Python" e defina o executor de teste padrão no painel do lado direito como py.test resolver meu problema

jacobcan118
fonte
Funcionará, mas você precisará clicar com o botão direito do mouse no nome do arquivo do script de teste na janela Projeto. Se você clicar com o botão direito do mouse na área do editor de arquivos do mesmo script de teste, ele ainda mostrará a ferramenta padrão antiga (Unittests), infelizmente. Isso é chato, pois não posso especificar a função individual que quero testar.
Hongyu Zhang
3

No pycharm 2019.2, você pode simplesmente fazer isso para executar todos os testes:

  1. Executar> Editar configurações> Adicionar pytest
  2. Defina as opções conforme mostrado na captura de tela a seguir captura de tela da configuração
  3. Clique em Debug (ou execute pytest usando, por exemplo, as teclas de atalho Shift + Alt + F9)

Para uma integração mais alta do pytest no pycharm, consulte https://www.jetbrains.com/help/pycharm/pytest.html

gebbissimo
fonte
2

Estou usando 2018.2

Executo -> Editar configurações ... Em seguida, clique no + no canto superior esquerdo da caixa de diálogo modal. Selecione "testes de python" -> py.test. Em seguida, nomeie-o como "Todos os testes com py.test"

Seleciono Destino: nome do módulo e coloco no módulo onde estão meus testes (ou seja, 'testes' para mim) ou no módulo em que todo o meu código está se meus testes estiverem misturados com o meu código. Isso estava me enganando.

Eu defino o intérprete Python.

Defino o diretório de trabalho como o diretório do projeto.

Brian C.
fonte
0

Com uma configuração python Conda especial que incluía a instalação do pip para py.test mais o uso do add-in Specs (opção --spec) (para Rspec como uma linguagem de resumo de teste agradável), eu precisava fazer;

1. Edite o py.test padrão para incluir a opção = --spec, o que significa usar o plugin: https://github.com/pchomik/pytest-spec

2.Crie uma nova configuração de teste usando py.test. Altere seu interpretador python para usar ~ / anaconda / envs / sua escolha de intérpretes, por exemplo, py27 para meus nomes.

3. Exclua a configuração de teste 'unittests'.

Agora, a configuração de teste padrão é py.test com minhas adoráveis ​​saídas no estilo Rspec. Eu amo isso! Obrigado a todos!

O documento do ps Jetbrains sobre configurações de execução / depuração está aqui: https://www.jetbrains.com/help/pycharm/2016.1/run-debug-configuration-py-test.html?search=py.test

AnneTheAgile
fonte
0

Com 2018.3, parece detectar automaticamente que estou usando o pytest, o que é bom, mas ainda não permite a execução no nível superior do projeto. Eu tive que executar pytestpara cada testsdiretório individualmente.

No entanto, descobri que podia escolher uma das configurações e editá-la manualmente para executar na raiz do projeto e que isso funcionou. Preciso escolhê-lo manualmente no menu suspenso Configurações - não consigo clicar com o botão direito do mouse na pasta raiz no painel Projeto. Mas pelo menos me permite executar todos os testes de uma só vez.

sfjac
fonte
0

Habilite o Pytest para seu projeto

  1. Abra as configurações / preferências | Ferramentas | Diálogo de configurações das Ferramentas Integradas do Python, conforme descrito em Escolhendo sua estrutura de testes.
  2. No campo Executor de teste padrão, selecione pytest .
  3. Clique em OK para salvar as configurações.

insira a descrição da imagem aqui

Milo Chen
fonte