mcustiel / codeception-wiremock-extension
Codeception 的 WireMock 扩展
Requires
- php: >=5.4
- codeception/codeception: ^2.0.0
- wiremock-php/wiremock-php: ^1.43
Requires (Dev)
- codeception/codeception: ^2.1
- guzzlehttp/guzzle: >=4.0 <7.0
- pdepend/pdepend: ^2.0.6
- phing/phing: ^2.12.0
- phpdocumentor/phpdocumentor: ^2.8.5
- phploc/phploc: ^2.1.1
- phpmd/phpmd: ^2.3.2
- sebastian/phpcpd: ^2.0.2
- squizlabs/php_codesniffer: ^2.3.4
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 } }