mcustiel/codeception-wiremock-extension

此包已被弃用且不再维护。未建议替代包。

Codeception 的 WireMock 扩展

1.1.0 2020-01-21 09:13 UTC

This package is auto-updated.

Last update: 2023-07-07 14:27:34 UTC


README

此 Codeception 扩展允许开发人员和测试人员在运行 codeception 测试时使用 WireMock 模拟外部服务。

codeception-wiremock-extension 可以连接到一个已经运行的 WireMock 实例,也可以自动运行一个本地的独立实例。此外,它还能够下载你偏好的 WireMock 版本并运行它。测试完成后,它将关闭连接并将 WireMock 服务关闭(如果它启动了)。

另请参阅

注意

如果你需要一个具有与 WireMock 提供的功能相似且 100% 基于 PHP 的应用程序,请尝试 Phiremock:[Phiremock](https://github.com/mcustiel/phiremock),它也提供了一个很好的 [codeception 扩展](https://github.com/mcustiel/phiremock-codeception-extension)。

安装

Composer

从控制台

composer require --dev mcustiel/codeception-wiremock-extension

该项目已在 Packagist 上发布,因此你只需将其添加到 composer.json 中的依赖项即可。

    "require-dev": {
        // ...
        "mcustiel/codeception-wiremock-extension": "*"
    }

如果你想直接访问此存储库,请在 composer.json 中添加以下内容。

{
    "repositories": [
        {
            "type": "vcs",
            "url": "https://github.com/mcustiel/codeception-wiremock-extension"
        }
    ],
    "require-dev": {
        "mcustiel/codeception-wiremock-extension": "dev-master"
    }
}

或者,只需下载发布版本并将其包含到你的路径中。

配置示例

模块

该模块允许你连接到一个 WireMock 实例,它可以是扩展运行的,也可以是已经运行的。

# acceptance.suite.yml
modules:
    enabled:
        - WireMock:
            host: my.wiremock.host # defaults to 127.0.0.1
            port: 80 # defaults to 8080

扩展

默认配置

此配置将下载 WireMock 版本 1.57 并在端口 8080 上运行,将日志写入 codeception 测试 _output 目录。

# codeception.yml
extensions:
    enabled:
        - Codeception\Extension\WireMock    

连接到一个正在运行的 WireMock 实例

# codeception.yml
extensions:
    enabled:
        - Codeception\Extension\WireMock
    config:     
        Codeception\Extension\WireMock:
            host: my.wiremock.server
            port: 8080

启动一个本地的 WireMock 实例并用给定的命令行参数运行它

# codeception.yml
extensions:
    enabled:
        - Codeception\Extension\WireMock
    config:     
        Codeception\Extension\WireMock:
            jar-path: /opt/wiremock/bin/wiremock-standalone.jar
            port: 18080
            https-port: 18443
            verbose: true
            root-dir: /opt/wiremock/root
            

下载一个 WireMock 实例并用给定的命令行参数运行它

# codeception.yml
extensions:
    enabled:
        - Codeception\Extension\WireMock
    config:     
        Codeception\Extension\WireMock:
            download-version: 1.57
            port: 18080
            https-port: 18443
            verbose: true
            root-dir: /opt/wiremock/root
            logs-path: /var/log/wiremock 

如何使用

准备你的应用程序

首先,配置您的应用程序,以便在测试时用 WireMock 替换其外部服务。例如,如果您向位于 http://your.rest.interface 的 REST 服务发送一些请求,请将配置中的该 URL 替换为 WireMock 运行的 URL,例如:http://localhost:8080/rest_interface

编写您的测试

// YourCest.php
class YourCest extends \Codeception\TestCase\Test
{
    public function _after(\AcceptanceTester $I)
    {
        $I->cleanAllPreviousRequestsToWireMock();
    }

    // tests
    public function tryToTest(\AcceptanceTester $I)
    {
        $I->expectRequestToWireMock(
            WireMock::get(WireMock::urlEqualTo('/some/url'))
                ->willReturn(WireMock::aResponse()
                ->withHeader('Content-Type', 'text/plain')
                ->withBody('Hello world!'))
        );
        // Here you should execute your application in a way it requests wiremock. I do this directly to show it. 
        $response = file_get_contents('http://localhost:18080/some/url');
        
        $I->assertEquals('Hello world!', $response);
        $I->receivedRequestInWireMock(
            WireMock::getRequestedFor(WireMock::urlEqualTo('/some/url'))
        );
    }
    
    // Also, you can access wiremock-php library directly
    public function moreComplexTest()
    {
        $wiremockPhp = Codeception\Extension\WiremockConnection::get();
        // Now you can use wiremock-php library
    }
}