如何在 Android Studio 中分析测试?

Posted

技术标签:

【中文标题】如何在 Android Studio 中分析测试?【英文标题】:How to profile a test in Android Studio? 【发布时间】:2018-05-29 14:52:03 【问题描述】:

我的 android 应用有一些运行缓慢的功能。单元测试完美地捕捉到了它。单元测试执行表明它的运行速度比应有的要慢。

Android Studio 一直在运行方法旁边为我提供一个菜单选项:“配置文件”而不是运行。我选择了该选项,但似乎没有发生与运行不同的事情。我希望 Android Studio 会在测试完成后打开一个显示所有方法调用时间的窗口。

我搜索了 Google 和 Android 网站。我发现的所有内容都与 Android Studio 中的概要分析有关。

如何分析 Android 单元测试? (该配置文件选项的真正作用是什么?)

【问题讨论】:

【参考方案1】:

我遇到了同样的问题,我决定研究一个解决方案,因为我认为这不会太难。男孩是我错了。

我从未发布过的原始答案包含一些尴尬的摆弄Thread.sleep 和手动计时并在正确的时间按下正确的按钮。这已被使用代码中的 Debug API 的更优雅的解决方案所取代。

使用 Android Studio 3.1.3 以下是我的步骤:

我不得不将我的实际单元测试复制到 androidTest (因为我实际上对算法复杂性(而不是时间消耗)感兴趣)我发现没有模拟器就无法在 Android Studio 中进行实际分析。为了性能测试这是有道理的,但就我而言,我想确保即使在复杂的场景中,我的方法也能以可预测的方式运行。)

为了避免摆弄Thread.sleep 和指示开始/停止的日志输出,您可以使用Debug.startMethodTracing("File"); or Debug.startMethodTracingSampling() and Debug.stopMethodTracing(); 或类似的组合(请参阅https://developer.android.com/studio/profile/generate-trace-logs)。我的代码现在看起来像

@Test
public void Test_Something() throws Exception

     Debug.startMethodTracing("Predict");
     // DO YOUR CODE
     Debug.stopMethodTracing();


当我现在执行配置文件时,我可以获得在设备上提到的位置生成的 .trace,如上面的链接所述:

(再次阅读链接页面,因为您需要 WRITE_EXTERNAL_STORAGE 权限,我的应用程序已经拥有该权限,所以在我的情况下并没有那么麻烦。

双击跟踪将在 Android Studio 中打开它。与上面链接中所述不同,我目前无法在分析器中导入此类跟踪,因为 3.1.3 缺少此功能或我无法找到它。

编辑:升级到 Android Studio 3.2 后,我现在确实可以加载和保存会话并在 Profiler 中显示它们。这已经改善了很多。有趣的事实:当我在 Android Studio 3.1.3 中打开跟踪时,我看到了方法的命中计数(调用方法的频率),而不是它们的时钟时间。另一方面,在分析器中,我还无法找到通话时间,而是可以访问挂钟时间。如果有人对如何显示这些也有提示,那就太好了。

【讨论】:

在应用程序的数据目录中保存跟踪文件的更好方法: val appContext: Context = ApplicationProvider.getApplicationContext() val traceFile = File(appContext.getFilesDir(), "file.trace") Log.w (TAG, "::::: trace file: '$traceFile.path'") Debug.startMethodTracing(traceFile.path) 不需要WRITE_EXTERNAL_STORAGE权限

以上是关于如何在 Android Studio 中分析测试?的主要内容,如果未能解决你的问题,请参考以下文章

在 Android Studio 中分析 Proguard 优化构建的最佳方式?

当我在 Zend Studio 中分析 CLI PHP 时如何传递参数?

在 Visual Studio 中分析故障转储

如何在 VS2017 中分析单元测试

如何在 NetBeans Maven 项目中分析 JUnit 测试?

Visual Studio 2015 如何分析单个单元测试