Skip to main content

Pytest 插件在测试期间禁用套接字调用

项目描述

pytest-socket

PyPI 当前版本 Python 支持 测试 pre-commit.ci 状态 可维护性 福萨状态 代码风格:黑色

与 Pytest 一起使用的插件,用于socket在测试期间禁用或限制调用,以确保阻止网络调用。


特征

  • 禁用流经 Pythonsocket接口的所有网络调用。

要求

  • Pytest 3.6.3 或更高版本

安装

您可以 从PyPIpytest-socket通过pip安装:

$ pip install pytest-socket

或添加到您pyproject.toml诗歌中:

[tool.poetry.dev-dependencies]
pytest-socket = "*"

用法

运行pytest --disable-socketsocket使用带有SocketBlockedError.

要将此标志添加为默认行为,请将此部分添加到您的 pytest.ini:

[pytest]
addopts = --disable-socket

或将此添加到您的setup.cfg

[tool:pytest]
addopts = --disable-socket

或更新您的conftest.py以包括:

from pytest_socket import disable_socket

def pytest_runtest_setup():
    disable_socket()

要在测试运行期间启用 Unix 套接字(例如异步),请添加此选项:

[pytest]
addopts = --disable-socket --allow-unix-socket

要启用特定测试使用socket,请将夹具传递给测试或使用标记:

def test_explicitly_enable_socket(socket_enabled):
    assert socket.socket(socket.AF_INET, socket.SOCK_STREAM)


@pytest.mark.enable_socket
def test_explicitly_enable_socket_with_mark():
    assert socket.socket(socket.AF_INET, socket.SOCK_STREAM)

每次测试只允许特定主机:

@pytest.mark.allow_hosts(['127.0.0.1'])
def test_explicitly_enable_socket_with_mark():
    assert socket.socket.connect(('127.0.0.1', 80))

或整个试运行

[pytest]
addopts = --allow-hosts=127.0.0.1,127.0.1.1

经常问的问题

问:为什么在我的某些测试中禁用了网络访问,而在其他测试中却没有?

A:pytest 的默认fixture 作用域是“function”,它socket_enabled使用。如果您创建另一个夹具来创建具有“更高”实例化顺序的套接字使用,例如在模块/类/会话中,那么较高顺序的夹具将首先被解析,并且在测试期间不会被禁用。在这个优秀的示例中阅读更多内容, 并在此处了解更多关于pytest 夹具顺序的信息

随着我们更多地了解 pytest 夹具顺序以及用户期望发生的情况,这种行为将来可能会改变。

贡献

贡献是非常受欢迎的。可以使用 pytest运行测试,在提交拉取请求之前,请确保覆盖率至少保持不变。

执照

根据 MIT许可条款分发,“pytest-socket”是免费和开源软件

福萨状态

问题

如果您遇到任何问题,请提交问题 并附上详细说明。

参考

这个Pytest插件是使用 Cookiecutter@hackebrotCookiecutter-pytest-plugin 模板生成的。

这个插件是由于 @hangtwenty解决StackOverflow 问题的努力而产生的,然后由@miketheman转换为 pytest 插件。

下载文件

下载适用于您平台的文件。如果您不确定要选择哪个,请了解有关安装包的更多信息。

源分布

pytest-socket-0.5.1.tar.gz (12.0 kB 查看哈希

已上传 source

内置分布

pytest_socket-0.5.1-py3-none-any.whl (9.0 kB 查看哈希)

已上传 py3