如何保持QuarkusIntegrationTest/原生镜像测试环境常驻高效开发测试
@QuarkusIntegrationTest常驻测试环境实现方案 完全可以实现,Quarkus本身原生支持该场景,不需要引入第三方工具,操作步骤如下:
- 首先启动常驻的集成测试环境,在项目根目录执行命令:
该命令会完整执行集成测试前置流程:拉起所有配置的Dev Services、初始化所有mvn quarkus:test -Dquarkus.test.integration-test=true -Dquarkus.test.hang-on-startup=trueQuarkusTestResource、启动构建好的原生待测容器,所有组件就绪后不会自动触发测试执行,会持续保持运行状态,待测服务默认监听localhost:8080。 - 编写测试用例时,新增一个专用测试profile跳过环境重复拉起逻辑,直接对接已运行的常驻环境:
测试类正常使用public class PersistentEnvProfile implements QuarkusTestProfile { @Override public Map<String, String> getConfigOverrides() { return Map.of( // 指定对接已启动的常驻服务地址 "quarkus.http.test-host", "localhost", "quarkus.http.test-port", "8080", // 关闭Dev Services自动启动 "quarkus.devservices.enabled", "false", // 跳过原生待测容器的生命周期管理 "quarkus.test.integration-test.container-lifecycle", "skip" ); } }@QuarkusIntegrationTest注解,指定上述profile即可,测试逻辑编写方式和普通集成测试完全一致:@QuarkusIntegrationTest @TestProfile(PersistentEnvProfile.class) public class CustomApiIT { // 在此处编写你的自有API测试逻辑 @Test public void testApiReturn() { // 测试逻辑直接请求常驻环境接口,无额外启动开销 } } - 调试测试用例时,直接单独运行对应测试类/测试方法即可,执行过程不会重复拉起任何环境资源,请求会直接打到常驻的测试环境上,单次测试执行耗时和普通单元测试基本一致。
注意:仅当你修改了业务代码需要重新构建原生镜像、或者调整了Dev Services/TestResource配置时,才需要停掉当前常驻环境重新执行启动命令刷新环境;日常编写、调整测试用例逻辑的过程全程不需要重启环境。
- 额外提效点:常驻环境启动后,你可以直接用接口调试工具访问
http://localhost:8080/q/health确认服务状态,提前手动验证接口逻辑后再编写成测试用例,进一步减少无效测试执行次数。
内容的提问来源于stack exchange,提问作者Herr Derb
相关产品推荐
相关产品推荐

