2011-09-15 16 views
1

PHPで基本単位テストスイートを作成しました。テストが合格したかどうか、テストの実行にかかった時間を示します。それは素晴らしいですが、私は問題に遭遇したし、それに対処する方法がわかりません。各ユニットテストクラスの各初期ユニットテストは、常にそのクラスの他のユニットテストクラスよりも実行に多くの時間がかかりますが、通常は重要な要素があります。例として単体テストをPHPで実行する

TestClass1

  • Test1.1(0.042395)
  • Test1.2(0.000392)
  • Test1.3(0.000325)
  • Test1を。 4(0.000645)

TestClass2

  • Test2.1(0.042395)
  • Test2.2(0.000392)
  • Test2.3(0.000325)
  • Test2.4(0.000645)

I最初のテスト時間もリソースのロードを考慮していると仮定していますが、最初のテストを他の時間と一貫させることはできません。各テストには、実行されるsetUpメソッドとtearDownメソッドがあります。私も別の名前で正確に同じテストを繰り返してみました。予想されるより短い時間で実行されるので、最初のテストには常にオーバーヘッドがあります。

PHPにはunloadClassまたはunloadFile関数がありません。そのため、最初のテストでリソースをメモリにロードするオーバーヘッドがある場合、テストごとに一貫したテスト環境を再作成できるかどうかはわかりません。私はファイルと初期クラスのインスタンスをプリロードしようとしましたが、どちらも影響を与えていないようです。

最初のテスト時間に影響する可能性がある他の可能性はありますか?これに対処する適切な方法は何ですか?

:それは助けには便利ではありませんよう、「ちょうどPHPUnitのを使用する」、言わないでください、私は既存のPHPユニットテストフレームワークを認識してんだけど、私は少し違う何かをやろうとしています私はこの問題を解決します。

+0

なぜ単体テストの実行時間は気になりますか?パフォーマンステストには使用しないでください。 –

+0

APCなどを使用していますか?おそらく最初の長い最初の実行はコンパイルによるものであり、その後の実行のためにキャッシュされます。 –

+0

これはちょうど眼球検査としての意味であり、詳細なプロファイリングではありません。 – VirtuosiMedia

答えて

2

PHPコードで実行しているベンチマークは、歪んでしまいます。私はより正確なベンチマークを得るためにXdebugのプロファイリング機能を使うことを検討することをお勧めします:http://xdebug.org/docs/profiler

+0

+1 - 私はテストスイートの他の部分にXdebugを使用していますので、良い選択です。しかし、プロファイラにPHPインターフェイスがあるように見えないので、KCacheGrindやその他の追加の依存関係のような追加のプログラムを使用したくないので、あまり望ましくないオプションになります。 – VirtuosiMedia

+0

ベンチマークがPHPコードで実行された場合に、ベンチマークが歪んでしまう理由を少し詳しく説明してください。 – VirtuosiMedia

関連する問題