17

非常に長い間、AppEngine のタスク キューを使用してタスクをスケジュールしてきました。

しかし、私が常に疑問に思っていたのは、そのためのテストをどのように作成するのかということです。これまでは、タスクをキューに入れる API でエラーが発生しないことを確認するためのテストを作成してから、タスクを実行する API のより適切なテストを作成するだけでした。

しかし最近、これに少し不満を感じ始め、正しいタスクが正しいキューに追加されたことを実際にテストする方法を探しています。単にコードをデプロイして最善を尽くすよりも、これがうまくいくことを願っています。

それが答えに関係がある場合、私はdjango-nonrelを使用しています。

要約すると、タスクがキューに入れられたことを確認するための単体テストをどのように作成できますか?

4

4 に答える 4

18

GAEテストベッドの代わりに使用している場合google.appengine.ext.testbed(GAEテストベッドは非推奨になり、に移動されましたext.testbed)、次の操作を実行できます。

import base64
import unittest2

from google.appengine.ext import deferred
from google.appengine.ext import testbed


class TestTasks(unittest2.TestCase):
  def setUp(self):
    self.testbed = testbed.Testbed()
    self.testbed.activate()
    self.testbed.init_taskqueue_stub()
    self.taskqueue_stub = self.testbed.get_stub(testbed.TASKQUEUE_SERVICE_NAME)

  def tearDown(self):
    self.testbed.deactivate()

  def test_send_contact_request(self):
    # Make the request to your app that "defers" something:
    response = ...
    self.assertEqual(response.status_int, 200)

    # Get the task out of the queue
    tasks = self.taskqueue_stub.get_filtered_tasks()
    self.assertEqual(1, len(tasks))

    # Run the task
    task = tasks[0]
    deferred.run(task.payload)

    # Assert that other things happened (ie, if the deferred was sending mail...)
    self.assertEqual(...)
于 2012-07-05T01:35:10.997 に答える
13

GAE Test Bedを使用すると、タスク キューをスタブ化できます。

FunctionalTestCaseまたはから継承すると、 およびTaskQueueTestCaseなどのメソッドが得られます。get_tasksassertTasksInQueue

実際にタスクを実行することもできます。タスクを使用するか deferred を使用するかによって、やり方が異なります。

deferred の場合、次のようなコードがあります。

from google.appengine.ext import deferred
import base64

# gets the most recent task -- since the task queue is reset between tests,
# this is usually what you want
def get_task(self):
    for task in self.get_task_queue_stub().GetTasks('default'):
        return task

# decode and execute the deferred method
def run_deferred(task):
    deferred.run(base64.b64decode(task['body']))

タスクの実行も似ていますが、タスクをフェッチした後、WebTest (GAE Test Bed がその上に構築されています) を使用して、パラメーターを含むタスクの URL に POST 要求として送信します。

于 2011-02-08T00:26:05.940 に答える
1

必要に応じて、gaetestbed と呼ばれる小さなテスト フレームワークがあります。詳細については、https ://github.com/jgeewax/gaetestbed を参照してください。

このテスト環境は、nose、nose-gae プラグイン、および WebTest パッケージと連携して動作します。私に関する限り、GAE アプリケーションをテストするには、Python パッケージを組み合わせるのが最善の方法です。

于 2011-02-07T23:21:20.320 に答える
0

SDK 1.4.3 Testbed APIは、ローカル統合テスト用のスタブ ライブラリの簡単な構成を提供します。

のサービス スタブTask Queueが利用可能です。

于 2011-03-31T08:12:05.337 に答える