miketheman / Pytest Socket
Programming Languages
Projects that are alternatives of or similar to Pytest Socket
============= pytest-socket
.. image:: https://img.shields.io/pypi/v/pytest-socket.svg :target: https://pypi.python.org/pypi/pytest-socket
.. image:: https://img.shields.io/pypi/pyversions/pytest-socket.svg :target: https://pypi.python.org/pypi/pytest-socket
.. image:: https://github.com/miketheman/pytest-socket/workflows/Python%20Tests/badge.svg :target: https://github.com/miketheman/pytest-socket/actions?query=workflow%3A%22Python+Tests%22 :alt: Python Tests
.. image:: https://api.codeclimate.com/v1/badges/1608a75b1c3a20211992/maintainability :target: https://codeclimate.com/github/miketheman/pytest-socket/maintainability :alt: Maintainability
.. image:: https://app.fossa.io/api/projects/git%2Bgithub.com%2Fmiketheman%2Fpytest-socket.svg?type=shield :target: https://app.fossa.io/projects/git%2Bgithub.com%2Fmiketheman%2Fpytest-socket?ref=badge_shield :alt: FOSSA Status
A plugin to use with Pytest to disable or restrict socket
calls during tests to ensure network calls are prevented.
This Pytest
_ plugin was generated with Cookiecutter
_ along with @hackebrot
's Cookiecutter-pytest-plugin
template.
Features
- Disables all network calls flowing through Python's
socket
interface.
Requirements
-
Pytest
_ 3.6.3 or greater
Installation
You can install "pytest-socket" via pip
_ from PyPI
_::
$ pip install pytest-socket
Usage
-
Run
pytest --disable-socket
, tests should fail on any access tosocket
or libraries using socket with aSocketBlockedError
.To add this flag as the default behavior, add this section to your
pytest.ini
orsetup.cfg
:.. code:: ini
[pytest] addopts = --disable-socket
or update your
conftest.py
to include:.. code:: python
from pytest_socket import disable_socket
def pytest_runtest_setup(): disable_socket()
-
To enable specific tests use of
socket
, pass in the fixture to the test or use a marker:.. code:: 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:
.. code:: 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
.. code:: ini
[pytest]
addopts = --allow-hosts=127.0.0.1,127.0.1.1
Contributing
Contributions are very welcome. Tests can be run with pytest
_, please ensure
the coverage at least stays the same before you submit a pull request.
License
Distributed under the terms of the MIT
_ license, "pytest-socket" is free and open source software
.. image:: https://app.fossa.io/api/projects/git%2Bgithub.com%2Fmiketheman%2Fpytest-socket.svg?type=large :target: https://app.fossa.io/projects/git%2Bgithub.com%2Fmiketheman%2Fpytest-socket?ref=badge_large :alt: FOSSA Status
Issues
If you encounter any problems, please file an issue
_ along with a detailed description.
References
This plugin came about due to the efforts by @hangtwenty
_ solving a StackOverflow question
,
then converted into a pytest plugin by @miketheman
.
.. _Cookiecutter
: https://github.com/audreyr/cookiecutter
.. _@hackebrot
: https://github.com/hackebrot
.. _MIT
: http://opensource.org/licenses/MIT
.. _cookiecutter-pytest-plugin
: https://github.com/pytest-dev/cookiecutter-pytest-plugin
.. _file an issue
: https://github.com/miketheman/pytest-socket/issues
.. _pytest
: https://github.com/pytest-dev/pytest
.. _tox
: https://tox.readthedocs.io/en/latest/
.. _pip
: https://pypi.python.org/pypi/pip/
.. _PyPI
: https://pypi.python.org/pypi
.. _@hangtwenty
: https://github.com/hangtwenty
.. _StackOverflow question
: https://stackoverflow.com/a/30064664
.. _@miketheman
: https://github.com/miketheman