web-dev-qa-db-ja.com

DrupalWebTestCaseを使用する-毎回DrupalWebTestCaseが最初から実行されないようにするためのトリック

各テストを完全にクリーンな環境で実行することは理にかなっています。ただし、テストを実行する前にテストを開発する必要があります。このプロセス中、テストの変更/修正の結果を確認するために毎回3〜4分待たなければならないのは非常にイライラします。

Drupalデータベース全体を再作成せずに、最後に終了または中断した環境で何らかの方法でテストを再開するトリックはありますか?この時点では、テストを100にすることに興味はありません。信頼性は%ですが、テスト自体の多かれ少なかれ明らかなエラーを取り除くことができます。

たとえば、私のWebTestCaseで、$ myfunction()の代わりに$ myfunctionを書いたところ、テストが失敗しました。これまでのテストではコンテンツタイプが作成されたため、同じ環境でそれを再実行するには、そのコンテンツタイプが存在する場合は削除するだけで済みます。

2
camcam

いいえ、ありません。 Simpletestは、最後のテスト実行が成功したかどうか、テスト環境内で何かを壊したか、変更したかどうかを知りません。技術的な理由の他に、それだけでも問題があります。また、本当に遅い部分はカスタムのsetUp()コードではなく、完全なDrupalインストールを毎回セットアップすることです。

ただし、速度を向上させるためのいくつかのトリックがあります。

  • テストクラスにprotected $profile = 'testing';を追加して、テストプロファイルを使用します。ただし、絶対に必要なモジュールのみをインストールするため、いくつかの追加の依存関係を定義する必要があるかもしれません。これにより、テスト速度が約50%向上します。
  • 複数の関数を呼び出す単一のpublic test *()メソッドを用意します。そうすれば、テストクラス全体で必要な設定は1つだけです。ただし、テストメソッドが別の環境で実行されなくなったことに注意する必要があります。
  • デフォルトエンジンをInnoDBからMyISAMに変更してコアを「ハッキング」します。これにより、TABLEステートメントの作成がはるかに高速になります。
  • MySQLの設定を改善します。ここに例として私の設定を示します: http://techblog.md-systems.ch/blog/improve-mysql-performance
  • 単一のテストメソッドでアクティブに作業していて、クラスに複数のテストメソッドがある場合は、function test...function dtest..に置き換えて他のメソッドを無効にします。コミットする前にそれを元に戻すことを忘れないでください。

私のラップトップでは、1つのテスト方法で最大10秒かかります。それは悪くないです。

1
Berdir

これは古くから回答されてきた古い質問であることは承知していますが、Googleを介してこれを見つけた人なら誰でも(私がしたように)、おそらくこれを高く評価するでしょう。

SimpleTest Clone と呼ばれるcontribモジュールがあり、これはSimpleTestCloneTestCaseと呼ばれるDrupalWebTestCaseクラスの代替を提供します。この新しいクラスからテストクラスを派生させると、(最初からサイトを再構築するのではなく)テストごとにアクティブデータベースが複製されます。小規模なテストサイトでは、これにはおそらく10〜15秒かかります。完全な再構築プロセスよりもはるかに高速です。

また、ライブサイトデータに対してテストを実行する必要がある場合にも役立ちます。

0
coredumperror