cloudpack / rorschach
此包已弃用,不再维护。未建议替代包。
WebAPI 测试库
1.0.12
2017-10-03 06:02 UTC
Requires
- php: >=5.5
- guzzlehttp/guzzle: ^6.2
- symfony/console: ^3.1
- symfony/filesystem: ^3.1
- symfony/finder: ^3.1
- symfony/yaml: ^3.1
- vlucas/phpdotenv: ^2.4
README
Rorschach 是什么
安装
composer require --dev cloudpack/rorschach
用法
基础
./vendor/bin/rorschach inspect
选项
saikou
通常测试时,会输出一个乏味的消息 finished.
。为了拉近与您的距离,我们提供了一些最佳选项。请使用 --saikou
或 -s
尝试。
绑定
通过在 YAML 中用方括号 {{ }}
包围变量来描述,可以从外部注入值。
有两种注入方法
- 使用
--bind
以 JSON 格式指定。(可多次指定)
--bind='{"env": "prod"}'
--bind='{"env": "prod"}' --bind='{"api-token": "YOURTOKEN"}'
- 使用 pre-requests 的绑定结构
bind: api-token: response.data.param
如下所示,将以下响应的 SOME PARAMETER
绑定为 api-token
{ "response": { "data": { "param": "SOME PARAMETER" } } }
文件
默认情况下,将处理项目目录中的所有 test*.yml
。如果您想指定特定文件,可以通过命令行参数进行指定。
--file='test/test-api.yml'
插件功能
- 在 pre-request 中执行 API 的响应,并执行任意代码以返回响应
- 在 vender 目录或 tests 目录同一级别下创建名为
plugins
的目录,并在其中放置 PHP 文件- 为了在执行时读取 plugins 目录内的 PHP 文件,定义函数并在 YAML 中设置
after-function
键以进行钩子操作 - 被调用的函数将接受 Response Object 作为参数,因此可以基于此创建函数
- 例如
- 为了在执行时读取 plugins 目录内的 PHP 文件,定义函数并在 YAML 中设置
$ tree .
.
├── README.md
├── composer.json
├── composer.lock
├── plugins
│ └── test_function.php
├── tests
│ ├── test-beta.yml
....
$ cat plugins/test_function.php
<?php
/**
* toTest()
* @Param $Response
*/
function toTest($Response) {
return json_decode((string)$Response->getBody(), true);
}
$ cat ./tests/test-beta.yml
....
pre-request:
-
url: /login
method: POST
option:
headers:
...
json:
...
bind:
api-token: test
after-function: toTest
...
- 通过利用此功能,可以实现以下操作
- 响应被加密,因此需要解密...
- 将其替换为其他固定值...
- 等等...
YAML 示例
base: https://{{ env }}.example.com option: headers: x-api-key: YOUR-SECRET-KEY ContentType: application/json allow_redirects: false pre-request: - url: /auth method: GET option: headers: x-header: HEADER body: name: shinichi password: p@ssw0rd bind: api-token: response.data.param request: - url: /users/1 method: GET option: headers: api-token: {{ api-token }} body: exclude: false expect: code: 200 has: - id - user.name - user.address..tel01 type: id: integer|nullable name: string value: id: 123 name: shinichi - url: /items method: GET expect: code: 302 redirect: https://prod.example.com