自动化工具 谷歌官方发布应用遍历工具 App Crawler

cmlanche · September 17, 2019 · Last by ray replied at April 21, 2020 · 4833 hits

我已经体验过三四个 app 的遍历,很棒,遍历完成后,会给出奔溃、性能等问题结果,并且有每一次操作的截图以及相关日志。目前发现的缺点有两个,第一是需要重签名(讲道理不需要的),第二是不开源,仅仅提供了相关包,并且关键得 apk 包已混淆。

因为需要 fq,不太方便访问,所以我自己把原文翻译下来,把原包下载下来,方便大家阅读下载。

App Crawler 下载链接

链接: https://pan.baidu.com/s/1-1ceIEH5r3nulIQz3_4sPQ 提取码: c2r7 复制这段内容后打开百度网盘手机 App,操作更方便哦

原文链接

https://developer.android.com/training/testing/crawler

原文翻译

App Crawler

使用 App Crawler 工具,可以不需要人为编写任何代码就可以自动测试你的应用。

App Crawler 跟随着被测应用一起运行,自动探索使用什么操作(比如点击、滑动等)来遍历被测应用。当无法使用更多的操作、应用奔溃或者达到遍历时长了,App Crawler 会自动停止。

使用 App Crawler 进行测试很容易,因为不需要编写或维护代码。此外,您可以在各种设备上运行它,以查找崩溃、视觉问题或性能问题。通常,使用基于云的服务 (如 Firebase Test Lab) 来更容易、更快地测试屏幕大小和硬件配置的多种组合是一个好主意。

目标受众

App Crawler 的目标用户是那些希望以最少配置确保应用基本功能的开发人员。除了纯黑盒测试之外,还可以配置爬虫程序来提供特定的输入,比如登录凭证或深度链接。

Getting Started

在开始之前,请确保您拥有最新版本的 Android SDK。这是 Android Studio 自带的。如果您安装了一个独立的 Android SDK,请确保它包含最新的构建工具和平台工具。

然后,下载 App Crawler.(文章开头下载)

接下来,要么启动模拟器,要么使用 USB 电缆连接物理设备。运行以下命令确认设备已连接:

adb devices

要调用 Crawler 程序,首先将存档解压缩到您选择的目录。从该目录中,使用以下命令调用 Crawler 程序:

java -jar crawl_launcher.jar --apk-file path/to/my/app.apk --android-sdk path/to/my/android/sdk

配置选项

Option Description
--android-sdk path Specifies the path to your Android SDK.(必要参数)
--apk-file file Specifies the path to your app APK, which App Crawler then installs and crawls.(如果--app-package-name 未指定,则是必要参数)
--app-package-name name Specifies the package name of your app. Use this option when your app is already installed on the device and no re-installation is required.(如果apk-file未指定,则是必要参数)
--key-store path Specifies the path to the keystore that signs your app and crawler APKs. Use this option when your app requires a specific signature to function properly.
--key-store-password password Specifies the password for the keystore you provided for --key-store option.(如果--key-store指定了,则是必要参数)
--timeout-sec timeout 遍历的超时时间,如果未指定,默认值是 60s
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
共收到 59 条回复 时间 点赞

先收藏了,回头研究一下跟思寒那个有什么区别?


为啥没有跑呢

我这边跑起来了 但是好像和 monkey 区别不是很大 能解答一下吗

咸鱼菜鸡 回复

原理不一样,这个是基于 uiautomator 的,monkey 不基于控件,就是随机点,随心看起来都是点来点去,本质不一样

yiwang 回复

思寒是基于 appium 的,有依赖性,这个不需要,压缩包里面的东西就可以跑了

cmlanche 回复

我尝试了一下 感觉遍历的深度也不是很深 ,好像也没有逻辑性

比 monkey 好的就是没有无效的点击操作 其他的应该差不多

咸鱼菜鸡 回复

谷歌官方的测试实验室都是用的它,逻辑性可能你还没测出来,另外深度貌似可以设置,文档中并没直接说

挺好,可以增加遍历方案的对比,哪个好用用哪个

在路上 回复

帮对比下效果😅 不开源不太符合 Google 风格

cmlanche 回复

可以调 执行速度吗? 试了下速度有点慢

咸鱼菜鸡 回复

你是怎么跑起来的?我跑的没有反应,一直卡着

韩将 回复

--apk-file 似乎有 bug 没搞明白,跑的话用--app-package-name name
另外带上 --ui-automator-mode

哈哈,下个月开始

匿名 #15 · September 18, 2019

能不能遍历 webview?

应该可以,反编译看了里面集成了 espresso,也重签名了,条件都够了

韩将 回复

可能需要签名吧

cmlanche 回复

我昨天后来又跑了几遍 好像每一次路径都是一样的 主要是不能遍历完全 我遍历的是谷歌自己的 setting

