3

Python-eve を使用して API サーバーを開発しており、API エンドポイントをテストする方法を知りたいです。具体的にテストしたいことがいくつかあります。

  • POST/PATCH リクエストの検証
  • 異なるエンドポイントの認証
  • before_ および after_ フックの作業プロパティ
  • 正しい 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'
4

1 に答える 1

4

Eve テスト スイート自体はテスト データベースを使用しており、何もモックしていません。テスト データベースは、分離を保証するために、実行のたびに作成および削除されます (超高速ではありませんが、本番環境にできるだけ近いものです)。test_access_public_tokenもちろん、独自のコードをテストする必要がありますが、上記のようなテストは Eve スイートで既にカバーされているため、おそらく上記のようなテストを記述する必要はありません。Eve Mocker拡張機能も確認してください。

また、認証と承認のチュートリアルをよく理解してください。トークン全体を処理する方法は、実際には適切ではないようです (そのようなものにはリクエスト ヘッダーを使用する必要があります)。

于 2014-05-21T06:53:42.960 に答える