对于蓝色/绿色部署,要求新的应用程序版本与旧的和新的数据库版本一起运行。因此,我的集成测试应该运行两次:使用以前的数据库版本(部分迁移到版本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));
}
}