gpt4 book ai didi

pytest - 如何让 PyTest 装置在 PyCharm 中自动完成(类型提示)

转载 作者:行者123 更新时间:2023-12-03 23:58:25 24 4
gpt4 key购买 nike

我花了一段时间来解决这个问题,这真的困扰着我,所以我想我会在这里发布,以防有​​人遇到同样的问题......

(答案太简单了,很伤人:-)

问题

问题的核心是,有时(并非总是)在处理 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()

我有时会遇到问题(但并非总是如此 - 我不太明白为什么)像这样的类在我使用 fixture 的测试代码中自动完成无法正常工作,例如
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 类型的输入参数的。

最佳答案

此外,如果您向函数添加文档字符串并指定参数的类型,您将获得这些参数的代码完成。
例如使用 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's 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 进行测试。文档字符串格式为 reStructuredText 并且在设置中选中了“分析文档字符串中的 Python 代码”复选框。

关于pytest - 如何让 PyTest 装置在 PyCharm 中自动完成(类型提示),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39908163/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com