cloudpack/rorschach

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

WebAPI 测试库

1.0.12 2017-10-03 06:02 UTC

This package is not auto-updated.

Last update: 2020-08-16 11:28:39 UTC


README

Rorschach 是什么

安装

composer require --dev cloudpack/rorschach

用法

基础

./vendor/bin/rorschach inspect

选项

saikou

通常测试时,会输出一个乏味的消息 finished.。为了拉近与您的距离,我们提供了一些最佳选项。请使用 --saikou-s 尝试。

绑定

通过在 YAML 中用方括号 {{ }} 包围变量来描述,可以从外部注入值。

有两种注入方法

  1. 使用 --bind 以 JSON 格式指定。(可多次指定)
--bind='{"env": "prod"}'
--bind='{"env": "prod"}' --bind='{"api-token": "YOURTOKEN"}'
  1. 使用 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 作为参数,因此可以基于此创建函数
    • 例如
$ 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