首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >AppEngine中的单元测试任务队列

AppEngine中的单元测试任务队列
EN

Stack Overflow用户
提问于 2011-02-08 06:44:22
回答 4查看 4.3K关注 0票数 17

很长一段时间以来,我一直在AppEngine上使用任务队列来调度任务,就像我应该做的那样。

但我一直想知道的是,如何为它编写测试?到目前为止,我只是进行了一些测试,以确保对任务进行排队的API不会发生错误,然后为执行任务的API编写更合适的测试。

然而,最近我开始对此感到有点不满意,我正在寻找一种方法来实际测试是否已将正确的任务添加到正确的队列中。希望这可以比简单地部署代码并期待最好的情况更好地完成。

我正在使用django-nonrel,如果这对答案有任何影响的话。

重述一下:如何编写单元测试来确认任务已排队?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2011-02-08 08:26:06

使用GAE Test Bed将允许您清除任务队列。

如果从FunctionalTestCaseTaskQueueTestCase继承,就会得到诸如get_tasksassertTasksInQueue之类的方法。

你也可以实际运行这些任务。如何做到这一点取决于您是使用tasks还是deferred。

对于deferreds,我有一些这样的代码:

代码语言:javascript
复制
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构建在它的基础上)以POST请求的形式提交给任务的URL及其参数。

票数 13
EN

Stack Overflow用户

发布于 2012-07-05 09:35:11

如果您正在使用google.appengine.ext.testbed而不是GAE Testbed (GAE Testbed现在已被弃用并移到ext.testbed中),您可以执行以下操作:

代码语言:javascript
复制
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(...)
票数 18
EN

Stack Overflow用户

发布于 2011-02-08 07:21:20

有一个名为gaetestbed的小测试框架,可以满足你的需要。详情请访问:https://github.com/jgeewax/gaetestbed

此测试环境与nose、nose-gae插件和WebTest包一起工作。就我而言,混合使用python包是测试GAE应用程序的最佳方式。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4927538

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档