こんにちはsekitakaです。
Facebookアプリを開発しているとGraph APIを使って投稿する関数のテストなどを実装する必要が出てきます。
はじめは自分のアカウントでテストしたりしましたが、自動化するとなると別の方法を検討する必要がありました。
調べたところFacebookには開発用のテストユーザーを作成する機能があります。
この機能はGUIとAPIの両方で提供されており、テストユーザーの作成と削除ができます。
これを利用してテストの度にFacebookのテストユーザーを生成しテストを実行する事で、テストの自動化に対応することができます。
GraphAPIのテスト自動化のフロー
- テスト開始時にFacebookのテストユーザーを作成する
- 単体テストする
- Facebookのテストユーザーを削除する
サンプル
pythonでのテストケースのサンプルは以下のようになります。
sample.py
# coding:utf-8
# !/usr/bin/python
import facebook
import unittest
from unittest import TestCase
# テスト対象関数
# ただメッセージをウォールに投稿するだけ
def post(message, fb_token):
graph = facebook.GraphAPI(fb_token)
graph.put_wall_post(message)
class Test(TestCase):
# Facebookテストユーザー
FB_USER = None
FB_APP_ID = 'YOUR_APP_ID'
FB_APP_SECRET = 'YOUR_APP_SECRET'
@classmethod
def setUpClass(cls):
super(Test, cls).setUpClass()
# テストユーザーを作成
app_token = facebook.GraphAPI().get_app_access_token(cls.FB_APP_ID,
cls.FB_APP_SECRET,
True)
graph = facebook.GraphAPI(app_token)
cls.FB_USER = graph.request(cls.FB_APP_ID + '/accounts/test-users', {
'permissions': 'public_profile,user_photos,publish_actions'
}, {},
method='POST')
@classmethod
def tearDownClass(cls):
super(Test, cls).tearDownClass()
# テストユーザーを削除
app_token = facebook.GraphAPI().get_app_access_token(cls.FB_APP_ID,
cls.FB_APP_SECRET,
True)
graph = facebook.GraphAPI(app_token)
graph.request(cls.FB_USER['id'], {}, None, method='DELETE')
# postが正常に投稿できることをテスト
def test_post(self):
print Test.FB_USER
post("hogehoge", Test.FB_USER['access_token'])
if __name__ == '__main__':
unittest.main()
まとめ
今回はpythonのサンプルコードをのせましたが、GraphAPIはHTTPベースなので言語を問わず同様の仕組みを作れると思います。
いつの間にかAPIの仕様が変わるといったことも考えられるので、GraphAPIを利用する関数のCIで定期的なテストを実施しておくとよいですね。