跳过主要内容

Pytest插件,用于在测试期间禁用socket调用

项目描述

pytest-socket

PyPI current version Python Support Tests pre-commit.ci status Maintainability FOSSA Status Code style: black

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


特性

  • 禁用通过Python的socket接口流动的所有网络调用。

需求

安装

您可以通过从PyPI使用pip安装pytest-socket

pip install pytest-socket

或将它添加到您的pyproject.toml中用于poetry

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

用法

运行pytest --disable-socket,测试应该会在对socket或使用socket的库的任何访问时失败,并抛出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()

如果您非常希望在一个特定的执行过程中启用套接字,请使用--force-enable-socket。它优先于--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

常见问题解答

问:为什么我的某些测试禁用了网络访问,而另一些则没有?

答:pytest的默认固定作用域是“函数”,这是socket_enabled使用的。如果您创建另一个创建具有“更高”实例化顺序的套接字使用的固定装置,例如在模块/类/会话中,那么较高顺序的固定装置将首先解决,测试期间不会禁用。更多内容请参阅这个优秀的例子以及pytest固定装置顺序

随着我们对pytest固定装置顺序和用户期望发生什么的了解越来越多,这种行为可能会在未来发生变化。

贡献

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

许可证

MIT许可下分发,“pytest-socket”是免费和开源软件

FOSSA Status

问题

如果您遇到任何问题,请提交问题以及详细的描述。

参考文献

Pytest插件是由Cookiecutter@hackebrotCookiecutter-pytest-plugin模板生成的。

此插件是在@hangtwenty解决了一个StackOverflow问题之后出现的,然后由@miketheman将其转换为pytest插件。

项目详情


下载文件

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

源分发

pytest_socket-0.7.0.tar.gz (12.4 kB 查看散列)

上传时间

构建分发

pytest_socket-0.7.0-py3-none-any.whl (6.8 kB 查看散列)

上传时间 Python 3

由以下支持