cloudpack/rorschach

This package is abandoned and no longer maintained. No replacement package was suggested.

WebAPI Test Library

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とは

Install

composer require --dev cloudpack/rorschach

Usage

Basic

./vendor/bin/rorschach inspect

Options

saikou

普通にテストした場合、 finished. という味気ないメッセージが流れます。 少しでもあなたとの距離を縮める為に最高のオプションを用意いたしました。 --saikou-s をつけて是非お試しください。

bind

Yaml内に、 {{ }} ブラケットで囲んだ変数を記述することで、外部から値を注入することができる。

注入する方法は2つ

  1. --bind を使ってJSONにて指定する。(複数指定可能)
--bind='{"env": "prod"}'
--bind='{"env": "prod"}' --bind='{"api-token": "YOURTOKEN"}'
  1. pre-requestsのbinding構文を使う
bind:
  api-token: response.data.param

上記のようにすることで、以下のレスポンスの SOME PARAMETERapi-token としてbindされる

{
  "response": {
    "data": {
      "param": "SOME PARAMETER"
    }
  }
}

file

デフォルトでは、プロジェクトディレクトリの test*.yml すべてを対象とする。 特定ファイル指定をしたい場合はコマンドライン引数で指定することが可能。

--file='test/test-api.yml'

plugin機能ついて

  • pre-requestで実行したAPIのレスポンスをフックして任意のコードを実行し、レスポンスを返すようにできる
  • venderディレクトリやtestsディレクトリと同階層に plugins という名前でディレクトリを作成し、その中にphpファイルを設置する
    • 実行時にpluginsディレクトリ内のphpファイルを読み込む為、関数を定義しyamlでは after-function というキーを設定することでフックすることができる
    • 呼び出された関数は Response Object を引数に受け取るので、それを元に関数を作成
    • e.g.
$ 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
...
  • この機能を利用することにより、次のようなことが可能になる
    • レスポンスが暗号化されているため復号化したり...
    • 別の固定値に書き換えたり...
    • etc ...

Yaml Sample

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