zeeloengineering/zeelo-php-vcr

记录您的测试套件的HTTP交互,并在未来的测试运行中回放它们,以实现快速、确定性和准确的测试。

1.5.0 2019-04-17 09:56 UTC

README

PHP-VCR

Build Status Code Coverage Scrutinizer Quality Score

这是将VCR Ruby库移植到PHP的示例。

记录您的测试套件的HTTP交互,并在未来的测试运行中回放它们,以实现快速、确定性和准确的测试。有关详细信息,请参阅php-vcr网站

免责声明:在PHP中执行此操作不如支持monkey patching的编程语言(例如Ruby)简单——此项目尚未经过完全测试,因此请自行承担风险!

功能

  • 自动记录和回放您的HTTP(s)交互,无需进行大量设置/配置代码。
  • 支持常见的http函数和扩展
    • 使用streamWrapper进行所有操作:fopen(),fread(),file_get_contents()等,无需任何修改(除了$http_response_header,见#96)
    • 通过在您的tests/bootstrap.php中添加\VCR\VCR::turnOn();来支持SoapClient
    • 通过在您的tests/bootstrap.php中添加\VCR\VCR::turnOn();来支持curl
  • 同一请求可以在不同的测试中获得不同的响应——只需使用不同的cassette即可。
  • 通过设置记录模式禁用您未明确允许的所有HTTP请求
  • 根据HTTP方法、URI、主机、路径、正文和头部配置请求匹配,或者您可以轻松实现自定义请求匹配器以处理任何需求。
  • 记录的请求和响应存储在磁盘上的序列化格式中,您可以选择自己的格式(目前内置YAML和JSON,您可以轻松实现自己的自定义序列化器)
  • 支持PHPUnit注解。

使用示例

使用静态方法调用

class VCRTest extends \PHPUnit_Framework_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');
    }
}

您可以通过使用phpunit-testlistener-vcr在PHPUnit中使用注解

class VCRTest extends \PHPUnit_Framework_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.
    }
}

安装

只需运行以下命令

$ composer require --dev php-vcr/php-vcr

依赖项

PHP-VCR依赖于

Composer会安装所有依赖项,除了像curl这样的扩展。

运行测试

为了运行所有测试,您需要使用composer获取开发依赖项

composer install
composer test

更改日志

更改日志已移动到PHP-VCR发布页面

旧更改日志条目

版权

版权所有(c)2013-2016 Adrian Philipp。在MIT许可条款下发布。有关详细信息,请参阅LICENSE。贡献者