使用liquibase构造测试脚本,以按常规脚本顺序执行

时间:2019-10-12 09:22:58

标签: spring spring-boot integration-testing liquibase

我们正在使用liquibase在spring boot应用程序中迁移数据库。在资源中,我们有一个主要的变更日志文件,其中包含其他变更日志(每个版本1个)。

我们通常通过liquibase的context属性来区分环境,但是新的我们需要区分数据,这些数据仅用于集成测试,并且不想将其放置在普通版本的脚本旁边。可以将这些集成测试脚本放在项目的测试范围内,并按常规脚本顺序执行它们吗?

例如:

主要变更日志:

<include file="version-1.xml"/>
<include file="version-2.xml"/>

和版本1样本:

<changeSet id="1ver_1" author="xxx">
     <!-- creation of table foo_table -->
</changeSet>

<changeSet id="1ver_2" author="xxx">
     <!-- adding column to table foo_table -->
</changeSet>

第2版示例:

<changeSet id="2ver_1" author="xxx">
     <!-- renaming table foo_table to bar_table -->
</changeSet>

我需要,如果用于集成测试的脚本将在脚本1ver_1之后编写并包含插入内容,那么接下来执行1ver_2和2ver_1可以了。

因此,当开始进行集成测试数据库时,将以正确的顺序执行脚本:

  1. 1ver_1
  2. 1ver_1的test_data
  3. 1ver_2
  4. 2ver_1

什么是最佳做法?

1 个答案:

答案 0 :(得分:0)

我认为您应该更改保存变更集的方式。看看Liquibase Best Practices。 因此,您的主变更日志应如下所示:

<include file="version-1.1.xml"/>
<include file="version-1.2.xml"/>
<include file="version-2.1xml"/>

如果执行此操作,则可以具有专用的主变更日志文件以进行集成测试。集成测试的changelog-master.xml如下所示:

<include file="version-1.1.xml"/>
<include file="test_data_version-1.1.xml"/>
<include file="version-1.2.xml"/>
<include file="version-2.1xml"/>

之后,您只需在集成测试中覆盖属性:

liquibase.change-log=classpath:integration-liquibase-changeLog.xml

此外,您还应该将integration-liquibase-changeLog.xml和所有的'test_data_xx.xml'放入集成测试模块资源或测试资源中(取决于项目结构)。不应将其主要思想提供给生产工件。

相关问题