go-http-replay: VCRみたいに実際のHTTPレスポンスを保存してテストで再利用できるライブラリ

を作りました。

github.com

外部HTTPリクエストをスタブするTest::WWW::StubというPerlのモジュールや、スタブするレスポンスをあらかじめ記録しておいた実際のレスポンスから再現するVCRというRubyのライブラリなどにインスパイアされました。

使い方はこういうかんじ:

import (
    "net/http"
    "testing"

    httpreplay "github.com/aereal/go-http-replay"
)

func Test_http_lib(t *testing.T) {
    httpClient := &http.Client{
        Transport: httpreplay.NewReplayOrFetchTransport("./testdata", http.DefaultClient),
    }
    // httpClient will behave like the client that created from NewReplayTransport but DO actual request if local cache is missing.
}

ローカルにキャッシュが無い初回は実際にリクエストしそれを保存する、次回以降は保存されたレスポンスを再現するので実際にリクエストしない、といった振る舞いをします。

net/httpのAPIしか使っていないdependencies freeな実装なところがアピールしたいポイントです。

どうぞご利用ください!!!