https://github.com/php-vcr/php-vcr
  
  
    Record your test suite's HTTP interactions and replay them during future test runs for fast, deterministic, accurate tests. 
    https://github.com/php-vcr/php-vcr
  
accurate-tests api-test api-testing deterministic guzzle-services guzzle-test php php-vcr phpunit replay rest-test restful-test soap-api soap-api-test soap-test test-automation test-webservices vcr webservice webservices
        Last synced: 6 months ago 
        JSON representation
    
Record your test suite's HTTP interactions and replay them during future test runs for fast, deterministic, accurate tests.
- Host: GitHub
 - URL: https://github.com/php-vcr/php-vcr
 - Owner: php-vcr
 - License: mit
 - Created: 2013-02-17T04:13:19.000Z (over 12 years ago)
 - Default Branch: master
 - Last Pushed: 2024-07-15T13:29:34.000Z (over 1 year ago)
 - Last Synced: 2024-10-29T15:24:04.628Z (about 1 year ago)
 - Topics: accurate-tests, api-test, api-testing, deterministic, guzzle-services, guzzle-test, php, php-vcr, phpunit, replay, rest-test, restful-test, soap-api, soap-api-test, soap-test, test-automation, test-webservices, vcr, webservice, webservices
 - Language: PHP
 - Homepage: http://php-vcr.github.io
 - Size: 1.15 MB
 - Stars: 1,169
 - Watchers: 29
 - Forks: 201
 - Open Issues: 82
 - 
            Metadata Files:
            
- Readme: README.md
 - License: LICENSE.md
 
 
Awesome Lists containing this project
- web-stuff - PHP VCR - record your HTTP requests and reply them as tests. (PHP)
 
README
          
[](https://github.com/php-vcr/php-vcr/actions/workflows/continuous%20integration.yml)
[](https://scrutinizer-ci.com/g/php-vcr/php-vcr/)
[](https://scrutinizer-ci.com/g/php-vcr/php-vcr/)
This is a port of the [VCR](http://github.com/vcr/vcr) Ruby library to PHP.
Record your test suite's HTTP interactions and replay them during future test runs for fast, deterministic, accurate tests. A bit of documentation can be found on the [php-vcr website](http://php-vcr.github.io).
Disclaimer: Doing this in PHP is not as easy as in programming languages which support monkey patching (I'm looking at you, Ruby)
## Features
* Automatically records and replays your HTTP(s) interactions with minimal setup/configuration code.
* Supports common http functions and extensions
  * everything using [streamWrapper](http://php.net/manual/en/class.streamwrapper.php): fopen(), fread(), file_get_contents(), ... without any modification (except `$http_response_header` see [#96](https://github.com/php-vcr/php-vcr/issues/96))
  * [SoapClient](http://www.php.net/manual/en/soapclient.soapclient.php) by adding `\VCR\VCR::turnOn();` in your `tests/bootstrap.php`
  * curl(), by adding `\VCR\VCR::turnOn();` in your `tests/bootstrap.php`
* The same request can receive different responses in different tests -- just use different cassettes.
* Disables all HTTP requests that you don't explicitly allow by [setting the record mode](http://php-vcr.github.io/documentation/configuration/)
* [Request matching](http://php-vcr.github.io/documentation/configuration/) is configurable based on HTTP method, URI, host, path, body and headers, or you can easily
  implement a custom request matcher to handle any need.
* The recorded requests and responses are stored on disk in a serialization format of your choice
  (currently YAML and JSON are built in, and you can easily implement your own custom serializer)
* Supports PHPUnit annotations.
## Usage example
Using static method calls:
``` php
class VCRTest extends TestCase
{
    public function testShouldInterceptStreamWrapper()
    {
        // After turning on the VCR will intercept all requests
        \VCR\VCR::turnOn();
        // Record requests and responses in cassette file 'example'
        \VCR\VCR::insertCassette('example');
        // Following request will be recorded once and replayed in future test runs
        $result = file_get_contents('http://example.com');
        $this->assertNotEmpty($result);
        // To stop recording requests, eject the cassette
        \VCR\VCR::eject();
        // Turn off VCR to stop intercepting requests
        \VCR\VCR::turnOff();
    }
    public function testShouldThrowExceptionIfNoCasettePresent()
    {
        $this->setExpectedException(
            'BadMethodCallException',
            "Invalid http request. No cassette inserted. Please make sure to insert "
            . "a cassette in your unit test using VCR::insertCassette('name');"
        );
        \VCR\VCR::turnOn();
        // If there is no cassette inserted, a request throws an exception
        file_get_contents('http://example.com');
    }
}
```
You can use annotations in PHPUnit by using [phpunit-testlistener-vcr](https://github.com/php-vcr/phpunit-testlistener-vcr):
``` php
class VCRTest extends TestCase
{
    /**
     * @vcr unittest_annotation_test
     */
    public function testInterceptsWithAnnotations()
    {
        // Requests are intercepted and stored into  tests/fixtures/unittest_annotation_test.
        $result = file_get_contents('http://google.com');
        $this->assertEquals('This is a annotation test dummy.', $result, 'Call was not intercepted (using annotations).');
        // VCR is automatically turned on and off.
    }
}
```
## Installation
Simply run the following command:
``` bash
$ composer require --dev php-vcr/php-vcr
```
## Dependencies
PHP-VCR depends on:
  * PHP 8
  * Curl extension
  * [symfony/event-dispatcher](https://github.com/symfony/event-dispatcher)
  * [symfony/yaml](https://github.com/symfony/yaml)
  * [beberlei/assert](https://github.com/beberlei/assert)
Composer installs all dependencies except extensions like curl.
## Run tests
In order to run all tests you need to get development dependencies using composer:
``` php
composer install
composer test
```
## Changelog
**The changelog has moved to the [PHP-VCR releases page](https://github.com/php-vcr/php-vcr/releases).**
[Old changelog entries](docs/old-changelog.md)
## Copyright
Copyright (c) 2013-2023 Adrian Philipp. Released under the terms of the MIT license. See LICENSE for details.
[Contributors](https://github.com/php-vcr/php-vcr/graphs/contributors)