はじめに
こんにちは!😃
今回は APIのテストをシェルスクリプトで自動化 し、Redisキャッシュを考慮した検証フローを構築 した話を紹介します!
特に、ChatGPT を活用しながら、APIの検証手順を効率化し、環境ごとのテストを統一する方法 にフォーカスします!🚀✨
🎯 目指したこと
APIのテストを行う際、キャッシュの影響を排除し、環境ごとに適切な設定で検証を行うことが超重要!
そこで、以下の4つのポイントを実現することを目標にしました!
🌟 1. API検証手順の簡素化
- 検証前のRedisキャッシュ削除・バックアップを自動化し、手作業を減らす!
- 環境(local, stg, pre)ごとに適切なRedisサーバーを自動識別し、統一的に処理!
- APIの検証を一貫した手順で実行できるようにする!
🌟 2. 検証結果の正確性向上
- 既存のキャッシュを削除し、正しいレスポンスを得られるようにする!
- 意図したテスト条件のもとでAPIレスポンスを検証できるようにする!
🌟 3. 環境ごとの自動化
- 各環境(local, stg, pre)に適したAPIエンドポイント・Redisサーバーを自動特定し、適切に処理!
- 環境ごとのキャッシュ削除・バックアップを自動適用!
- サーバーごとに適切な
curl
コマンドを実行し、APIをテスト!
🌟 4. 検証の再現性と信頼性の向上
- 統一されたスクリプトを用いることで、チームメンバー間で一貫したテストが可能に!
- キャッシュクリア後のAPIレスポンスを常に正しく取得し、検証結果の信頼性を向上!
💡 実装した機能
今回の自動化では、以下の3つの機能を実装しました!🎉
1. Redisキャッシュ削除・バックアップ
- 環境(local, stg, pre)ごとに異なるRedisサーバーへ接続し、APIが使用するキャッシュを削除・バックアップ!
- API用Redisを処理!(フロントエンド用は今回スコープ外)
2. APIエンドポイントの検証
- 各環境ごとの実行サーバーで
curl
を用いてAPIのレスポンスを取得・確認!
3. ログ・レポート機能
- キャッシュ削除やテスト結果を記録し、検証結果を可視化!
- 結果を整理し、調査が必要なエラーを自動抽出・レポート化!
🤖 ChatGPT を活用したポイント
シェルスクリプトを手書きするのは楽しいですが、複雑なデータ処理やログ解析を効率化するには ChatGPT の助けが超便利!
以下は、実際の開発履歴順 に並べた ChatGPT とのやりとりの内容です!📚
📌 1. APIレスポンスログの解析
最初に、APIのレスポンスログを解析し、必要な情報を抽出するスクリプトを作成!
ChatGPT に相談し、awk
を活用して api/
** 以降のパスとエラーレベルを抽出** しました!
awk '{match($0, /api\//); print substr($0, RSTART), $3, $7}' log.txt
-
match()
** でapi/
の位置を見つけ、substr()
でapi/
以降を取得!** - エラーレベル (
$3
), ステータスコード ($7
) も同時に取得!
📌 2. ERROR ステータス URL
の順でソート
APIログを ERROR
** のレベル、ステータスコード、URL順** にソートするため、sort
を適用しました!
awk -F'api/' '{print $7, $3, $9, $0}' "$target_path" | \
sort -k1,1r -k2,2n -k3,3 | \
awk '!seen[$1,$2,$3]++'
- ログを
ERROR
レベル(降順) →ステータス
(数値として扱う) →URL
でソート! - 重複するAPIリクエストのログを削除!
🚀 開発の結果
このシェルスクリプトを活用することで、APIテストの自動化が簡単に実現! 🎉
また、Redis キャッシュを活用することで、テストのパフォーマンスを向上!
特に、APIのレスポンスを自動で収集&解析し、重複を削除する処理がスムーズに動作!
これにより、無駄なログのチェックを減らし、運用の負担を軽減! ✨
🎉 まとめ
- APIのテスト自動化にはシェルスクリプトがめっちゃ便利!
- Redis キャッシュのバックアップ、ロールバック、削除を自動化すると、APIテストの負荷をグッと減らせる!
- ChatGPT を活用するとシェルスクリプトの開発効率が爆上がり!
- 次はAPIに対応したフロントエンドのE2E テストも実装したい!!
「APIテストをシンプルに自動化したい!」 という方は、ぜひ **シェルスクリプト + ChatGPT ** の組み合わせを試してみてください!🚀✨
💖 最後に
この記事が役に立ったら、ぜひ 「LGTM」 してくれると嬉しいです! 💖
では、また次回の記事でお会いしましょう👋✨