mcustiel / phiremock-client
用于与 Phiremock 服务器通信的客户端库
Requires
- php: ^7.2|^8.0
- ext-json: *
- mcustiel/phiremock-common: ^1.0
- psr/http-client: ^1.0
Requires (Dev)
- codeception/codeception: ^4.0
- codeception/module-asserts: ^1.0
- codeception/module-phpbrowser: ^1.0
- codeception/module-rest: ^1.0
- guzzlehttp/guzzle: ^6.0
- mcustiel/phiremock-server: ^1.0
- phpunit/phpunit: ~8.0
- symfony/process: ^3.0|^4.0|^5.0
Suggests
- guzzlehttp/guzzle: Provides default client for http requests execution.
This package is auto-updated.
Last update: 2024-08-24 23:25:45 UTC
README
Phiremock 客户端提供了一个优雅的 API 来与 Phiremock 服务器 交互,允许开发者通过流畅的接口设置期望、清除状态、场景等。
安装
通过 composer 默认安装
此项目已在 packagist 上发布,因此您只需将其添加到 composer.json 中的依赖项
"require-dev": { "mcustiel/phiremock-client": "^1.0", "guzzlehttp/guzzle": "^6.0" }
Phiremock 客户端需要 guzzle 客户端 v6 才能工作。可以避免此依赖项,并可以选择任何 psr18 兼容的 http 客户端,并覆盖 Phiremock 客户端的工厂来提供它。
覆盖工厂类
如果提供 guzzle 客户端 v6 作为依赖项,则不需要额外的配置。如果您想使用不同的 http 客户端,则需要将其作为 psr18 兼容的客户端提供给 phiremock 服务器。例如,如果您想使用 guzzle 客户端 v7,则需要扩展 phiremock 服务器的工厂类
<?php namespace My\Namespace; use Mcustiel\Phiremock\Client\Factory; use GuzzleHttp; use Psr\Http\Client\ClientInterface; class FactoryWithGuzzle7 extends Factory { public function createRemoteConnection(): ClientInterface { return new GuzzleHttp\Client(); } }
然后使用此工厂类创建 Phiremock 客户端外观。
使用
创建客户端外观
通过从工厂对象请求它来创建客户端外观
<?php use Mcustiel\Phiremock\Client\Connection\Host; use Mcustiel\Phiremock\Client\Connection\Port; $phiremockClient = Factory::createDefault()->createPhiremockClient(new Host('my.phiremock.host'), new Port('8080'));
现在您可以使用 $phiremockClient
访问 Phiremock 服务器所有配置选项。
注意:Phiremock 默认将监听 http(非安全)连接。
连接到安全服务器
如果 phiremock-server 监听 https 连接,则可以传递要使用的方案作为第三个参数
<?php use Mcustiel\Phiremock\Client\Connection\Host; use Mcustiel\Phiremock\Client\Connection\Port; use Mcustiel\Phiremock\Client\Connection\Scheme; $phiremockClient = Factory::createDefault()->createPhiremockClient(new Host('my.phiremock.host'), new Port('8443'), Scheme::createHttps());
期望创建
<?php use Mcustiel\Phiremock\Client\Phiremock; use Mcustiel\Phiremock\Client\Utils\A; use Mcustiel\Phiremock\Client\Utils\Is; use Mcustiel\Phiremock\Client\Utils\Respond; use Mcustiel\Phiremock\Domain\Options\Priority; // ... $phiremockClient->createExpectation( Phiremock::on( A::getRequest() ->andUrl(Is::equalTo('/potato/tomato')) ->andBody(Is::containing('42')) ->andHeader('Accept', Is::equalTo('application/banana')) ->andFormField('name', Is::equalTo('potato')) )->then( Respond::withStatusCode(418) ->andBody('Is the answer to the Ultimate Question of Life, The Universe, and Everything') ->andHeader('Content-Type', 'application/banana') )->setPriority(new Priority(5)) );
还提供了一个更简洁/更短的创建期望的方式,通过使用辅助函数
<?php use Mcustiel\Phiremock\Client\Phiremock; use function Mcustiel\Phiremock\Client\contains; use function Mcustiel\Phiremock\Client\getRequest; use function Mcustiel\Phiremock\Client\isEqualTo; use function Mcustiel\Phiremock\Client\request; use function Mcustiel\Phiremock\Client\respond; use function Mcustiel\Phiremock\Client\on; use Mcustiel\Phiremock\Domain\Options\Priority; // ... $phiremockClient->createExpectation( on( getRequest('/potato/tomato') ->andBody(contains('42')) ->andHeader('Accept', isEqualTo('application/banana')) ->andFormField('name', isEqualTo('potato')) )->then( respond(418) ->andBody('Is the answer to the Ultimate Question of Life, The Universe, and Everything') ->andHeader('Content-Type', 'application/banana') )->setPriority(new Priority(5)) );
此代码与上一个示例中的代码等效。
您可以在以下位置查看快捷键列表: https://github.com/mcustiel/phiremock-client/blob/master/src/helper_functions.php
列出创建的期望
listExpecatations
方法返回一个包含 Phiremock 服务器检查的所有当前期望的 Expectation 类实例数组。
<?php $expectations = $phiremockClient->listExpectations();
清除所有配置的期望
这将删除所有检查的期望,导致 Phiremock 服务器对每个非 phiremock-api 请求返回 404。
<?php $phiremockClient->clearExpectations();
列出 Phiremock 收到的请求
使用此方法获取 Phiremock 服务器接收到的 Psr 兼容请求列表。
列出所有请求
<?php $phiremockClient->listExecutions();
列出匹配条件的请求
<?php $phiremockClient->listExecutions(getRequest()->andUrl(isEqualTo('/test'));
注意:Phiremock 的 API 请求不包括在此列表中。
计算 Phiremock 收到的请求数量
提供大于等于 0 的整数,表示 Phiremock 服务器接收到的请求数量。
计算所有请求
<?php $phiremockClient->countExecutions();
计算匹配条件的请求
<?php $phiremockClient->countExecutions(getRequest()->andUrl(isEqualTo('/test'));
注意:Phiremock 的 API 请求不包括在此列表中。
清除存储的请求
这将清理存储在 Phiremock 服务器上的请求列表,并将计数器重置为 0。
<?php $phiremockClient->clearRequests();
设置场景状态
在 Phiremock 服务器上强制场景具有特定的状态。
<?php $phiremockClient->setScenarioState('myScenario', 'loginExecuted');
重置场景状态
将所有场景重置为初始状态(Scenario.START)。
<?php $phiremockClient->resetScenarios();
重置所有
将 Phiremock 服务器设置为初始状态。这将导致 Phiremock 服务器
- 清除所有期望。
- 清除存储的请求。
- 重置所有场景。
- 重新加载存储在文件中的所有期望。
<?php $phiremockClient->reset();
附录
另请参阅
- Phiremock 服务器: https://github.com/mcustiel/phiremock-server
- Phiremock Codeception 模块: https://github.com/mcustiel/phiremock-codeception-module
- 测试中的示例: https://github.com/mcustiel/phiremock-client/tree/master/tests/acceptance/api
贡献
只需提交一个拉取请求。别忘了先运行测试和php-cs-fixer,并编写文档。
感谢
- Denis Rudoi (@drudoi)
- Henrik Schmidt (@mrIncompetent)
- Nils Gajsek (@linslin)
- Florian Levis (@Gounlaf)
以及所有提交了拉取请求的人。