17

メソッドが変更された場合に実行に X ミリ秒以上かからないようにしたいという状況に直面しています (基本的に、その関数が遅くなると、Web ページの検索結果が遅くなり、売り上げに悪影響)。

単体テストがあります (特に、コードは python で実行され、py.test を使用します)。最初のアイデアは、関数が X ミリ秒未満で実行されなかった場合、テストを失敗としてマークする (またはエラーを発生させる) ことをアサートすることです。警告)。

ただし、これは危険だと感じます (たとえば、すべてのコンピューターが同じ速度であるとは限りません)。また、それが単体テストの仕事であるかどうかもよくわかりません。

誰かが同様の状況に直面しましたか? 私にとって速度は機能であり、コードが進化するにつれて、そのような機能が将来失われないようにしたいと考えています。

単体テストが答えではない場合、他のどの代替手段をお勧めしますか?

ありがとう

4

2 に答える 2

5

最初にpytest-timeout プラグインの使用を検討できます。現在、秒の指定のみが許可されています (float として)。ただし、pystone の数値など、より適応性の高いタイミングで動作するように拡張することもできるため、コンピューターがキャッシュ可能な pystone ベンチマークを実行する速度を測定し、テストの「pystone」の数を指定します。取ることが許されています。

于 2012-08-31T10:44:18.180 に答える
2

専用のビルド/テストサーバー、または開発者間でほぼ同等のハードウェアがある場合は、ミリ秒単位の時間制限を設定しても問題ありません。再現性が重要です。開発者が自分のマシンで「ベースライン」テストを実行し、その後の結果を比較できるようにするものを作成できる場合があります。

時間制限 と負荷テストを備えたpyunitperfモジュールが利用可能です。長い間(2009年)更新されていませんが、自分でロールする場合は、開始するのに適した場所です。

また、ミリ秒単位のテスト時間自体は何も教えてくれないことを忘れないでください。ただし、これを使用してリビジョン間のパフォーマンスを比較している限り、問題はありません。

于 2012-08-30T06:05:37.593 に答える