Spring 使用liquibase构造测试脚本,以便与普通脚本一起按顺序执行

Spring 使用liquibase构造测试脚本,以便与普通脚本一起按顺序执行,spring,spring-boot,integration-testing,liquibase,Spring,Spring Boot,Integration Testing,Liquibase,我们正在使用liquibase在spring boot应用程序中迁移数据库。在参考资料中,我们有主变更日志文件,其中包括其他变更日志(每个版本1个) 我们通常通过liquibase的context属性来区分环境,但是新的我们需要区分仅用于集成测试的数据,并且不希望将其放在正常版本的脚本旁边。是否可以将这些集成测试脚本放在项目的测试范围内,并按照正常脚本的顺序执行它们 例如: 主要变更日志: <include file="version-1.xml"/> <include fil

我们正在使用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中执行就可以了

因此,当db for instegration测试启动时,脚本将按正确的顺序执行:

  • 1版本1
  • 1版本1的测试数据
  • 1版本2
  • 2版本1

  • 这样做的最佳实践是什么?

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

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

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

    我认为我们正在使用这个概念。从文档:
    组织变更日志的最常见方式是按主要版本。
    其中
    版本X
    是我们的版本,每个版本包含多个变更集。但是,当有人为版本1编写更改集1,以及当前数据库状态的数据,而有人在版本1的更改集2中更改数据库结构时,如何处理这种情况?它需要在版本1的同一文件中的变更集之间运行测试数据。请查看更新的答案。如果遵循最佳实践,您可以找到主变更集的外观示例。如果是这样,您可以创建集成测试chanelog。在集成测试中,您必须检查来自
    version-1.2.xml
    的更改是否不会损坏甚至截断来自prev(
    version-1.1.xml
    )版本的数据。您不需要为变更集之间的集成测试插入数据,因为这不是实际情况。你不会在生产中遇到这种情况。因为liquibase应用了
    version-1.1xml
    中的所有变更集,但不是其中的一部分。但在变更集之间,数据库结构可能会发生变化。例如,您可以想象2个开发人员正在开发1.5版。首先创建一些结构,并希望为hist集成测试添加一些数据。第二个将改变1.5个变更日志,并添加一些修改第一个DeVE结构的变更集。在这种情况下,需要用2个DVE之间的测试数据执行脚本,以将第二DEV的更改应用到第一个DEV的插入数据上。两者必须在1.4之后的1.5之前添加数据,而不是在1.5的中间添加数据。因为您的集成测试应该检查开发人员的更改如何影响1.4中添加的数据。(1.5迁移之前存在于系统中的数据)。您应该在集成测试中模拟系统的实际情况和状态。迁移1.5期间系统未添加任何数据。因此,两个开发人员都应该将测试数据添加到1.5之前和1.4之后应用的单独文件中(您可以在我的答案中找到示例)。
    <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