如何在 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.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 时如何传递参数?