後追いでユニットテストを追加する練習として、既存のAWS Lambda (Python) 実装に対してテスト設計・実装を行うワークショップです。今までのワークショップで扱ったpytestとモックの知識を、本番さながらのコードベースで試すことを狙います。
- ドメイン設計資料からテスト観点を抽出する力
- boto3を直接利用する既存コードを安全にテストするテクニック
- イベント駆動システムのエッジケース(重複イベント、外部サービス失敗)へのテスト設計
- テストしづらいコードに対するリファクタリング候補の洗い出し
DESIGN.md: ビジネス背景と処理フロー、外部連携を整理した設計ドキュメントEXERCISE.md: 演習課題の詳細(3つのテストケースの実装指示とsamples/の使い方)HINTS.md: テスト実装のための段階的なヒント集src/order_handler.py: テスト未整備の既存Lambda実装samples/*.json: EventBridgeイベントのサンプルペイロードtests/: ワークショップ参加者がテストコードを追加する場所(test_order_handler.pyの雛形付き)requirements-dev.txt: ワークショップで利用を想定するPython依存パッケージsolutions/: 演習後に参照できる回答例と解説(閲覧は任意)
- Git がインストールされていること(後述の手順参照)
- Python 3.11 以降がローカルにインストールされていること
slides/pytest/pytest_workshop_slides.mdの内容(pytest基礎、フィクスチャ、モック)が理解できていること- AWS CLI認証は不要ですが、
motoが正しくインストールできるネットワーク環境が必要です
まず、Gitがインストールされているか確認します。
git --versionバージョンが表示されれば、Gitは既にインストールされています。次の「リポジトリのクローン」に進んでください。
Windows:
- Git for Windows から最新版をダウンロード
- インストーラーを実行し、デフォルト設定のままインストール
- Git Bash または PowerShell を開いて
git --versionで確認
macOS:
# Homebrewを使う場合(推奨)
brew install git
# または Xcode Command Line Tools をインストール
xcode-select --installLinux (Ubuntu/Debian):
sudo apt update
sudo apt install gitLinux (CentOS/RHEL/Fedora):
sudo yum install git
# または
sudo dnf install gitGitのインストールが確認できたら、このリポジトリをローカルにクローンします。
git clone https://github.com/yuu551/lambda-pytest-workshop.git
cd lambda-pytest-workshopWindows:
python -m venv .venv
.venv\Scripts\activate
pip install -r requirements-dev.txtmacOS/Linux:
python3 -m venv .venv
source .venv/bin/activate
pip install -r requirements-dev.txt- イントロ&設計理解:
DESIGN.mdを読み、Lambdaが担う責務・外部依存・状態遷移を確認する - テスト実装:
EXERCISE.mdの課題を確認し、tests/test_order_handler.pyにpytestでテストを実装。詰まったらHINTS.mdを参考にしながら、pytest-mockやmotoを活用してboto3呼び出しをスタブ化する - カバレッジ測定 (5 min): pytest-covでカバレッジを確認
- 簡単なふりかえり (5 min): 気づきの共有と次回の準備
- solutions比較 (20 min):
solutions/test_order_handler_solution.pyと自分のテストを比較し、検証観点の差分を振り返る - リファクタリング提案 (15 min): テスト容易性の観点から改善したいリファクタリング案を議論する
- CI/CD統合の検討 (15 min): GitHub ActionsなどのCIに接続する手順をドキュメント化する(発展課題)
- 質疑応答・補足 (10 min): 残った疑問点の解消と学習の振り返り