如何在 Spring Boot 测试中获取正在运行的服务器端口?
Posted
技术标签:
【中文标题】如何在 Spring Boot 测试中获取正在运行的服务器端口?【英文标题】:How to get the running server port in a SpringBoot test? 【发布时间】:2019-04-30 15:10:37 【问题描述】:我正在为带有 Apache Camel 路由的 Spring Boot 应用程序创建一些单元测试,使用 Spock 作为测试框架,我需要模拟来自另一个应用程序的响应。我为此制作了一个模拟控制器,但我需要将运行测试的端口注入到一个属性中。有没有办法获取运行测试的端口?
我试过了
@LocalServerPort
private int port
与
@Autowired Environment environment;
String port = environment.getProperty("local.server.port");
但两者都返回 -1,我不知道有什么其他方法可以获取端口
我的测试配置了以下注解:
@RunWith(SpringRunner)
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
@ActiveProfiles('test')
另外,有没有办法在application-test.yml
文件中注入那个随机端口?理想情况下,我需要在我的application-test.yml
文件中执行类似的操作:
app:
service: localhost:$server.port
其中端口是运行测试的随机端口。
【问题讨论】:
***.com/questions/30312058/… 或 ***.com/questions/51628943/… ***.com/questions/52301056/… 大家好,这些答案对我不起作用,每个都为端口返回一个空值 【参考方案1】:你可以试试这个:
@SpringBootTest(classes = Application.class, webEnvironment = WebEnvironment.RANDOM_PORT)
public class test
@LocalServerPort
private int rdmServerPort;
@LocalManagementPort
private int rdmManagementPort;
...
【讨论】:
WebEnvironment.RANDOM_PORT
是这里的关键。如果您使用默认的模拟 Web 环境,则不会启动任何嵌入式容器。结果,不涉及端口,-1
将被注入。
@AndyWilkinson 看起来 op 已经在使用它了。如果使用RANDOM_PORT
,有没有办法在属性文件中引用它,如 OP 所说的app.service=localhost:$server.port
(未明确定义 server.port)以上是关于如何在 Spring Boot 测试中获取正在运行的服务器端口?的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Spring Boot 中模拟数据库连接以进行测试?
如何防止我的 Spring Boot Batch 应用程序在执行测试时运行?
如何在 AWS 上运行的 Spring Boot 应用程序上本地运行集成测试?