silkを使用したAPIのテスト自動化(ドキュメント駆動)Windows環境


go言語でAPIを実装した場合、REST APIテストをドキュメント駆動で行うにあたりその設定方法

APIのテストを自動化で行うにあたり、swaggerを使用していた為、当初はdreddで行うように進めていた。
ところが、dreddでswaggerを使用する所から、make all した場合、予期せぬ動作が起こりえた為
(swaggerの.gitkeepが消える)現象が起きた為、本来のAPIが動作しなくなる。
その為、swaggerを使用したテストは避けるべく、今回のsilkを使用することにした。

  

前提条件

1 既にgoで実装したAPIが存在すること
2 make allが実行できる環境であること

$ go get github.com/matryer/silk

$ make all

main.goと同じ階層に、test.silk.md ファイルを作成する

test.silk.md

# TEST API

## `GET /v1/project/1111`

Gets a personalised greeting.

===

* Status: `200`

{"id":22777}

テストするAPIを起動させておく

テスト実行

$ silk -silk.url="http://localhost:8080" test.silk.md

テストFAILした場合

silk: running 1 file(s)...
body expected:
{"id":22777}

actual:

{"id":22222}
--- FAIL: GET /v1/profiles/1326219617999257600
 test.silk.md:14 - body doesn't match
--- FAIL: silk (0.34s)
FAIL

*値が同じでも、FAILになる場合がある。これは改行コードが違うためにFAILとなっているので、一度改行コードを確認するとよい

テストPassした場合

silk: running 1 file(s)...
PASS

POST等の書き方は下記にあります。
https://github.com/matryer/silk

GETは良いがPOSTでcreated_Atなんかを取得する場合、created_Atのチェックを外す方法

POSTとなると、idのインクリメント等や、created_Atなどで答えの見えない値がある。
この場合、照合したいキーvalueのみを書いておき、idやcreated_Atなんかはkey,valueは書かないでおく。
但し、その際は、
json(strict)
を記載しておく。
```json(strict)
backtics の書き方がわからないので、こんな感じで書いておく。