LoginSignup
2
3

More than 5 years have passed since last update.

Facebookのテストユーザーを利用してFacebookアプリのテストを自動化する

Posted at

こんにちはsekitakaです。

Facebookアプリを開発しているとGraph APIを使って投稿する関数のテストなどを実装する必要が出てきます。
はじめは自分のアカウントでテストしたりしましたが、自動化するとなると別の方法を検討する必要がありました。

調べたところFacebookには開発用のテストユーザーを作成する機能があります。
この機能はGUIとAPIの両方で提供されており、テストユーザーの作成と削除ができます。
これを利用してテストの度にFacebookのテストユーザーを生成しテストを実行する事で、テストの自動化に対応することができます。

GraphAPIのテスト自動化のフロー

  1. テスト開始時にFacebookのテストユーザーを作成する
  2. 単体テストする
  3. 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で定期的なテストを実施しておくとよいですね。

2
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
3