17

私はgebで機能テストを行っています。

私のアプリケーションは virgo を使用してデプロイされ、HSQLDB を使用してデータを保存します。この動作中のバージョンのアプリケーションでテストを実行したいのですが、webtest を実行するたびに空のデータベースから開始したいと考えています。

簡単なbashスクリプトを書きました

#!/bin/sh
rm -rf $VIRGO_HOME/aresdb*
$VIRGO_HOME/bin/shutdown.sh &
sleep 10
$VIRGO_HOME/bin/startup.sh &

これにより、データベースが削除され、virgo が再起動されます。

ただし、それを build.gradle タスク実行コマンドに追加すると、コマンドが終了しません。

task cleanDB(type: Exec) {
    commandLine './clean.sh' 
}

なぜこのようになっているのですか?このスクリプトをコンソールで実行すると、すぐに戻ります (ただし、virgo は引き続きコンソールに書き込みます)。

別のスレッドで実行しようとしましたが、次のエラーが発生しました。

task cleanDBThread()<<{
    def cleanDBThread1 = Thread.start {
         cleanDB.execute()
    }
    sleep 10000
    println "wake up!"
}

Exception in thread "Thread-32" java.lang.IllegalStateException:
Cannot start long running operation, as the task artifact state cache
(/home/tomasz/ares/.gradle/1.0-milestone-9/taskArtifacts) has not been locked.

ハイバネート構成で「create-drop」も設定しようとしましたが、virgoの再起動も必要です。アプリケーションを再デプロイしても役に立ちません。

空のデータベースで Web テストを実行するにはどうすればよいですか?

4

1 に答える 1

21

それは変だ

タスクを作成しました

task callCL(type: Exec) {
    commandLine './cl.sh'
}

cl.shファイルを呼び出す

#!/bin/sh
echo "starting "
./acl.sh &
sleep 10
./acl.sh &

acl.shを呼び出します

#!/bin/sh
echo "I am not doing anything"

そしてそれはうまくいきました!ただし、. / acl.shアンパサンド文字を追加し、gradleを開始した別のスレッドからタスクを呼び出すと、ハングしているように見えます。シャットダウンの呼び出しから&を削除して、このように開始します

#!/bin/sh
rm -rf $VIRGO_HOME/aresdb*
$VIRGO_HOME/bin/shutdown.sh
$VIRGO_HOME/bin/startup.sh

とにかく、シャットダウンから開始まで同じスレッドで待機したいので、sleepを呼び出す必要もありません!

于 2012-06-04T15:28:12.053 に答える