zeeloengineering / zeelo-php-vcr
记录您的测试套件的HTTP交互,并在未来的测试运行中回放它们,以实现快速、确定性和准确的测试。
1.5.0
2019-04-17 09:56 UTC
Requires
- ext-curl: *
- beberlei/assert: ^2.0
- symfony/event-dispatcher: ^2.4|^3.0|^4.0
- symfony/yaml: ~2.1|^3.0|^4.0
Requires (Dev)
- lapistano/proxy-object: dev-master#d7184a479f502d5a0f96d0bae73566dbb498da8f
- mikey179/vfsstream: ^1.2
- phpunit/phpunit: ^4.8|^5.0
- sebastian/version: ^1.0.3|^2.0
This package is not auto-updated.
Last update: 2024-09-27 11:42:27 UTC
README
这是将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
- 使用streamWrapper进行所有操作:fopen(),fread(),file_get_contents()等,无需任何修改(除了
- 同一请求可以在不同的测试中获得不同的响应——只需使用不同的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依赖于
- PHP 5.3+
- Curl扩展
- HTTP库Guzzle
- symfony/yaml
- beberlei/assert
Composer会安装所有依赖项,除了像curl这样的扩展。
运行测试
为了运行所有测试,您需要使用composer获取开发依赖项
composer install composer test
更改日志
更改日志已移动到PHP-VCR发布页面。
版权
版权所有(c)2013-2016 Adrian Philipp。在MIT许可条款下发布。有关详细信息,请参阅LICENSE。贡献者