如何在Android Studio中分析测试?

时间:2018-05-29 14:52:03

标签: unit-testing android-studio profiling profiler

我的Android应用有一些运行缓慢的功能。单元测试可以完美捕获它。单元测试执行表明它的运行速度比应该的速度慢。

Android Studio一直向我提供run方法旁边的菜单选项:“Profile”而不是run。我选择了那个选项,但似乎没有什么不同于运行。我希望Android Studio在测试完成后打开一个窗口,其中包含所有方法调用的时间。

enter image description here

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

如何分析Android单元测试? (该配置文件选项真正做了什么?)

1 个答案:

答案 0 :(得分:2)

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

我从未发布过的原始答案包含一些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,如上面的链接所述:

Trace

(再次阅读链接的页面,因为您将需要我的应用程序已经拥有的WRITE_EXTERNAL_STORAGE权限,因此对于我而言,这并不是一件麻烦事。

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

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