第一次使用 vivo 的手机每次启动都需要安装那两个 apk(需要点击继续安装)还挺麻烦的,然后也没跑起来,后面换了个 pixel 的手机跑了一会就停了,感觉也没遍历完。不知道你们执行语句都是怎么写的呢?

调试时遇到了这个问题,有没有知道这是什么原因导致的呢?一执行命令,adb 就断开了

TD 回复

默认遍历时间 60s,你设置长一点

Spaceyhyh 回复

adb devices 有设备吗

咸鱼菜鸡 回复

我也发现的,不是随机的

cmlanche 回复

有设备呀,一执行 crawler 就断开了,我用 atx u2 都没有问题的。还有,百度网盘提供的这个是不是被修改过的,不是谷歌原装的?

Spaceyhyh 回复

原装,没修改,不信可以自己下

cmlanche 回复


所以,我就感觉很奇怪,为什么运行后的日志打印里面,有段打印跟 atx server2 的 qq 群号刚好一样

反编译看了看 迷迷糊糊 等大佬解析


跑不起来啊

我也跑不起来,是签名还是咋的,不知道下面这段 log 有没有啥影响
Line 5740: 09-18 16:42:59.693 D/ApplicationLifecycleMonitorImpl(15410): running callback: androidx.test.tools.crawler.SignaturePatchingCallback@78fd00e
Line 5742: 09-18 16:42:59.693 E/ApplicationLifecycleMonitorImpl(15410): Callback threw exception! (callback: androidx.test.tools.crawler.SignaturePatchingCallback@78fd00e stage: PRE_ON_CREATE)
Line 5746: 09-18 16:42:59.693 E/ApplicationLifecycleMonitorImpl(15410): at androidx.test.tools.crawler.SignaturePatchingCallback.readSignatures(SignaturePatchingCallback.java:22)
Line 5747: 09-18 16:42:59.693 E/ApplicationLifecycleMonitorImpl(15410): at androidx.test.tools.crawler.SignaturePatchingCallback.enableSignaturePatching(SignaturePatchingCallback.java:5)
Line 5748: 09-18 16:42:59.693 E/ApplicationLifecycleMonitorImpl(15410): at androidx.test.tools.crawler.SignaturePatchingCallback.onApplicationLifecycleChanged(SignaturePatchingCallback.java:3)
Line 5760: 09-18 16:42:59.693 D/ApplicationLifecycleMonitorImpl(15410): running callback: androidx.test.tools.crawler.SignaturePatchingCallback@78fd00e
Line 5761: 09-18 16:42:59.693 D/ApplicationLifecycleMonitorImpl(15410): callback completes: androidx.test.tools.crawler.SignaturePatchingCallback@78fd00e

wangyuc 回复

应用被加固了吧,加固了无法重签的

确实是如此 遍历的深度不太行

34Floor has deleted
咸鱼菜鸡 回复

请问下最终您是怎么跑起来的,我这边命令没有报错,但是设备就是没有运行起来。请问方便分享下您的命令吗


这是什么原因呢?大神帮忙看下

咸鱼菜鸡 回复

大神,帮忙看下我的怎么跑不起来?

SugarJ2019 回复

sdk 路径不对啊

跑起来了。再找找原因。

@zhangzhao_lenovo --apk-file 是将 apk 的包名写到文件里面,后面跟文件的路径,和 monkey 测试一个道理

cmlanche 回复

怎么修改执行时间?不是超时时间

TD 回复

超时时间就是遍历执行时间

cmlanche 回复

这样的呀,我执行的时候发现总是点击一个 tab 页的文字一直点不过去,然后我以为是找不到元素(层级太深)超时了,感觉跑不起来。

cmlanche 回复

我用的 --ui-automator-mode 按道理不会重签名吧。

wangyuc 回复

我也觉得不需要,你测一下看看

跑不起来。。😂
Unable to find instrumentation info for: ComponentInfo{androidx.test.tools.crawler/androidx.test.tools.crawler.CrawlMonitor}

cmlanche 回复

--timeout-sec 超时时间控制不了执行时间设置--timeout-sec 1000 以后还是执行 60s

cmlanche 回复

timeout 都是 60s 噢, 怎么改

官方的网站没法进去,需要科学上网吗?

cmlanche 回复

非常非常感谢

SugarJ2019 回复

请问这个问题怎么解决的啊?

原生的不考虑业务场景很难受啊,难道国外的 APP 不需要登录的~~

好东西,先收藏再试验

Author only

百度网盘访问不了,还可以其他链接下载么

咸鱼菜鸡 回复

我也出现了这个情况 这是怎么回事

ray · #60 · April 21, 2020
Author only
ray · #61 · April 21, 2020
Author only
笑哼 专栏文章:App 自动遍历测试_UICrawler 中提及了此贴 29 Dec 10:25
需要 Sign In 后方可回复, 如果你还没有账号请点击这里 Sign Up