mcustiel / phiremock-client

用于与 Phiremock 服务器通信的客户端库

v1.2.1 2022-05-14 13:47 UTC

README

Phiremock 客户端提供了一个优雅的 API 来与 Phiremock 服务器 交互,允许开发者通过流畅的接口设置期望、清除状态、场景等。

Packagist Version Build Status Scrutinizer Code Quality Packagist Downloads

安装

通过 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 服务器

  1. 清除所有期望。
  2. 清除存储的请求。
  3. 重置所有场景。
  4. 重新加载存储在文件中的所有期望。
<?php
$phiremockClient->reset();

附录

另请参阅

贡献

只需提交一个拉取请求。别忘了先运行测试和php-cs-fixer,并编写文档。

感谢

以及所有提交了拉取请求的