如何让PyTest灯具在PyCharm中自动完成(类型提示)

时间:2016-10-07 01:51:08

标签: pytest

我有一段时间搞清楚这一点,这真的让我烦恼,所以我想我会发布这个以防万一有人遇到同样的问题......

(答案很简单就是伤害: - )

问题

问题的核心是,有时候,并非总是如此,当在PyTest中处理返回对象的灯具时,当你在PyCharm的测试中使用这些灯具时,你不会得到自动完成提示。如果您在编写测试时想要引用具有大量方法的对象,则会给测试编写过程带来很多开销和不便。

这是一个简单的例子来说明这个问题:

假设我有一个住在的“event_manager”课程:

location.game.events

让我们进一步说,在我的conftest.py文件中(对于不熟悉的PyTest标准事物),我有一个返回该类实例的fixture:

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!)

注意我是如何显式地将fixture键入为event_manager类型的输入参数。

1 个答案:

答案 0 :(得分:1)

此外,如果将docstring添加到函数并指定参数的类型,您将获得这些参数的代码完成。

例如使用pytest和selenium:

OLE DB provider "SQLNCLI10" for linked server "(null)" returned message "Deferred prepare could not be completed.".
Msg 8180, Level 16, State 1, Line 3
Statement(s) could not be prepared.
Msg 137, Level 15, State 2, Line 3
Must declare the scalar variable "@EventID".

这里也是我的conftest.py文件

# 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's driver
    :param str url: the URL to test
    """
    browser_driver.get(url)
    assert "IBM" in browser_driver.title

使用python 2.7和Pycharm 2017.1进行测试。 docstring格式是reStructuredText和"分析docstrings中的Python代码"在设置中选中复选框。