1

ここに同様の質問があることに気付きましたが、これには別のアプローチがあります。このアプリの検索コンポーネントの単体テストを作成したいと思います。明らかに、django 設定モジュールとデータベースとのすべての接続が必要なので、django が提供するテスト ランナーは理想的です。ただし、django テスト フレームワークはダミーのデータベースを作成するため、すべてのデータをフィクスチャにダンプしてからインデックスを作成するのは嫌です (テストには永遠に時間がかかります!)。

テストはデータベースからのみ読み取るため、データが危険にさらされることはありません。-私はこのユニットテスト全体に不慣れなので、その同様の質問で読んだ新しいテストランナーを作成する解決策は、少なくとも詳細がなければ、少しは啓発しません

4

1 に答える 1

2

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 つの段落) を含むかなりの量のドキュメントが必要だったので、そのためのフィクスチャを作成することになりました (実際のデータベースに文書を作成し、それらをシリアライズして (ファイルに書き込み)、削除する管理コマンドを使用しました)。そのため、最終的には、ライブ データベースからはまったく読み取らず、代わりにややハッキーなスクリプトとカスタム ランナーで作成されたテスト フィクスチャを使用しましたが、それほど難しくはありませんでした :)

于 2010-06-14T05:51:14.927 に答える