0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

BashでAPIテスト自動化!?ローカル環境でもE2Eに近づけた話

Posted at

:cherry_blossom: はじめに

こんにちは!
以前、BashでE2Eテスト的なことを試みた話を書いたのですが、今回はその続編(というか応用編)になります!

前回の記事はこちら👇
👉 BashでE2Eテストっぽいことをやってみた話

今回の舞台:APIのまとめテストプロジェクト

某プロジェクト群(仮に「Aプロジェクト群」と呼びます)では、複数のAPI群が開発されています。
それらのAPIエンドポイントの疎通チェックや構成確認を手軽に行えるよう、
とある Bash + JSON + Redis で構成されたテストユーティリティが作られていました。
今回はそのユーティリティ(以下、API Test Shell)について紹介します!

目指したゴール

  • ローカル環境で、Redisキャッシュを考慮しながらAPIのレスポンス検証ができる
  • JSONファイルからテスト対象を切り替えられる(stg/prdなど)
  • CI/CDに載せなくても1コマンドで一通りの確認が済む
  • フロントエンドの疎通確認もAPIと一緒に実行し、サービス全体の整合性をチェック

つまり、「雑に壊れてないかをサッと見たい」ときにめちゃくちゃ便利なやつです。

ディレクトリ構成(ざっくり)

api-test/
├── config/
│   └── service-a/
│       ├── stg.json
│       └── prd.json
├── redis/
│   └── prepare_redis_cache.sh
├── helpers/
│   ├── api/
│   ├── front/
│   └── common.sh
├── execute.sh
└── Makefile
  • config/ 配下の JSON に、対象サービス・環境ごとのエンドポイント一覧が記載されています
  • redis/prepare_redis_cache.sh は内部的にキャッシュの操作を担います(ユーザーが直接叩くことは想定されていません)
  • execute.sh がメインのテストランナーで、API・フロント・Redisの一連のテストフローを一括実行します
  • Makefile を使えば make run などで楽に操作できます

Redisも考慮してる!?

このツールの特徴は、ただのAPI疎通確認ではない点です。
テストの各ステップでRedisキャッシュを細かく制御していることがポイント!

具体的には、

  • 各APIエンドポイントやフロントエンドのURLに対してアクセスする前に、関連するRedisキーのバックアップを実施
  • テストの実行中に変更されたRedisの状態をロールバックまたはクリアできるよう設計
  • 想定外の状態が検出された場合でも、環境を壊さずに即復元可能!

この制御は全て execute.sh 内部で行われるため、開発者は ただコマンドを叩くだけ でOK🙆‍♀️

Makefileでのお手軽実行

実際にテストを実行する際には

make run
# → ./execute.sh service-a

とか、

テストの結果を分析するなら

make analyze
# → ./execute.sh service-a analyze

のように、複雑な構成のわりに操作感はスッキリしています。
こういうの、個人開発でも見習いたい……!

フロントエンドの疎通チェックも自動で!

APIの確認だけでなく、フロントエンド側の動作確認もAPIテストとセットで実行されます

つまり make run を実行すると、以下の流れが自動で進みます👇

  1. エンドポイント単位でRedisキーをバックアップ
  2. APIに対するリクエスト送信&レスポンス検証
  3. フロントエンドの対象URLにアクセスし、ステータスや構成をチェック
  4. テスト成功時:キャッシュのクリーンアップ
  5. テスト失敗時:キャッシュのロールバック

すべてが統一されたログフォーマットで出力されるため、ログを見て「どこで失敗したか」がすぐ分かるのも地味に嬉しいポイントです!

工夫ポイント

  • set -euo pipefail でBashらしい堅牢性確保
  • ログを log.sh 経由で出力し、ステージごとの状況を追いやすく
  • Redisへのバルク操作は --pipe モードで高速化+並列制御(xargs -P)なども検討

実装済みの強み

すでに以下のような実装も進んでおり、安定運用が見込める状態になっています。

  • Redisクラスタ環境への対応済み
  • 各ステージにおける統一的なログ出力
  • Makefile経由の直感的な操作体系
  • APIとフロントエンドの疎通確認をまとめて実行
  • 各エンドポイント・URLごとにRedisキャッシュの自動バックアップ・ロールバックに対応!

Bashとは思えないほど整った構成で、チーム内での開発効率も向上しました!

最後に

この記事が役に立ったら、ぜひ「LGTM」してくれると嬉しいです! 💖
では、また次回の記事でお会いしましょう👋

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?