Automatically mock your HTTP interactions to simplify and speed up testing

Overview

VCR.py 📼

PyPI Python versions Build Status Code Coverage Status Join the chat at https://gitter.im/kevin1024/vcrpy Code Style: black


vcr.py logo

This is a Python version of Ruby's VCR library.

Source code
https://github.com/kevin1024/vcrpy
Documentation
https://vcrpy.readthedocs.io/

Rationale

VCR.py simplifies and speeds up tests that make HTTP requests. The first time you run code that is inside a VCR.py context manager or decorated function, VCR.py records all HTTP interactions that take place through the libraries it supports and serializes and writes them to a flat file (in yaml format by default). This flat file is called a cassette. When the relevant piece of code is executed again, VCR.py will read the serialized requests and responses from the aforementioned cassette file, and intercept any HTTP requests that it recognizes from the original test run and return the responses that corresponded to those requests. This means that the requests will not actually result in HTTP traffic, which confers several benefits including:

  • The ability to work offline
  • Completely deterministic tests
  • Increased test execution speed

If the server you are testing against ever changes its API, all you need to do is delete your existing cassette files, and run your tests again. VCR.py will detect the absence of a cassette file and once again record all HTTP interactions, which will update them to correspond to the new API.

Usage with Pytest

There is a library to provide some pytest fixtures called pytest-recording https://github.com/kiwicom/pytest-recording

License

This library uses the MIT license. See LICENSE.txt for more details

