9

grails アプリケーションの特定のデータを同時に変更するユーザーをシミュレートするテストを実行したいと考えています。

これを効率的に行うために使用できるプラグイン/ツール/メカニズムはありますか? それらは Grails 固有である必要はありません。複数のアクションを並行して起動できる必要があります。

ユーザーの観点から結果を確認するには、機能レベルでテストを実行することをお勧めします (これまでのところ、他のテストには Selenium を使用しています)。もちろん、統合レベルでも同時変更テストを実行することをお勧めする場合は、統合テストに加えてこれを行うことができます。

4

6 に答える 6

2

最近、これにGeb(http://grails.org/plugin/geb/)を使用しました。これは、WebDriverやSeleniumなどの上にあるレイヤーです。アプリでユーザーとして機能するGrailsスクリプトを記述して、さまざまなコンソールで複数のインスタンスを実行するのは非常に簡単です。Gebは、jQueryスタイルの構文を使用してDOM内のものを検索します。これは、非常に優れています。

import geb.Browser
import geb.Configuration

includeTargets << grailsScript("_GrailsInit")

target(main: "Do stuff as fast as possible") {

    Configuration cfg = new Configuration(baseUrl: "http://localhost:8080/your_app/")

    Browser.drive(cfg) {
        go "user/login"
        $("#login form").with {
            email = "someone@somewhere.com"
            password = "secret"
            _action_Login().click()
        }
        ...
    }
}

setDefaultTarget(main)

スクリプトをscripts/YourScript.groovyに配置するだけで、「GrailsYourScript」を実行して実行できます。これらのいくつかをフルスピードで実行するだけで、いくつかの同時実行の問題を追跡しました。開発モードのGrailsは非常に遅く、permgenスペースがすぐに不足するため、戦争を構築して適切にデプロイする必要があります。

于 2011-10-23T11:03:11.057 に答える
0

ただのアイデア:クライアントを同時に起動させるのは難しいようですが、データを変更する直前にお互いを待つことはできますか?

たとえば、クライアントはそのプロセスをログに記録し続けます:「クライアントxアクセスデータ」、「クライアントx編集データ」をファイルに記録します。また、他のクライアントの進行状況を確認するために、このログファイルを調べ続けます。次に、別のクライアントがそのデータを編集するために来るまで、クライアントがデータの編集を完了することを許可しないでください。

于 2010-12-01T03:53:19.747 に答える
0

WebTestは、並列タスクを提供する Ant 上に構築されています。これを Webtest プラグインと併用して、いくつかのアクションを並行して実行できる場合があります。試したことはないけど。

于 2011-01-06T05:49:10.253 に答える
0

HttpSession を持っているだけのユーザーではなく、主に複数のアクティブ ユーザーの負荷テストに関心がありますか? 確実な負荷テストは、非常に優れた機能に基づいています。ただし、テストします。現在、機能テストはどのように編成され、実行されていますか? Grails にもそのためのプラグイン* があり、プラグイン ポータルの Top of the Pops にあるようです。

オプティミスティック ロック メカニズムが負荷の下でどのように機能するかをテストしようとしていますか?

前者のユースケースの方が重要な場合は、JUnitPerfを探しているように思えます。-->ダウンロードはこちら

*functional-test <1.2.7> -- 機能テスト

于 2010-12-05T01:56:04.293 に答える
0

私は、Grinderが高負荷テスト用の優れたツールであることを発見しました。一度に複数のインスタンスを実行して同じテストを実行すると、通常のテストでは見つからないアプリの同時実行の問題が明らかになることがよくあります。

単体テストまたはコード内統合テスト内でこれを行う場合は、常にコード内で複数のスレッドをスピンアップして、テストしようとしているタスクをそれらに実行させることができます。

于 2010-12-02T04:44:05.677 に答える
0

MultithreadedTCをご覧ください。複数のスレッドが潜在的に危険と思われる方法でコードを実行している特定のインターリーブのケースを実行するために使用できるようです。

Selenium はサーバーにリクエストを送信するブラウザを制御するため、Selenium を使用して特定のマルチスレッド インターリーブ ケースをテストする便利な方法を見つけられるとは思えません。実行中の Web サーバーへの実際の Web 要求としてスレッドが開始されたときに、マルチスレッド インターリーブ テスト用のコードをインストルメント化する方法について聞いたことがありません。

于 2011-10-20T09:46:07.887 に答える