webサーバのaccess logから同じリクエストを作成してwebサーバをテストする

サービスの核となっているソフトウェアをアップグレードするならエラーになっていないか全URLを確認したい。
でも全パターンの網羅はめんどくさいし無理なので、
webサーバのログから同じリクエストを生成するgem作った。
rubygems には未アップロードでもう少しテストしてからリリースしたい気持ち。

https://github.com/jiikko/sugoi_http_request_tester

tester = SugoiHttpRequestTester.new(
  host: 'example.com',
  limit: 100,
  logs_path: 'logs/*',
  concurrency: 3,
)
tester.set_line_parse_block = ->(line){
  /({.*})/ =~ line
  json = JSON.parse($1)
  { method: json['mt'], user_agent: json['ua'], path: json['pt'] }
}
tester.import_logs
tester.run

ソースとなるログファイルは、アプリケーションによって違うので1行のログをhashに変換するコードは自分で書く必要がある。

#import_logs メソッドでソースのログファイルからリクエストリストを生成する。
UserAgentは細分化されているので、PC, スマホに正規化してリクエスト対象が重複しないようにしている。
並列実行できる。(ネットワークIOならGVLがアンロックされる)
正規化されたリクエストリストはエクスポート・インポートできる

いまはGETリクエストのみ。POST・PUTとかログイン必要があったりでやってない。今度やりたい