placeboを用いてBoto3のAPI呼び出しをモック化する

2017.04.20

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

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スクリプトなどのテスト作成時に便利そうですね。

参考