2016-09-07 3 views
2

私は、データベースが遅いときだけ自分自身を明示するバグを持っています。これは、最も単純なデータベース操作(選択など)にも適用されます。どのようにテストで遅いSQLデータベースをシミュレートするには?

私はデータベースを低速にするテストを作成したいと思います。どうやってするか?
私はSpring Boot、Spring Data、Hibernate、MariaDBを使用します。

理想的には、Javaアプリケーションのテストコードに「遅いデータベース」部分が完全に含まれるようにします。そうすれば、テストは完全に自動化され、自己完結型になります。

1回のテストでデータベースアクセスを遅くしたい(すべてのアクセスに対してグローバルではない)。

私は睡眠

で前(SELECT)データベース・トリガーを導入することが提案された。しかし、それは一つのテストのためだけではアクセスしない、ダウンすべてのアクセスが遅くなるため、これは、柔軟ではありません。

+3

簡単な答えは、Thread.sleepが埋め込まれたテストリポジトリクラスを作成することです。 – duffymo

+0

'Thread.sleep'を使って@duffymoを実行すると、意図的に減速するのに似ていますが、どれくらい減速するかは分かりません。 – px06

+1

悪い考えですか?それはテストです - それは私がそれを理解している全体のアイデアです。あなたが望むなら、それをある範囲にわたってランダムな値にすることができます。要点は、故障に関連する遅さの程度が分かっていることです。 – duffymo

答えて

4

この問題の解決方法は4つあります。

  1. 低速データベースを作成する必要はありません。データベースへの接続が遅くなる場合があります。別の(バーチャル)マシンでデータベースを実行すると、ランダムにネットワーク応答を遅らせることで、すてきなインターネット接続をシミュレートするのに役立つシステムがあります。

  2. あなたは睡眠、あなたのデータベースが提供される(10)関数を使用することができ、これが必要となる試験の目的のためのSQLクエリまたはオーバーライドメソッドにそれを「注入」とSELECT SLEEP(10)SELECTを交換してください。

  3. mysqlを使用する場合、mysqlslapを使用してデータベースのストレステストをシミュレートします。カントービット愚か

  4. 別の解決策、、あなたはspring-aopを使用すると、ランダムな小さな睡眠とDAOのメソッドの実行前と後の遅延側面を添付することができます。このようにして制御することができます。既存のコードを変更する必要はなく、実際のシステムに統合されずに遅延を行うことができます。結局、そんなに愚かではない。これは非常に柔軟で、私はそれと一緒に行くと思います。セットアップが簡単です。

愚かでも機能するなら、それは馬鹿ではありません。

+0

私は春のようなソリューションを一番好きです。テストのためにこれを行うのは簡単です。他のソリューションはより複雑で、手動でセットアップする必要がある動く部品が増えます。私の「遅いデータベース」テストが完全に自動化されれば、数行のコードを書いても構いません。 –

+1

@BartoszBilicki 1つのテストで何を意味するのかに応じて、ソリューション4は設定が容易で柔軟性があると思います。あなたのテストがセレモニウムで行われていたり、何かがエンドツーエンドでテストされていると、ベストではないかもしれませんが、間違いなく最も簡単です。 – agilob

+1

右の解決策4は、アプリケーションの一部を模擬するジュニットテストに適しています。エンドツーエンドテストには適用されません。 –

-2

簡単な答えは、Thread.sleepが埋め込まれたテストリポジトリクラスを作成することです。

クレジット:この回答はhttps://stackoverflow.com/users/37213/duffymoのコメントで提供されました。

+1

この回答をCW(コミュニティwiki)にしてください。 – Seth

関連する問題