为真正的MongoDB编写Python Eve RESTful API测试

时间:2014-05-19 23:08:55

标签: python mongodb testing eve

我正在使用Python-eve开发我的API服务器,并且想知道如何测试API端点。我想特别测试一些事情:

  • 验证POST / PATCH请求
  • 不同端点的身份验证
  • Before_和after_ hooks working property
  • 返回正确的JSON响应

目前我正在针对一个真正的MongoDB测试该应用程序,我可以想象,一旦我运行了数百或数千个测试,测试将需要很长时间才能运行。嘲笑东西是另一种方法,但我找不到允许我这样做的工具,同时尽可能保持测试的真实性。我想知道是否有推荐的方法来测试前夕应用程序。谢谢!

以下是我现在所拥有的:

from pymongo import MongoClient
from myModule import create_app
import unittest, json

class ClientAppsTests(unittest.TestCase):
  def setUp(self):
    app = create_app()
    app.config['TESTING'] = True
    self.app = app.test_client()

    # Insert some fake data
    client = MongoClient(app.config['MONGO_HOST'], app.config['MONGO_PORT'])
    self.db = client[app.config['MONGO_DBNAME']]
    new_app = {
      'client_id'     : 'test',
      'client_secret' : 'secret',
      'token'         : 'token'
    }
    self.db.client_apps.insert(new_app)

  def tearDown(self):
    self.db.client_apps.remove()

  def test_access_public_token(self):
    res = self.app.get('/token')
    assert res.status_code == 200

  def test_get_token(self):
    query = { 'client_id': 'test', 'client_secret': 'secret' }
    res = self.app.get('/token', query_string=query)
    res_obj = json.loads(res.get_data())
    assert res_obj['token'] == 'token'

1 个答案:

答案 0 :(得分:4)

Eve测试套件本身是using a test db而不是嘲笑任何东西。每次运行都会创建并删除测试数据库,以确保隔离(不是超快,是的,但尽可能接近生产环境)。当然你应该测试你自己的代码,你可能不需要像上面的test_access_public_token那样编写测试,因为这样的东西已经被Eve套件覆盖了。您可能还想查看Eve Mocker扩展程序。

还要熟悉Authentication and Authorization tutorials。它看起来像你要获得整个令牌的方式是不合适的(你想使用请求标头的那种东西)。