Как подключить PyTest к автозаполнению в PyCharm (тип намека)
У меня был медведь времени, выяснив это, и это действительно подслушивало меня, поэтому я подумал, что отправлю это здесь, если кто-то столкнется с той же проблемой...
(и ответ настолько прост, что он болит: -)
Проблема
Ядро проблемы заключается в том, что иногда, не всегда, когда речь идет о светильниках в PyTest, которые возвращают объекты, когда вы используете эти приборы в тесте в PyCharm, вы не получаете подсказок автозаполнения. Если у вас есть объекты с большим количеством методов, которые вы хотите ссылаться при написании теста, это может добавить много накладных расходов и неудобств в процесс написания теста.
Вот простой пример, иллюстрирующий проблему:
Скажем, у меня есть класс "event_manager", который живет в:
location.game.events
Допустим, что в моем файле conftest.py(стандартная вещь PyTest для незнакомого) у меня есть приспособление, которое возвращает экземпляр этого класса:
from location.game.events import event_manager
...
@pytest.fixture(scope="module")
def event_mgr():
"""Creates a new instance of event generate for use in tests"""
return event_manager()
У меня иногда возникали проблемы (но не всегда - я не могу понять, почему) с такими классами, где автозаполнение не будет работать должным образом в тестовом коде, где я использую прибор, например
def test_tc10657(self, evt_mgr):
"""Generates a Regmod and expects filemod to be searchable on server"""
evt_mgr.(This does not offer autocomplete hints when you type ".")
Итак, ответ на самом деле довольно прост, как только вы просматриваете тип намека на PyCharm:
http://www.jetbrains.com/help/pycharm/2016.1/type-hinting-in-pycharm.html
Здесь, как исправить вышеуказанный тестовый код, чтобы автозаполнение работало правильно:
from location.game.events import event_manager
...
def test_tc10657(self, evt_mgr: event_manager):
"""Generates a Regmod and expects filemod to be searchable on server"""
evt_mgr.(This DOES offer hints when you type "." Yay!)
Обратите внимание, как я явно ввожу прибор в качестве входного параметра типа event_manager.
Ответы
Ответ 1
Также, если вы добавите docstring в функцию и укажите тип параметров, вы получите завершение кода для этих параметров.
Например, используя pytest и selenium:
# The remote webdriver seems to be the base class for the other webdrivers
from selenium.webdriver.remote.webdriver import WebDriver
def test_url(url, browser_driver):
"""
This method is used to see if IBM is in the URL title
:param WebDriver browser_driver: The browser driver
:param str url: the URL to test
"""
browser_driver.get(url)
assert "IBM" in browser_driver.title
Здесь также мой файл conftest.py
import pytest
from selenium import webdriver
# Method to handle the command line arguments for pytest
def pytest_addoption(parser):
parser.addoption("--driver", action="store", default="chrome", help="Type in browser type")
parser.addoption("--url", action="store", default='https://www.ibm.com', help="url")
@pytest.fixture(scope='module', autouse=True)
def browser_driver(request):
browser = request.config.getoption("--driver").lower()
# yield the driver to the specified browser
if browser == "chrome":
driver = webdriver.Chrome(executable_path='/path/to/chromedriver')
else:
raise Exception("No driver for browser " + browser)
yield driver
driver.quit()
@pytest.fixture(scope="module")
def url(request):
return request.config.getoption("--url")
Протестировано с использованием python 2.7 и Pycharm 2017.1. Формат docstring - reStructuredText, а флажок "Проанализировать код Python в docstrings" проверяется в настройках.