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

我正在使用Python-eve开发我的API服务器,并且想知道如何测试API端点.我要特别测试的几件事:

>验证POST / PATCH请求
>不同端点的认证
> Before_和after_挂钩工作属性
>返回正确的JSON响应

目前,我正在针对真实的MongoDB测试该应用程序,我可以想象一旦我要运行数百或数千个测试,测试将需要很长时间才能运行.模拟事物是另一种方法,但是我找不到能够使测试保持现实的工具.我想知道是否有推荐的方法来测试eve应用程序.谢谢!

这是我现在所拥有的:

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'

解决方法:

Eve测试套件本身是using a test db,没有嘲笑任何东西.在每次运行时都会创建并删除测试数据库,以确保隔离(不是超级快,是的,但尽可能接近生产环境).当然,虽然您应该测试自己的代码,但是您可能不需要编写上面的test_access_public_token之类的测试,因为Eve套件已经涵盖了此类内容.您可能还需要检查Eve Mocker扩展名.

也要使自己熟悉Authentication and Authorization tutorials.看起来要让整个令牌运行的方式不太合适(您想对这种东西使用请求标头).

上一篇:使用Python Eve组织REST API Web服务构建


下一篇:如何使Eeve根据各种URL参数和请求值写入不同的数据库?