djapian のテスト ケースを読んでいて、非常に興味深いことがわかりました。彼らは、TestCase クラスに setUp メソッドを使用しています。オブジェクトを作成し、インデクサーに update メソッドを使用することで、検索するドキュメントを効果的に持っています。制御されたクエリ テストを作成する方法です。興味深いことに、メソッドは次のようになります。
def setUp(self):
p = Person.objects.create(name="Alex")
for i in range(self.num_entries):
Entry.objects.create(author=p, title="Entry with number %s" % i, text="foobar " * i)
Entry.indexer.update()
これでうまくいくと思いますが、ここで小さな検索エンジンをテストしていることを覚えておく必要があるため、この解決策は簡単な方法かもしれません。異議を唱えることはできませんが、Python でこの種の webApps を一般的にテストするための戦略を定義するのに役立つ回答があれば、それは大歓迎です!
-今のところ、このようなものに落ち着くと思います(完全に入力されたデータベースでもクエリのレイテンシをテストしたかったのですが、後でFunkloadのベンチテストでそれを行うことができると思います)
編集:わかりました、興味のある人のための解決策に忠実であるために、私は別の問題に遭遇しました:xapianインデックス(コメントに記載されているように)。それを解決するために、テスト インデックス (管理スクリプトで作成された小さいもの) の運用 xapian インデックスを変更するデフォルトのテスト ランナーを作成しました。このランナーはかなり単純です。
def custom_run_tests(test_labels, verbosity=1, interactive=True, extra_tests=[]):
"""Set the test indices"""
settings.CATEGORY_CLASSIFIER_DATA = settings.TEST_CLASSIFIER_DATA
return run_tests(test_labels, verbosity, interactive, extra_tests)
そして、それを使用するために、設定を追加するだけです:
TEST_RUNNER = 'search.tests.custom_run_tests'
パフォーマンスと読みやすさの理由から、前述のアプローチ (setUp でドキュメントを作成する) をやめました: データベースをテストするには、いくつかのテキスト (1 つまたは 2 つの段落) を含むかなりの量のドキュメントが必要だったので、そのためのフィクスチャを作成することになりました (実際のデータベースに文書を作成し、それらをシリアライズして (ファイルに書き込み)、削除する管理コマンドを使用しました)。そのため、最終的には、ライブ データベースからはまったく読み取らず、代わりにややハッキーなスクリプトとカスタム ランナーで作成されたテスト フィクスチャを使用しましたが、それほど難しくはありませんでした :)