如何检测MacroBenchmark是否正在运行?
检测MacroBenchmark运行状态并连接本地WireMock服务器
实现方案
你可以通过两种可靠方式检测MacroBenchmark的运行状态,进而触发与本地WireMock的连接逻辑:
1. 利用MacroBenchmark生命周期回调
MacroBenchmark提供了基准测试生命周期的回调节点,你可以在测试开始/结束的钩子中添加状态判断与WireMock连接逻辑:
class AppBenchmark { @get:Rule val benchmarkRule = MacrobenchmarkRule() @Benchmark fun launchBenchmark() = benchmarkRule.measureRepeated { // 用runWithTimingDisabled包裹非测试逻辑,避免影响计时结果 runWithTimingDisabled { if (benchmarkRule.isMeasuring) { setupWireMockConnection() } } // 执行基准测试核心逻辑 startActivityAndWait<MainActivity>() } private fun setupWireMockConnection() { // 连接本地WireMock服务器 val wireMock = WireMock("localhost", 8080) // 可添加接口验证或预设响应逻辑 wireMock.register(WireMock.get(WireMock.urlEqualTo("/api/config")) .willReturn(WireMock.okJson("{\"env\":\"benchmark\"}"))) } }
2. 通过进程名识别状态
MacroBenchmark运行时会以带特定标识的进程名执行,你可以通过检测当前进程名判断是否处于基准测试状态:
private fun isMacroBenchmarkActive(): Boolean { val processName = applicationContext.packageName + ":macrobenchmark" return Application.getProcessName() == processName }
在应用初始化或需要调用WireMock的时机执行该方法,返回true时再启动连接逻辑。
关键注意事项
- 确保WireMock服务器在MacroBenchmark启动前已启动,可通过Gradle任务或shell脚本在测试前启动、测试后关闭。
- 所有与WireMock交互的逻辑必须放在
runWithTimingDisabled块内,避免连接、接口配置的耗时干扰基准测试的计时准确性。 - 若使用AGP 7.4及以上版本,需注意适配
MacrobenchmarkRule的最新API,部分旧版回调方法已被标记为废弃。
内容的提问来源于stack exchange,提问作者timr
相关产品推荐
相关产品推荐

