freshcrate
Home > Frameworks > pytest-socket

pytest-socket

Pytest Plugin to disable socket calls during tests

Description

# pytest-socket [![PyPI current version](https://img.shields.io/pypi/v/pytest-socket.svg)](https://pypi.python.org/pypi/pytest-socket) [![Python Support](https://img.shields.io/pypi/pyversions/pytest-socket.svg)](https://pypi.python.org/pypi/pytest-socket) [![Tests](https://github.com/miketheman/pytest-socket/workflows/Python%20Tests/badge.svg)](https://github.com/miketheman/pytest-socket/actions?query=workflow%3A%22Python+Tests%22) [![pre-commit.ci status](https://results.pre-commit.ci/badge/github/miketheman/pytest-socket/main.svg)](https://results.pre-commit.ci/latest/github/miketheman/pytest-socket/main) [![Maintainability](https://api.codeclimate.com/v1/badges/1608a75b1c3a20211992/maintainability)](https://codeclimate.com/github/miketheman/pytest-socket/maintainability) [![FOSSA Status](https://app.fossa.io/api/projects/git%2Bgithub.com%2Fmiketheman%2Fpytest-socket.svg?type=shield)](https://app.fossa.io/projects/git%2Bgithub.com%2Fmiketheman%2Fpytest-socket?ref=badge_shield) [![Code style: black](https://img.shields.io/badge/code%20style-black-000000.svg)](https://github.com/psf/black) A plugin to use with Pytest to disable or restrict `socket` calls during tests to ensure network calls are prevented. --- ## Features - Disables all network calls flowing through Python\'s `socket` interface. ## Requirements - [Pytest](https://github.com/pytest-dev/pytest) 6.2.5 or greater ## Installation You can install `pytest-socket` via [pip](https://pypi.python.org/pypi/pip/) from [PyPI](https://pypi.python.org/pypi): ```console pip install pytest-socket ``` or add to your `pyproject.toml` for [poetry](https://python-poetry.org/): ```ini [tool.poetry.dev-dependencies] pytest-socket = "*" ``` ## Usage Run `pytest --disable-socket`, tests should fail on any access to `socket` or libraries using socket with a `SocketBlockedError`. To add this flag as the default behavior, add this section to your [`pytest.ini`](https://docs.pytest.org/en/6.2.x/customize.html#pytest-ini): ```ini [pytest] addopts = --disable-socket ``` or add this to your [`setup.cfg`](https://docs.pytest.org/en/6.2.x/customize.html#setup-cfg): ```ini [tool:pytest] addopts = --disable-socket ``` or update your [`conftest.py`](https://docs.pytest.org/en/6.2.x/writing_plugins.html#conftest-py-plugins) to include: ```python from pytest_socket import disable_socket def pytest_runtest_setup(): disable_socket() ``` If you exceptionally want to enable socket for one particular execution pass `--force-enable-socket`. It takes precedence over `--disable-socket`. To enable Unix sockets during the test run (e.g. for async), add this option: ```ini [pytest] addopts = --disable-socket --allow-unix-socket ``` To enable specific tests use of `socket`, pass in the fixture to the test or use a marker: ```python 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) ``` To allow only specific hosts per-test: ```python @pytest.mark.allow_hosts(['127.0.0.1']) def test_explicitly_enable_socket_with_mark(): assert socket.socket.connect(('127.0.0.1', 80)) ``` or for whole test run ```ini [pytest] addopts = --allow-hosts=127.0.0.1,127.0.1.1 ``` ### Frequently Asked Questions Q: Why is network access disabled in some of my tests but not others? A: pytest's default fixture scope is "function", which `socket_enabled` uses. If you create another fixture that creates a socket usage that has a "higher" instantiation order, such as at the module/class/session, then the higher order fixture will be resolved first, and won't be disabled during the tests. Read more in [this excellent example](https://github.com/miketheman/pytest-socket/issues/45#issue-679835420) and more about [pytest fixture order here](https://docs.pytest.org/en/stable/fixture.html#fixture-instantiation-order). This behavior may change in the future, as we learn more about pytest fixture order, and what users expect to happen. ## Contributing Contributions are very welcome. Tests can be run with [pytest](https://github.com/pytest-dev/pytest), please ensure the coverage at least stays the same before you submit a pull request. ## License Distributed under the terms of the [MIT](http://opensource.org/licenses/MIT) license, "pytest-socket" is free and open source software [![FOSSA Status](https://app.fossa.io/api/projects/git%2Bgithub.com%2Fmiketheman%2Fpytest-socket.svg?type=large)](https://app.fossa.io/projects/git%2Bgithub.com%2Fmiketheman%2Fpytest-socket?ref=badge_large) ## Issues If you encounter any problems, please [file an issue](https://github.com/miketheman/pytest-socket/issues) along with a detailed description. ## References This [Pytest](https://github.com/pytest-dev/pytest) plugin was generated with [Cookiecutter](https://github.com/audreyr/cookiecutter) along with [\

Release History

