Pytest插件,用于在测试期间禁用socket调用
项目描述
pytest-socket
一个与Pytest一起使用的插件,用于在测试期间禁用或限制socket
调用,以确保防止网络调用。
特性
- 禁用通过Python的
socket
接口流动的所有网络调用。
需求
- Pytest 6.2.5或更高版本
安装
您可以通过从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”是免费和开源软件
问题
如果您遇到任何问题,请提交问题以及详细的描述。
参考文献
此Pytest插件是由Cookiecutter和@hackebrot的Cookiecutter-pytest-plugin模板生成的。
此插件是在@hangtwenty解决了一个StackOverflow问题之后出现的,然后由@miketheman将其转换为pytest插件。
项目详情
下载文件
下载您平台上的文件。如果您不确定选择哪个,请了解有关安装包的更多信息。