placeboを用いてBoto3のAPI呼び出しをモック化する
placeboについて
placeboはboto3のAPI呼び出しをMock化するためのライブラリです。
placeboを利用すれば、過去にboto3を通してAPI呼び出しを行った際のレスポンスを記録し、再現することができるようになります。
このため、事前にAPI呼び出しを記録しておけば、AWSの環境を操作する必要なく動作テストを行うことができるようになります。
インストール
pip
コマンドを用いて、ライブラリのインストールを行えます。
$ pip install placebo
使い方
boto3のSession
オブジェクトを指定し、placebo.attach
を実行することでレスポンスを記録・再現できるようになります。
記録や再現を行う場合は、placebo.attach()
の返却値であるpill
を利用します。
import boto3 import placebo session = boto3.Session() pill = placebo.attach(session, data_path='/path/to/response/directory')
記録を行う場合はpill.record()
を実行します。この状態でsession
を通じて発生したレスポンスは、data_path
で指定されたパスに記録されます。
# レスポンスの記録 pill.record()
レスポンスの再現を行う場合は、pill.playback()
を実行します。以降、session
のレスポンスは記録の再現となります。
# レスポンスの再現 pill.playback()
使ってみた
placeboを用いたサンプルを試しに動かしてみました。
EC2インスタンスを一台立ち上げた状態で、記録を取ってみます。
$ python placebo_test.py --record i-0d943xxxxxxxxx running
レスポンスの記録は、特にパスを指定しなかったので直下に配置されます。
$ tree . ├── ec2.DescribeInstanceStatus_1.json ├── ec2.DescribeInstances_1.json └── placebo_test.py
その後、インスタンスを停止した状態で、再現を行ってみます。実際にはインスタンスの状態はstopped
になるはずですが、running
が表示されます。
$ python placebo_test.py --playback i-0d943xxxxxxxxx running
placeboを使わない場合は、stopped
となっています。
$ python placebo_test.py i-0d943xxxxxxxxx stopped
まとめ
AWSを操作するCLIスクリプトなどのテスト作成時に便利そうですね。