3

単体テストはアプリケーションの機能を測定する優れた方法ですが、予備的なパフォーマンス プロファイリングに単体テストを使用した人はいますか?

私が話しているのは、自動化されたテスト実行の一部としてプロファイリング ツールを実行し、パフォーマンス結果を保存し、それらを任意の値と比較して、ボトルネックが飛び出すようにすることです。たとえば、最近、Django タグ ライブラリによってテンプレートの解析時間が文字通り 10 倍に増加したというケースがありました。テンプレートの解析が単体テストで構築されていれば、はるかに早く表示されるはずです。

この種の測定を標準の Django や Python のセットアップに含めるモジュールはありますか? そうでない場合、私自身の記事を書くための特定の提案や注意事項はありますか? ありがとう!

4

1 に答える 1

2

リリース間の暫定的なパフォーマンスへの影響を見積もるために、私たちが何をしようとしているのかを説明します。それが最善のアプローチかどうかはわかりませんが、私たちにとってはうまくいきます。

Python/Django プロジェクトにはたくさんのテストがあります。テストランナーとしてnoseを使用しています。ご存知かもしれませんが、--with-xunitテスト結果を xUnit 形式の xml ファイルにダンプするコマンドライン オプションが組み込まれています (ちなみにこれは jenkins CI でサポートされています)。

リリースを行うたびに、テストを実行し、nose が xml ファイルを生成します (それをコード リポジトリに保存します)。ここにその一部があります:

...
<testcase classname="prj.tests.functional.services.workflow.test_getCases.GetCases" name="test_full_access_ok"
          time="1.775"/>
<testcase classname="prj.tests.functional.services.workflow.test_getCases.GetCases"
          name="test_illegal_assigned_flag" time="0.008"/>
<testcase classname="prj.tests.functional.services.workflow.test_getCases.GetCases" name="test_illegal_comments"
          time="0.049"/>
...

お気づきかもしれませんが、timeすべてのテスト ケースに属性があります。したがって、テスト ケースの実行時間を名前ごとに、以前および現在のリリースと比較しているだけです (基本的には、2 つの xml ファイルを比較しています)。

それが役立つことを願っています。

于 2013-05-29T12:04:32.260 に答える