Google App Engine中的任务测试强制在SDK中执行同步任务或等待所有任务执行?

时间:2012-11-04 23:53:25

标签: google-app-engine

您是否知道如何强制GAE SDK同步执行任务以进行单元测试以检查任务结果?

您知道如何在单元测试中等待队列中的所有任务执行来检查任务结果吗?

任务的默认异步执行不允许进行简单测试,因此不适合用于使用任务队列更新后检查计数器。

考虑测试这样简单的代码(在完成测试后检查结果)。

  payload = pickle.dumps(args, protocol = pickle.HIGHEST_PROTOCOL)
  task = taskqueue.Task(url = TASK_ADD_ORDER_REVIEW_COUNTER,
                        payload = payload)
  task.add(queue_name = COUNTERS_QUEQUE)

可以跳过task.add并直接从TASK_ADD_ORDER_REVIEW_COUNTER直接调用代码,但这是一个非常难看的解决方法我觉得应该更简单。

1 个答案:

答案 0 :(得分:1)

我建议你将测试分为两部分:

  1. 检查任务是否已添加
  2. 检查处理任务的处理程序是否按预期工作
  3. 对于1.,我会像这样使用ext.testbed

    from google.appengine.ext import testbed
    
    def setUp():
      self.testbed = testbed.Testbed()
      self.testbed.activate()
      self.testbed.init_taskqueue_stub()
    
    def test():
      [do whatever triggers tasks]
      stub = self.testbed.get_stub('taskqueue')
      tasks = stub.get_filtered_tasks() # see (taskqueue_stub.py for details[2])
      [verify tasks is what you expected]
    

    对于2.,我会关注handler testing article并向您的任务处理程序发送请求。毕竟,任务被调用为普通的POST请求(params编码为请求参数)。

    1 http://code.google.com/p/googleappengine/source/browse/trunk/python/google/appengine/api/taskqueue/taskqueue_stub.py#2453