Pytest 插件在测试期间禁用套接字调用
项目描述
pytest-socket
与 Pytest 一起使用的插件,用于socket在测试期间禁用或限制调用,以确保阻止网络调用。
特征
- 禁用流经 Python
socket接口的所有网络调用。
要求
- Pytest 3.6.3 或更高版本
安装
您可以
从PyPIpytest-socket通过pip安装:
$ pip install pytest-socket
或添加到您pyproject.toml的诗歌中:
[tool.poetry.dev-dependencies]
pytest-socket = "*"
用法
运行pytest --disable-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()
要在测试运行期间启用 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和 @hackebrot的 Cookiecutter-pytest-plugin 模板生成的。
这个插件是由于 @hangtwenty解决StackOverflow 问题的努力而产生的,然后由@miketheman转换为 pytest 插件。
项目详情
下载文件
下载适用于您平台的文件。如果您不确定要选择哪个,请了解有关安装包的更多信息。
源分布
内置分布
pytest_socket -0.5.1-py3-none-any.whl 的哈希值
| 算法 | 哈希摘要 | |
|---|---|---|
| SHA256 | 8726fd47b83b127451532b6d570c5b6c4cd204fca363936509b1f53195de6f4f |
|
| MD5 | f6d5d716c1b33d52bcbb6899416a7e63 |
|
| 布莱克2-256 | 35ba18e78c3352eaf2bb3d1430f5bfb9e52ccc21db87cacc9d9422efc40686da |