Grails集成测试在Jenkins上运行

Grails集成测试在Jenkins上运行,grails,jenkins,integration-testing,Grails,Jenkins,Integration Testing,我试图将Grails应用程序(版本2.2.2)部署到Jenkins(版本1.638)。它运行clean、testapp-Dgrails.env=XXX和war命令 clean和war非常有效。对于测试app-Dgrails.env=XXX,单元测试部分工作正常,每个测试用例都通过了。然而,大多数集成测试用例都失败了。控制器中的域类似乎无法获取数据。换句话说,get()或list()方法没有返回正确的记录。我假设数据库连接正确,因为控制台输出没有抱怨连接问题。集成测试在具有相同数据源的本地计算机上

我试图将Grails应用程序(版本2.2.2)部署到Jenkins(版本1.638)。它运行
clean
testapp-Dgrails.env=XXX
war
命令

clean
war
非常有效。对于
测试app-Dgrails.env=XXX
,单元测试部分工作正常,每个测试用例都通过了。然而,大多数集成测试用例都失败了。控制器中的域类似乎无法获取数据。换句话说,
get()
list()
方法没有返回正确的记录。我假设数据库连接正确,因为控制台输出没有抱怨连接问题。集成测试在具有相同数据源的本地计算机上运行良好

测试错误与以下代码类似,
size()
始终为0。这是一个控制器集成测试。
results
get()
list()
createCriteria()返回。列出控制器中域类的{}
方法

results.size() == 9
|       |      |
[]      0      false
下面是DataSource.groovy中的代码。我尝试了
testCI
testCI2
。两种设置都没有帮助。老实说,我对
池属性不太了解。我只是复制了它

hibernate {
cache.use_second_level_cache = true
cache.use_query_cache = false
cache.region.factory_class = 'net.sf.ehcache.hibernate.EhCacheRegionFactory'
}

environments {
testCI {
    dataSource {
        dbCreate = "update" // one of 'create', 'create-drop', 'update', 'validate', ''
        url = "jdbc:mysql://localhost:3306/build_db" // For non network testing
        driverClassName = "com.mysql.jdbc.Driver"
        username ="build"
        password = "build"
        pooled=true
        properties {
            maxActive = -1
            minEvictableIdleTimeMillis=1800000
            timeBetweenEvictionRunsMillis=1800000
            numTestsPerEvictionRun=3
            testOnBorrow=true
            testWhileIdle=true
            testOnReturn=true
            validationQuery="SELECT 1"
        }
    }
}

testCI2 {
    dataSource {
        dbCreate = "update" // one of 'create', 'create-drop', 'update', 'validate', ''
        url = "jdbc:mysql://localhost:3306/build_db" // For non network testing
        driverClassName = "com.mysql.jdbc.Driver"
        username ="build"
        password = "build"
    }
}
}
最奇怪的是,在我将新提交推送到git存储库之后,集成测试有时运行良好。但这并不经常发生。


有人对此有什么想法吗?非常感谢你

IIRC,单元测试在基于内存的GORM表示上运行

对于集成测试,您需要一个真实的(来自您的示例MySQL)数据库


MySQL是否安装在Jenkins服务器上?在运行集成测试时,Jenkins服务器就是本地主机。

您能与我们共享您的
数据源.groovy吗?看看您的测试数据库是否配置正确(通常集成测试在内存
h2
中启动并针对它进行测试),谢谢@defectus。我刚刚共享了DataSource.groovy。我使用
mysql
数据库而不是
h2
。如果有必要,我会尝试h2。除非jenkins安装在您的本地计算机上,否则您不会使用相同的数据库,因为您使用localhost作为主机名。因此,请验证您的服务器数据库中是否有所需的数据,以及您查询的条目是否存在。谢谢您的回答@卓戈。我确实需要更改主机名!谢谢你的回答。MySQL数据库安装在Jenkins服务器的同一LAN中的主机上。我创建了一个隧道,以便能够在本地计算机上使用
localhost
连接到MySQL数据库。无论如何,您的回答提醒我MySQL数据库不在Jenkins服务器上。当我将
localhost
更改为ip地址时,问题就解决了。