支持多種服務 mock 的工具 OpenMock

1 推薦理由

當項目依賴比較多的其他服務,在測試時,通常連接是這些服務的 test 環境,但是這樣做第一 無法保證被依賴服務用例的完備性,第二 在實際測試過程中可能會遇到比較多費時費力的聯調問題。本次推薦的 openmock 工具,通過 mock 的手段,可以簡化此類項目的測試過程。

2 功能介紹

openmock 支持通過 yaml 文件,配置 HTTP、gRPC、Kafka、AMQP (e.g. RabbitMQ) 等協議的 mock 服務。

3 使用指南

3.1 安裝

下載代碼,並進入目錄:

$ git clone git@github.com:checkr/openmock.git
$ cd openmock

使用 docker 安裝:

$ docker run -it -p 9999:9999 -v $(pwd)/demo_templates:/data/templates checkr/openmock

$ docker-compose up

檢查是否安裝成功:

$ curl localhost:9999/ping

3.2 配置示例

openmock 的配置文件可以分成 4 大部分:

  1. Schema: openmock 可以配置多個行爲,每個行爲通過 key 和 kind 來表示;

  2. Except: 用來定義協議類型(HTTP、gRPC、Kafka、AMQP),以及觸發當前行爲的條件;

  3. Action: 用來定義當前行爲的執行結果;

  4. Template: 用來定義和組裝響應 payload。

下面是 HTTP mock server 的配置示例:

# 這裏是 Template
- key: http-request-template
  kind: Template
  template: >
    { "http_path""{{.HTTPPath}}""http_headers""{{.HTTPHeader}}" }
# 這裏也是Template
- key: color-template
  kind: Template
  template: >
    { "color""{{.color}}" }

# 這裏是Schema
- key: teapot
  kind: AbstractBehavior
# 這裏Except
  expect:
    http:
      method: GET
      path: /teapot
# 這裏Action
  actions:
    - reply_http:
        status_code: 418
        body: >
  # 這裏使用了Template
          {
            "request-info"{{ template "http-request-template" . }},
            "teapot-info"{{ template "color-template" .Values }}
          }

- key: purple-teapot
  kind: Behavior
  extend: teapot
  values:
    color: purple

測試一下,可以看到如下結果:

$ curl localhost:9999/teapot
{"request-info":{"http_path":"/teapot","http_headers":""},"teapot-info":{"color":"purple"}}

更多示例請參考:

https://github.com/checkr/openmock/tree/master/demo_templates

4 總結

openmock 通過 yaml 文件可以實現快速 mock 服務,並且可以支持多種協議,比如 HTTP、gRPC、Kafka、AMQP 等。在項目測試時,可以試試使用 openmock,看看能否提高項目的測試效率。

參考資料

https://github.com/checkr/openmock

本文由 Readfog 進行 AMP 轉碼,版權歸原作者所有。
來源https://mp.weixin.qq.com/s/Sg6xzSh3ni3qV_CY9rWUGg