如何在 Android Studio 中分析测试?

Tho*_*her 5 profiler profiling unit-testing android-studio

我的 Android 应用程序有一些运行缓慢的功能。单元测试完美地捕捉到了这一点。单元测试执行显示它的运行速度比应有的速度慢得多。

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

在此输入图像描述

我搜索过 Google 和 Android 网站。我发现的所有内容都涉及 Android Studio 中的概要分析。

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

Sam*_*uel 6

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

我最初的答案从未发布过,其中包含一些尴尬的摆弄Thread.sleep和手动计时以及在正确的时间点击正确的按钮。这已被更优雅的解决方案所取代,该解决方案使用代码中的调试 API。

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

  • 我必须将实际的单元测试复制到 androidTest 中(因为我实际上对算法复杂性(而不是时间消耗)感兴趣,我发现没有办法在没有模拟器的情况下在 Android Studio 中进行实际分析。对于性能测试来说,这是有意义的,但就我而言,我希望确保即使在复杂的场景中,我的方法也能以可预测的方式运行。)

  • 为了避免需要摆弄 withThread.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();
    
    }
    
    Run Code Online (Sandbox Code Playgroud)
  • 现在,当我执行配置文件时,我可以获得设备上上述位置生成的 .trace,如上面的链接所述:

痕迹

(再次阅读链接页面,因为您将需要WRITE_EXTERNAL_STORAGE许可,而我的应用程序已经拥有该许可,所以在我的情况下这并不是那么麻烦。

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

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