Как использовать `pytest` из Python?

Я работаю над проектом, который недавно перешел на pytest unittest. Я привык вызывать свои тесты из Eclipse, чтобы иметь возможность использовать отладчик (например, размещать точки останова для анализа развития сбоя теста). Теперь это уже невозможно, так как единственный способ запустить тесты — через черный ящик командной строки.

Есть ли способ использовать pytest из Python, чтобы никто не выходил из IDE? Тесты, конечно, не должны запускаться в отдельном процессе.


person nikow    schedule 27.07.2010    source источник


Ответы (7)


Я думаю, что теперь я могу ответить на свой вопрос, это довольно просто:

import pytest

pytest.main(args)

который описан в разделе Вызов pytest из кода Python. Затем я могу запустить этот модуль и/или запустить его с помощью встроенного отладчика.

args — это список аргументов командной строки, поэтому, например, для запуска только определенных тестов я могу использовать что-то вроде:

args_str = "-k test_myfavorite"
args = args_str.split(" ")
pytest.main(args)
person nikow    schedule 27.07.2010

Кажется, теперь (py.test версии 2.0+) кто-то может сделать и это:

import pytest

pytest.main('-x {0}'.format(argument))

# Or
# pytest.main(['-x', 'argument'])

Ссылка: https://pytest.org/latest/usage.html#calling-pytest-from-python-code

person Richard    schedule 25.09.2015

Теперь это поддерживается pytest и подробно описано в документация.

Вы можете вызвать pytest напрямую из кода Python:

import pytest
pytest.main()

это действует так, как если бы вы вызывали «pytest» из командной строки. Он не вызовет SystemExit, а вместо этого вернет код выхода. Вы можете передать параметры и аргументы:

pytest.main(["-x", "mytestdir"])
person JJC    schedule 12.01.2017

Для меня это было так:

pytest.main(["-x", "path to test file", "args"])

Например:

import pytest
pytest.main(["-x", "/api/test", "-vv"])
person Akavall    schedule 25.09.2018

Я не пробовал использовать eclipse, но, как было предложено в связанный вопрос, можно использовать параметр командной строки --pdb с py.test. Возможно, можно настроить eclipse таким образом.

Однако вызов стандартного import pdb;pdb.set_trace() не приведет к прямому вызову отладчика. Сначала он выдаст ошибку, которая, в свою очередь, активирует отладчик. Это может или не может заставить вещи работать по-другому.

person Debilski    schedule 27.07.2010
comment
Спасибо, я знал о переключателе --pdb. Я думаю, что в этом случае pdb управляется и запускается py.test, который не будет работать для Eclipse (я хочу, чтобы мой запущенный Eclipse взял на себя отладку). - person nikow; 27.07.2010

Возможно, вы могли бы попробовать pycharm, он имеет прямую интеграцию с py.test (я использую его на работе ) и отладчик работает отлично.

person Juan Antonio Gomez Moriano    schedule 31.08.2012
comment
Спасибо за предложение. Совсем недавно у меня была возможность использовать PyCharm 2.5, и я согласен, что он работает очень хорошо. Прямо сейчас я как бы разделился между PyCharm и Aptana Studio. - person nikow; 31.08.2012
comment
@nikow: я начал использовать aptana ... я ненавидел его, кроме того, если вы познакомитесь с pycharm, вы также можете перейти на phpstorm, rubymine, intellij ... все эти IDE от jetbrains и имеют одинаковую структуру, ярлыки. .. Так что это определенно стоит. Раньше я был фанатом затмений, но знаю, что реактивные мозги меня достали :) - person Juan Antonio Gomez Moriano; 31.08.2012
comment
+1 для PyCharm. Я использовал Aptana для PHP, но после использования PyCharm я собираюсь постепенно перейти на продукты JetBrain. - person Kostas Demiris; 08.01.2014

Вы можете просто запустить py.test --pdb, если вам нужен только отладчик и вам не нужна IDE.

person citynorman    schedule 12.02.2018