Написание тестов для Python Eve RESTful API против реальной MongoDB

Я разрабатываю свой сервер API с помощью Python-eve и хотел бы знать, как тестировать конечные точки API. Несколько вещей, которые я хотел бы протестировать конкретно:

  • Проверка запросов POST/PATCH
  • Аутентификация различных конечных точек
  • До_ и после_ хуков рабочее свойство
  • Возвращает правильный ответ 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'

person 322896    schedule 19.05.2014    source источник


Ответы (1)


Сам набор тестов Eve использует тестовую базу данных и ничего не насмехаясь. Тестовая база данных создается и удаляется при каждом запуске, чтобы гарантировать изоляцию (не супербыстро, но как можно ближе к производственной среде). Хотя, конечно, вы должны тестировать свой собственный код, вам, вероятно, не нужно писать тесты, такие как test_access_public_token выше, поскольку такие вещи уже включены в пакет Eve. Вы также можете проверить расширение Eve Mocker.

Также ознакомьтесь с руководствами по аутентификации и авторизации. Похоже, что то, как вы собираетесь работать с токенами, не совсем подходит (вы хотите использовать заголовки запросов для такого рода вещей).

person Nicola Iarocci    schedule 21.05.2014
comment
Большое спасибо! Я буду продолжать использовать тестовую базу данных, как это делает Ева, и это хорошо, потому что все реально, если только это не становится слишком медленным. И я думаю, Ева Мокер не очень подходит для наших нужд. Что касается тестирования test_access_public_token, целью является двойная проверка авторизации (на случай, если мы случайно сделаем некоторые частные конечные точки общедоступными). Я знаю, что это избыточно, но хорошо иметь его. Что касается токена, конечная точка предназначена для получения токена всего приложения в первый раз с client_app_id и секретом и будет использовать его в следующем запросе в заголовке с упомянутой вами аутентификацией на основе токена. - person 322896; 21.05.2014
comment
Кстати, можно ли для аутентификации использовать пользовательский заголовок вместо стандартного Authorization заголовка? Спасибо! - person 322896; 21.05.2014