VersionChangesUrgencyDate
0.7.0Imported from PyPI (0.7.0)Low4/21/2026
0.6.0## What's Changed * chore(deps): update dependency httpx to ^0.22.0 by @renovate in https://github.com/miketheman/pytest-socket/pull/113 * Add Change Log project URL by @scop in https://github.com/miketheman/pytest-socket/pull/115 * [pre-commit.ci] pre-commit autoupdate by @pre-commit-ci in https://github.com/miketheman/pytest-socket/pull/116 * chore(deps): update dependency pytest to v7 by @renovate in https://github.com/miketheman/pytest-socket/pull/117 * chore(deps): update actions/setupLow2/3/2023
0.5.1## What's Changed * [pre-commit.ci] pre-commit autoupdate by @pre-commit-ci in https://github.com/miketheman/pytest-socket/pull/104 * fix: don't break on doctests by @andreoliwa, @orf in https://github.com/miketheman/pytest-socket/pull/109 * chore(deps): update dependency starlette to ^0.18.0 by @renovate in https://github.com/miketheman/pytest-socket/pull/110 * chore: update make target to handle installation by @miketheman in https://github.com/miketheman/pytest-socket/pull/111 * chore: Low1/23/2022
0.5.0## What's Changed * docs: Fix syntax for setup.cfg by @llimllib in https://github.com/miketheman/pytest-socket/pull/77 * chore(dev): update development commands by @miketheman in https://github.com/miketheman/pytest-socket/pull/83 * Fix pytest-socket raises IndexError with httpx by @ollipa in https://github.com/miketheman/pytest-socket/pull/85 * test: move the reenable fixture to conftest by @miketheman in https://github.com/miketheman/pytest-socket/pull/86 * Switch to poetry-core by @fabafLow12/23/2021
0.4.1Include tests and configs in source distribution archive #69 https://github.com/miketheman/pytest-socket/compare/0.4.0...0.4.1 ## What's Changed * pyproject.toml: include tests in sdist archive by @kwshi in https://github.com/miketheman/pytest-socket/pull/69 ## New Contributors * @kwshi made their first contribution in https://github.com/miketheman/pytest-socket/pull/69 **Full Changelog**: https://github.com/miketheman/pytest-socket/compare/0.4.0...0.4.1Low8/28/2021
0.4.0Enhancements: * Enable Unix sockets selectively with --allow-unix-socket #54 * Test refactor, add CodeQL scanning * Correctly subclass socket.socket #50 * Add testing against Python 3.9, Dropped testing against Python 3.5 * Doc updates https://github.com/miketheman/pytest-socket/compare/0.3.5...0.4.0 ## What's Changed * chore(deps): update dependency pytest to v6 by @renovate in https://github.com/miketheman/pytest-socket/pull/44 * Create codeql-analysis.yml by @miketheman in httpLow3/30/2021
0.3.5Bugfix release. * Fix bug in marker evaluation #42 * Refactor tests for clarity https://github.com/miketheman/pytest-socket/compare/0.3.4...0.3.5 https://pypi.org/project/pytest-socket/0.3.5/ # NOTE This is the final release that supports Python 3.5Low5/31/2020
0.3.4Maintenance release. * Drop support for unsupported versions of Python #23 * Convert toolchain from pip/tox/twine to poetry * Replace TravisCI and Appveyor with GitHub Actions #36 * Update for correct test output #31 * Add renovatebot for dependecy updates #26 https://github.com/miketheman/pytest-socket/compare/0.3.3...0.3.4 https://pypi.org/project/pytest-socket/0.3.4/Low4/10/2020
0.3.3* Fix hostname check when unicode on Python 2.7.x #22 https://github.com/miketheman/pytest-socket/compare/0.3.2...0.3.3 https://pypi.org/project/pytest-socket/0.3.3/Low2/9/2019
0.3.2* Update support for Pytest 4.1.x * Test package on Python 3.7.x * Stop testing on pypy https://github.com/miketheman/pytest-socket/compare/0.3.1...0.3.2 https://pypi.org/project/pytest-socket/0.3.2/Low1/8/2019
0.3.1* Update minimum required pytest version https://github.com/miketheman/pytest-socket/compare/0.3.0...0.3.1 https://pypi.org/project/pytest-socket/0.3.1/Low7/16/2018
0.3.0* Add support for allowing specific lists of hosts via IP Addresses * Change the inherited exception class in tests * Add codeclimate to travis output * Add coverage reporting * Drop support for Python 3.3 https://github.com/miketheman/pytest-socket/compare/0.2.0...0.3.0 https://pypi.org/project/pytest-socket/0.3.0/Low7/15/2018
0.1.0* Initial public release https://pypi.org/project/pytest-socket/0.1.0/Low7/15/2017
0.2.0* Reorganized API, requires explicit activation * Added Python 3.x compatibility * Added ``ini`` setting * Test all Python versions * Relax py.test version requirement https://github.com/miketheman/pytest-socket/compare/0.1.0...0.2.0 https://pypi.org/project/pytest-socket/0.2.0/Low7/15/2017

Dependencies & License Audit

Loading dependencies...

Similar Packages

pre-commitA framework for managing and maintaining multi-language pre-commit hooks.v4.6.0
azure-core-tracing-opentelemetryMicrosoft Azure Azure Core OpenTelemetry plugin Library for Pythonazure-template_0.1.0b6187637
spdx-toolsSPDX parser and tools.0.8.5
lacesDjango components that know how to render themselves.0.1.2
django-tasksA backport of Django's built in Tasks framework0.12.0