17

我正在用 geb 进行功能测试。

我的应用程序是使用 virgo 部署的,并使用 HSQLDB 来存储数据。我想在这个工作版本的应用程序上执行测试,但我想从空数据库开始,每次我运行 webtests。

我写了一个简单的 bash 脚本

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

删除数据库并重新启动处女座。

但是,当我将它添加到我的 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。即使重新部署应用程序也无济于事。

我应该怎么做才能使用空数据库运行 webtests?

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 回答