Eri*_*zke 5 java testing junit dbunit development-environment
我正在围绕现有项目设置一些测试脚手架.这包括使用JUnit和DbUnit的一些集成测试.我还设置了Jenkins安装以进行持续集成.
我的问题涉及更改开发和测试环境之间的数据库连接.我在本地安装了自己的产品堆栈,以便进行快速的临时测试和调查.在我开发的时候,我对我的私人数据库运行测试,因为它更快,我不会因为有问题的工作进程代码而毁掉任何其他人的日子.
签入代码后,Jenkins将运行我的测试.现在它仍然指向我的本地数据库.我更愿意让Jenkins针对不同的数据库运行测试,这个数据库位于测试环境中.
是否有最佳实践/策略/技术/等更改数据库连接以进行测试而无需更改代码?如果解决方案允许Jenkins对多个DB运行相同的测试,那么奖励点(应该是可能的,因为DbUnit是不可知的).
编辑更多信息:
该产品很大,具有许多不同的交互组件(通常在单独的vms /进程中).在实时系统中,不同的进程通常通过数据库进行通信.IE,UI进程将更改写入表,后端进程轮询该表以进行更改.是的,太可怕了.对于集成测试,我使用UI配置系统并使用DbUnit捕获该状态.然后,我可以针对该"输入"运行测试.
我的组件和所有新组件都由maven管理.数据库连接当前在测试设置中是硬编码的.DbUnit系统有效; 我只是希望能够切换我的测试引用的数据库,具体取决于它们是在我的开发环境中运行,还是由Jenkins在测试环境中运行.
假设您可以将测试的数据库连接参数外部化为.properties或.xml文件,并且您正在使用Maven,那么一种方法是使用Maven属性(以及可选的配置文件)来定义每个环境,并使用资源过滤来配置这些属性进入配置文件.
例如,您管理您的外化数据库连接参数到一个名为测试中假设datasource.properties的src/test/resources,看起来像这样:
datasource.driverClassName = ${test.datasource.driverClassName}
datasource.url = ${test.datasource.url}
datasource.username = ${test.datasource.username}
datasource.password = ${test.datasource.password}
Run Code Online (Sandbox Code Playgroud)
你在POM中有这个:
<build>
<testResources>
<testResource>
<directory>src/test/resources</directory>
<filtering>true</filtering>
</testResource>
</testResources>
</build>
Run Code Online (Sandbox Code Playgroud)
然后,您可以test.datasource.driverClassName通过各种方式定义等属性,以告诉Maven使用不同的数据库:
<properties>POM 的部分中定义默认值;<properties>每个开发人员(和Jenkins')的部分中定义用户特定的数据库settings.xml;development,jenkins,anotherDB),并以不同的配置运行构建.如果您选择最后一个选项,那么您可以通过从一个Jenkins项目执行多个Maven构建来使Jenkins针对多个数据库运行,而不仅仅是通过配置文件.也就是说,为每个环境设置不同的Jenkins项目会更好.