Comments
  • Feature/new matchers

    Feature/new matchers

    Hi,

    I did the update for the #71 as promised. This merge request introduces backward incompatibility with old cassettes, but I think it's worth it.

    Improvements which I think should be done:

    1. url matcher could be removed on on favor of uri . (I left just for backward compatibility)
    2. ~~More integration and unit test should be added (I will do this after discussion of this pull request)~~ done.

    Looking forward for review. Max

    enhancement in progress 
    opened by mshytikov 47
  • Drop support for EOL Python 2.6 and 3.3

    Drop support for EOL Python 2.6 and 3.3

    Fixes #338.

    Also removes redundant code that was required to maintain support for Python 2.6.

    Here's the pip installs for vcrpy-unittest from PyPI for the last month (via pypinfo --percent --pip vcrpy-unittest pyversion) showing nothing for Python 2.6 or 3.3.

    | python_version | percent | download_count | | -------------- | ------: | -------------: | | 2.7 | 47.5% | 699 | | 3.6 | 43.7% | 643 | | 3.5 | 4.8% | 70 | | 3.4 | 4.0% | 59 |

    Also includes @samuelfekete's CI fixes from 36b5162 to (mostly) get the CI green! Thanks! (I would have cherry-picked that commit but git couldn't find it.)

    opened by hugovk 38
  • vcrpy doesn't work under django?

    vcrpy doesn't work under django?

    I'm trying to use vcrpy to accelerate the execution of my django application test suite. I'm using django 1.7 on Mac, with Python 2.7.

    I added the following couple of lines to one of my tests:

         import vcr
         with vcr.use_cassette('recording.yaml'):
    

    The result is an import error:

        import vcr
      File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/vcr/__init__.py", line 2, in <module>
        from .config import VCR
      File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/vcr/config.py", line 6, in <module>
        from .cassette import Cassette
      File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/vcr/cassette.py", line 12, in <module>
        from .patch import CassettePatcherBuilder
      File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/vcr/patch.py", line 8, in <module>
        from .stubs import VCRHTTPConnection, VCRHTTPSConnection
      File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/vcr/stubs/__init__.py", line 9, in <module>
        from six.moves.http_client import (
    ImportError: No module named http_client
    

    The problematic code in stubs/init.py is :

    import six
    from six.moves.http_client import (
        HTTPConnection,
        HTTPSConnection,
        HTTPMessage,
        HTTPResponse,
    )
    

    This code seems to run fine when I'm just running it from a plain python console, but it results in the above ImportError under django.

    ready 
    opened by roy2006 34
  • Adding support for boto3

    Adding support for boto3

    boto3 bundles the requests library, so this basically is a copy and paste of the requests stubbing.

    I'm a little lost in the testing of this, with some guidance and/or help I could complete this.

    opened by dedsm 27
  • add httpx support

    add httpx support

    This PR adds support for httpx.

    The stub and tests are heavily based in the aiohttp implementation. You won't see any synchronous implementation because it was not necessary.

    Not sure if I edited the tox file correctly. (:

    opened by herdigiorgi 22
  • Upgrading to 1.6.0 seems conditional extra_require are not working on setup

    Upgrading to 1.6.0 seems conditional extra_require are not working on setup

    I receive this error when i upgraded to 1.6.0:

    Traceback (most recent call last):
      File "run_tests.py", line 14, in <module>
        from tests.app_login_tests import MainSiteTest  # noqa
      File "/my_app/tests/app_login_tests.py", line 7, in <module>
        from vcr_setup import vcrlib
      File "/my_app/tests/vcr_setup.py", line 1, in <module>
        import vcr
      File "/usr/local/lib/python2.7/dist-packages/vcr/__init__.py", line 2, in <module>
        from .config import VCR
      File "/usr/local/lib/python2.7/dist-packages/vcr/config.py", line 8, in <module>
        from .compat import collections
      File "/usr/local/lib/python2.7/dist-packages/vcr/compat.py", line 4, in <module>
        import mock
    ImportError: No module named mock
    

    Looking at the commits i think this new conditionals imports are not working https://github.com/kevin1024/vcrpy/commit/41949f7dc64a2ddb8a9c2cb845eac7bb8b94380b#diff-2eeaed663bd0d25b7e608891384b7298R36 i'm installing the package using pip im on python 2.7.

    opened by ialex 21
  • Handle PEP 479 with backward compat for python2.7

    Handle PEP 479 with backward compat for python2.7

    PEP479 renders the _handle_generator function of CassetteContextDecorator object erroneous in python3.7. Yet, we can't rely properly on yield from as python2.7 compat is still mandatory. Try to find a good balance between these two facts

    @graingert is it better for you?

    This would close #396

    bug need dev 
    opened by P-EB 20
  • use_cassette as decorator fails to pass unknown kwargs, pytest important

    use_cassette as decorator fails to pass unknown kwargs, pytest important

    usage requires edited conftest and execute with py.test --template FOO

    conftest.py

    import pytest
    @pytest.fixture
    def template(request):
        return request.config.getoption("--template")
    
    def pytest_addoption(parser):
        parser.addoption("--template", action="store",type='string',
                         help="set the name of the template to use in tests")
    

    test.py

    import vcr
    import pytest
    @vcr.use_cassette('test_vapp_find.yaml')
    def test_vapp_find(self, template):
            assert template == FOO
    

    usage:

    py.test -s test.py --template FOO

    suggested fix

    config.py

    # pass kwargs we dont know about merged_config = dict(kwargs.items() + merged_config.items())
    return Cassette.load(path, **merged_config)
    
    #cassette.py::Cassette.init
    **kwargs
    ):
    super(Cassette,self).init(**kwargs)
    
    opened by suederat 18
  • Error with body matcher for json, xmlrpc and form urlencoded

    Error with body matcher for json, xmlrpc and form urlencoded

    This is a tricky issue I encountered when using the body matcher on xmlrpc requests.

    Symptoms: Sometimes the request won't match, sometimes it will, and this only affects certain requests. This occurs on Python 3.4 and I believe other python 3 versions but not on 2.7

    Cause: An XMLRPC request has a body with XML inside which is generated from the parameters passed to the function call. Some parameters can be of dict type. xmlrpclib (or xmlrpc.client) will loop over items of the dict and generate the appropriate XML which will be the body of our POST request. Now items order is not guaranteed in dict and the behavior changed in python 3 such that the order of the same dict can change anytime and is not more or less constant on the same computer as in python 2. So the generated XML won't be necessarily the same as the one you recorded.

    Fix suggestion: A custom xmlrpc body matcher that takes that into account and will compare the struct XML elements in the correct order.

    The gzip compression didn't help me debuging this as I couldn't even read directly the cassettes...

    opened by Diaoul 17
  • Make request.headers always a CaseInsensitiveDict.

    Make request.headers always a CaseInsensitiveDict.

    Previously request.headers was a normal dict (albeit with the request.add_header interface) which meant that some code paths would do case-sensitive matching, for example remove_post_data_parameters which tests for 'Content-Type'. This change allows all code paths to get the same case-insensitive treatment.

    Additionally request.headers becomes a property to enforce upgrading it to a CaseInsensitiveDict even if assigned.

    opened by agriffis 16
  • Drop support for legacy Python 2.7

    Drop support for legacy Python 2.7

    Fixes #434.

    Python 2.7 reaches EOL on 2020-01-01. Many projects are pledging to drop support before or during 2020: https://python3statement.org/

    It's also relatively little used. Here's the pip installs for vcrpy from PyPI for May 2019:

    | category | percent | downloads | |----------|--------:|----------:| | 3.6 | 37.19% | 65,506 | | 3.7 | 26.36% | 46,432 | | 2.7 | 21.83% | 38,445 | | 3.5 | 11.53% | 20,303 | | 3.4 | 2.48% | 4,361 | | null | 0.31% | 553 | | 3.8 | 0.29% | 503 | | 3.3 | 0.01% | 14 | | Total | | 176,117 |

    Source: pypistats python_minor vcrpy --last-month # pip install pypistats

    There's one bit of six remaining in this PR, what's the best way to replace this?

        def test_case(self, predicate=None):
            predicate = predicate or self.is_test_method
            return six.with_metaclass(auto_decorate(self.use_cassette, predicate))
    
    opened by hugovk 15
  • build(deps): bump actions/checkout from 3.1.0 to 3.3.0

    build(deps): bump actions/checkout from 3.1.0 to 3.3.0

    Bumps actions/checkout from 3.1.0 to 3.3.0.

    Release notes

    Sourced from actions/checkout's releases.

    v3.3.0

    What's Changed

    New Contributors

    Full Changelog: https://github.com/actions/checkout/compare/v3.2.0...v3.3.0

    v3.2.0

    What's Changed

    New Contributors

    Full Changelog: https://github.com/actions/checkout/compare/v3.1.0...v3.2.0

    Changelog

    Sourced from actions/checkout's changelog.

    Changelog

    Commits

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    dependencies github_actions 
    opened by dependabot[bot] 0
  • Add an option to remove unused requests from cassette

    Add an option to remove unused requests from cassette

    This PR adds an option to remove previously recorded interactions if they are not used. I believe this feature can address the issue discussed in #208. We don't need to focus on ignoring all requests in the cassette file, but instead, we can write to file only replayed interactions and new ones. If no previous request is used, VCR will save only new interactions.

    There is a similar feature (merged, but not released) in Ruby VCR.

    opened by danielnsilva 0
  • Route requests to different cassette files depending on host

    Route requests to different cassette files depending on host

    I have various hosts that I need to hit for a unit test. I'd like to be able to route the responses from each host to its own specific cassette file. The documentation does not appear to show an example of how to do this. Is there a recommended way of doing this?

    opened by Jasonca2 0
  • Improved message on CannotOverwriteExistingCassetteException with no failed matchers

    Improved message on CannotOverwriteExistingCassetteException with no failed matchers

    Context

    Per discussion here: Originally posted by @salomvary in https://github.com/kevin1024/vcrpy/issues/533#issuecomment-1269519939

    CannotOverwriteExistingCassetteException can be raised along with 'no matchers failed' as the message details.

    In many cases, setting vcr.allow_playback_repeats for the affected test will clear the issue.

    Proposal

    Update the error handler to recognize this corner case and emit a message encouraging developers to consider whether they need to set vcr.allow_playback_repeats

    opened by edthedev 0
  • Question! Using VCR mechanics to record queries to sql database.

    Question! Using VCR mechanics to record queries to sql database.

    Does anyone know if there are any libraries that would allow to record and play queries to sql database? I don't per-see any obstacles in implementation. The question is does it even makes sense in terms of test speed improvement?

    opened by igor-polynets 2
Releases(v4.2.1)
  • v4.2.1(Aug 31, 2022)

    • Fix a bug where the first request in a redirect chain was not being recorded with aiohttp
    • Various typos and small fixes, thanks @jairhenrique, @timgates42
    Source code(tar.gz)
    Source code(zip)
  • v4.2.0(Jun 29, 2022)

    • Drop support for python < 3.7, thanks @jairhenrique, @IvanMalison, @AthulMuralidhar
    • Various aiohttp bigfixes (thanks @pauloromeira and boechat107)
    • Bugfix: filter_post_data_parameters not working with aiohttp. Thank you @vprakashplanview, @scop, @jairhenrique, and @cinemascop89
    • Bugfix: Some random misspellings (thanks @scop)
    • Migrate the CI suite to Github Actions from Travis (thanks @jairhenrique and @cclauss)
    • Various documentation and code misspelling fixes (thanks @scop and @Justintime50)
    • Bugfix: httpx support (select between allow_redirects/follow_redirects) (thanks @immerrr)
    Source code(tar.gz)
    Source code(zip)
  • v4.1.1(Oct 9, 2020)

    • Fix HTTPX support for versions greater than 0.15 (thanks @jairhenrique)
    • Include a trailing newline on json cassettes (thanks @AaronRobson)
    Source code(tar.gz)
    Source code(zip)
  • v4.1.0(Jul 31, 2020)

    • 4.1.0
      • Add support for httpx!! (thanks @herdigiorgi)
      • Add the new allow_playback_repeats option (thanks @tysonholub)
      • Several aiohttp improvements (cookie support, multiple headers with same key) (Thanks @pauloromeira)
      • Use enums for record modes (thanks @aaronbannin)
      • Bugfix: Do not redirect on 304 in aiohttp (Thanks @royjs)
      • Bugfix: Fix test suite by switching to mockbin (thanks @jairhenrique)
    Source code(tar.gz)
    Source code(zip)
  • v4.0.2(Dec 20, 2019)

  • v4.0.1(Dec 20, 2019)

  • v4.0.0(Dec 20, 2019)

  • v3.0.0(Dec 14, 2019)

    v3.0.0

    • This release is a breaking change as it changes how aiohttp follows redirects and your cassettes may need to be re-recorded with this update.
    • Fix multiple requests being replayed per single request in aiohttp stub #495 (@nickdirienzo)
    • Add support for request_info on mocked responses in aiohttp stub #495 (@nickdirienzo)
    • doc: fixed variable name (a -> cass) in an example for rewind #492 (@yarikoptic)
    Source code(tar.gz)
    Source code(zip)
  • v2.1.1(Nov 3, 2019)

    • 2.1.1
    • Format code with black (@neozenith)
    • Use latest pypy3 in Travis (@hugovk)
    • Improve documentation about custom matchers (@gward)
    • Fix exception when body is empty (@keithprickett)
    • Add pytest-recording to the documentation as an alternative Pytest plugin (@Stranger6667)
    • Fix yarl and python3.5 version issue (@neozenith)
    • Fix header matcher for boto3 - fixes #474 (@simahawk)
    Source code(tar.gz)
    Source code(zip)
  • v2.1.0(Aug 8, 2019)

    v2.1.0

    Updates

    • Add a rewind method to reset a cassette (thanks @khamidou)
    • New error message with more details on why the cassette failed to play a request (thanks @arthurHamon2, @neozenith)
    • Handle connect tunnel URI (thanks @jeking3)
    • Add code coverage to the project (thanks @neozenith)
    • Drop support to python 3.4
    • Add deprecation warning on python 2.7, next major release will drop python 2.7 support

    Fixes

    • Fix build problems on requests tests (thanks to @dunossauro)
    • Fix matching on 'body' failing when Unicode symbols are present in them (thanks @valgur)
    • Fix bugs on aiohttp integration (thanks @graingert, @steinnes, @stj, @lamenezes, @lmazuel)
    • Fix Biopython incompatibility (thanks @rishab121)
    • Fix Boto3 integration (thanks @1oglop1, @arthurHamon2)
    Source code(tar.gz)
    Source code(zip)
  • v2.0.0(Sep 19, 2018)

    • Support python 3.7 (fix httplib2 and urllib2, thanks @felixonmars)
    • [#356] Fixes before_record_response so the original response isn't changed (thanks @kgraves)
    • Fix requests stub when using proxy (thanks @samuelfekete @daneoshiga)
    • (only for aiohttp stub) Drop support to python 3.4 asyncio.coroutine (aiohttp doesn't support python it anymore)
    • Fix aiohttp stub to work with aiohttp client (thanks @stj)
    • Fix aiohttp stub to accept content type passed
    • Improve docs (thanks @adamchainz)
    Source code(tar.gz)
    Source code(zip)
  • v1.13.0(Jul 13, 2018)

    • Fix support to latest aiohttp version (3.3.2).
    • Fix content-type bug in aiohttp stub.
    • Properly save URL with query params properly when using aiohttp.
    Source code(tar.gz)
    Source code(zip)
  • v1.12.0(May 21, 2018)

    • Fix support to latest aiohttp version (3.2.1)
    • Adapted setup to PEP508
    • Support binary responses on aiohttp
    • Dropped support for EOL python versions (2.6 and 3.3)
    Source code(tar.gz)
    Source code(zip)
  • v1.11.1(May 28, 2017)

  • v1.11.0(May 2, 2017)

    Allow injection of persistence methods + bugfixes (thanks @j-funk and @IvanMalison) Support python 3.6 + CI tests (thanks @derekbekoe and @graingert) Support pytest-asyncio coroutines (thanks @graingert)

    Source code(tar.gz)
    Source code(zip)
  • v1.10.5(Jan 12, 2017)

    • Added a fix to httplib2 (thanks @carlosds730)
    • Fix an issue with aiohttp (thanks @madninja)
    • Add missing requirement yarl (thanks @lamenezes),
    • Remove duplicate mock triple (thanks @FooBarQuaxx)
    Source code(tar.gz)
    Source code(zip)
  • v1.10.1(Sep 12, 2016)

  • v1.10.0(Aug 14, 2016)

  • v1.9.0(Jul 16, 2016)

    • Add support for boto3 (thanks @desdm, @foorbarna).
    • Fix deepcopy issue for response headers when decode_compressed_response is enabled (thanks @nickdirienzo)
    Source code(tar.gz)
    Source code(zip)
  • v1.7.3(Aug 24, 2015)

    [#188] additional_matchers kwarg on use_casstte. [#191] Actually support passing multiple before_record_request functions (thanks @agriffis).

    Source code(tar.gz)
    Source code(zip)
  • v1.7.2(Aug 19, 2015)

  • v1.7.1(Aug 12, 2015)

  • v1.6.1(Jul 15, 2015)

    [#169] Support conditional requirements in old versions of pip, Fix RST parse errors generated by pandoc, [Tornado] Fix unsupported features exception not being raised, [#166] content-aware body matcher.

    Source code(tar.gz)
    Source code(zip)
  • v1.6.0(Jul 3, 2015)

    [#120] Tornado support (thanks @abhinav), [#147] packaging fixes (thanks @graingert), [#158] allow filtering post params in requests (thanks @MrJohz), [#140] add xmlrpclib support (thanks @Diaoul).

    Source code(tar.gz)
    Source code(zip)
  • v1.5.2(May 15, 2015)

Owner
Kevin McCarthy
Kevin McCarthy
A pytest plugin, that enables you to test your code that relies on a running PostgreSQL Database

This is a pytest plugin, that enables you to test your code that relies on a running PostgreSQL Database. It allows you to specify fixtures for PostgreSQL process and client.

Clearcode 252 Dec 21, 2022
Testing Calculations in Python, using OOP (Object-Oriented Programming)

Testing Calculations in Python, using OOP (Object-Oriented Programming) Create environment with venv python3 -m venv venv Activate environment . venv

William Koller 1 Nov 11, 2021
Set your Dynaconf environment to testing when running pytest

pytest-dynaconf Set your Dynaconf environment to testing when running pytest. Installation You can install "pytest-dynaconf" via pip from PyPI: $ pip

David Baumgold 3 Mar 11, 2022
Repository for JIDA SNP Browser Web Application: Local Deployment

JIDA JIDA is a web application that retrieves SNP information for a genomic region of interest in Homo sapiens and calculates specific summary statist

3 Mar 03, 2022
Django test runner using nose

django-nose django-nose provides all the goodness of nose in your Django tests, like: Testing just your apps by default, not all the standard ones tha

Jazzband 880 Dec 15, 2022
splinter - python test framework for web applications

splinter - python tool for testing web applications splinter is an open source tool for testing web applications using Python. It lets you automate br

Cobra Team 2.6k Dec 27, 2022
Photostudio是一款能进行自动化检测网页存活并实时给网页拍照的工具,通过调用Fofa/Zoomeye/360qua/shodan等 Api快速准确查询资产并进行网页截图,从而实施进一步的信息筛查。

Photostudio-红队快速爬取网页快照工具 一、简介: 正如其名:这是一款能进行自动化检测,实时给网页拍照的工具 信息收集要求所收集到的信息要真实可靠。 当然,这个原则是信息收集工作的最基本的要求。为达到这样的要求,信息收集者就必须对收集到的信息反复核实,不断检验,力求把误差减少到最低限度。我

s7ck Team 41 Dec 11, 2022
A test fixtures replacement for Python

factory_boy factory_boy is a fixtures replacement based on thoughtbot's factory_bot. As a fixtures replacement tool, it aims to replace static, hard t

FactoryBoy project 3k Jan 05, 2023
Ab testing - The using AB test to test of difference of conversion rate

Facebook recently introduced a new type of offer that is an alternative to the current type of bidding called maximum bidding he introduced average bidding.

5 Nov 21, 2022
A collection of testing examples using pytest and many other libreris

Effective testing with Python This project was created for PyConEs 2021 Check out the test samples at tests Check out the slides at slides (markdown o

Héctor Canto 10 Oct 23, 2022
Avocado is a set of tools and libraries to help with automated testing.

Welcome to Avocado Avocado is a set of tools and libraries to help with automated testing. One can call it a test framework with benefits. Native test

Ana Guerrero Lopez 1 Nov 19, 2021
tidevice can be used to communicate with iPhone device

tidevice can be used to communicate with iPhone device

Alibaba 1.8k Jan 08, 2023
:game_die: Pytest plugin to randomly order tests and control random.seed

pytest-randomly Pytest plugin to randomly order tests and control random.seed. Features All of these features are on by default but can be disabled wi

pytest-dev 471 Dec 30, 2022
FakeDataGen is a Full Valid Fake Data Generator.

FakeDataGen is a Full Valid Fake Data Generator. This tool helps you to create fake accounts (in Spanish format) with fully valid data. Within this in

Joel GM 64 Dec 12, 2022
Fi - A simple Python 3.9+ command-line application for managing Fidelity portfolios

fi fi is a simple Python 3.9+ command-line application for managing Fidelity por

Darik Harter 2 Feb 26, 2022
Python Projects - Few Python projects with Testing using Pytest

Python_Projects Few Python projects : Fast_API_Docker_PyTest- Just a simple auto

Tal Mogendorff 1 Jan 22, 2022
A pytest plugin to skip `@pytest.mark.slow` tests by default.

pytest-skip-slow A pytest plugin to skip @pytest.mark.slow tests by default. Include the slow tests with --slow. Installation $ pip install pytest-ski

Brian Okken 19 Jan 04, 2023
Selenium Page Object Model with Python

Page-object-model (POM) is a pattern that you can apply it to develop efficient automation framework.

Mohammad Ifran Uddin 1 Nov 29, 2021
FFPuppet is a Python module that automates browser process related tasks to aid in fuzzing

FFPuppet FFPuppet is a Python module that automates browser process related tasks to aid in fuzzing. Happy bug hunting! Are you fuzzing the browser? G

Mozilla Fuzzing Security 24 Oct 25, 2022
Asyncio http mocking. Similar to the responses library used for 'requests'

aresponses an asyncio testing server for mocking external services Features Fast mocks using actual network connections allows mocking some types of n

93 Nov 16, 2022