Spring Boot,H2和Flyway:使用两个版本的数据库运行集成测试

时间:2018-09-25 06:53:42

标签: spring-boot flyway

对于蓝色/绿色部署,要求新的应用程序版本与旧的和新的数据库版本一起运行。因此,我的集成测试应该运行两次:使用以前的数据库版本(部分迁移到版本1),然后使用最新版本。

我可以通过设置本地MySQL数据库来完成此操作,并处理迁移并手动运行测试,但我想知道是否存在使用H2并以某种方式自动执行CI的方法。

我有一个非常基本的Spring Boot / Flyway设置。

application.yaml:

spring:
  profiles: db_h2
  ...
flyway:
  locations: classpath:/flyway/h2,classpath:/flyway/common,classpath:/flyway/testdata

测试父类:

@RunWith(SpringRunner.class)
@SpringBootTest(classes = Application.class, webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
@TestExecutionListeners({DependencyInjectionTestExecutionListener.class, FlywayTestExecutionListener.class })
@ActiveProfiles({"db_h2","logging_quiet", "http_secure_selfsigned", "credentials_insecure"})
public abstract class RestIntTestParent {
   ...
    @Before
    @FlywayTest
    public void setUpAll() throws Exception {
        ...
    }
}

REST保证测试的示例:

public class SettingsIntTest extends RestIntTestParent {
    private static final String URL = "/users/me/settings";

    @Test
    public void testGetAll() {
        final String authTokenAlice = getAuthToken("alice");

        given(this.specApi)
            .header(AUTH_HEADER, authTokenAlice)
            .get(URL)
        .then()
            .statusCode(HttpStatus.OK.value())
            .body("content", hasSize(4))
            .body("content[3].intVal1", equalTo(28))
            .body("content[1].jsonVal[2].year", equalTo(2015));
    }
}

0 个答案:

没有答案