AppCrawler AppCrawler 自动遍历工具 1.4.0 版本

思寒_seveniruby · 2016年08月09日 · 最后由 思寒_seveniruby 回复于 2016年08月18日 · 6281 次阅读
本帖已被设为精华帖!

新版本已经更新到 1.5.0

https://testerhome.com/topics/5718
结贴

1.4.0 的首个版本

感谢 appcrawler 群里的一群热心的同学内测, 七夕节放出, 送给单身狗们共勉

AppCrawler 1.4.0 20160809 版本内测地址

zip 包地址: https://pan.baidu.com/s/1gf4Wjpp
jar 包地址: https://pan.baidu.com/s/1dFAzTrb
帮助文档地址: https://pan.baidu.com/s/1jHFzkwA

使用说明

AppCrawler 1.4.0
app爬虫, 用于自动遍历测试. 支持Android和iOS, 支持真机和模拟器
移动测试技术交流 https://testerhome.com
感谢: 晓光 泉龙 杨榕 恒温 mikezhou

Usage: appcrawler [options]

  -a, --app <value>        Android或者iOS的文件地址, 可以是网络地址, 赋值给appium的app选项
  -c, --conf <value>       配置文件地址
  -p, --platform <value>   平台类型android或者ios, 默认会根据app后缀名自动判断
  -t, --maxTime <value>    最大运行时间. 单位为秒. 超过此值会退出. 默认最长运行3个小时
  -u, --appium <value>     appium的url地址
  -o, --output <value>     遍历结果的保存目录. 里面会存放遍历生成的截图, 思维导图和日志
  --capability k1=v1,k2=v2...
                           appium capability选项, 这个参数会覆盖-c指定的配置模板参数, 用于在模板配置之上的参数微调
  -vv, --verbose           是否展示更多debug信息
  --help
示例
appcrawler -a xueqiu.apk
appcrawler -a xueqiu.apk --capability noReset=true
appcrawler -c conf/xueqiu.json
appcrawler -c xueqiu.json --capability udid=[你的udid] -a Snowball.app
appcrawler -c xueqiu.json -a Snowball.app -u 4730
appcrawler -c xueqiu.json -a Snowball.app -u http://127.0.0.1:4730/wd/hub

更新说明

大量的代码重构. 不排除有 bug.
修复了之前反馈的思维导图打不开的问题.
参数使用做了微调

截图改进

修改为点击前截图. 并在截图里用红线标记下要被点击的元素.

下版本计划

1.5.0 [计划中]
支持断点续传机制
支持自动重启 appium 机制, 用于防止 iOS 遍历内存占用太大问题
支持 url 的 xpath 过滤
分离插件到独立项目
标准的 html 报告

已知 Bug

  • windows 上的配置不支持中文
  • windows 上如果目录太深批处理命令会报输入行太长

QQ 群交流

QQ 群: 177933995
群问题: appium 根据 xpath 定位的 api 叫什么?

为了拒绝小白们各种低级重复问题, 加群有问题, 申请加群时写上对的答案才能入群. (大家回帖不要透露答案哦)
实在不会的, 又想入群的, 请自觉打赏本帖. 并把打赏金额比如 1.6 写到加群申请里即可.
我会把钱分给解答问题的群管.

提醒

自动遍历有他独特的价值, 但是他并不能替代你的业务测试. 所以请合理的使用. 随着 app 的质量越来也高, 它的作用就会越来越小.

1.5.0 预告

已经在群内内测了

增加了 html 报告

增加了 yaml 格式的配置并增加了注释

---
#插件列表. 目前有五六个插件
pluginList:
- "com.xueqiu.qa.appcrawler.plugin.TagLimitPlugin"
#log的日志级别, 也可以通过命令行的-vv参数来显示更多log
logLevel: "TRACE"
#是否保存截图, 设置为false可加快速度. 一般截图耗时在3s-10s之间
saveScreen: true
#截图最长等待时间
screenshotTimeout: 20
#当前使用的平台. 会根据app文件的后缀重新判断. 可不填写.
currentDriver: "android"
#最大运行时间
maxTime: 10800

部分配置支持 scala 表达式

比如

#支持简单的scala表达式, MiniAppium是一个全局的Object, 你可以调用他的基本方法实现定制化支持
startupActions:
- "MiniAppium.swipe(\"left\")"
- "MiniAppium.swipe(\"left\")"
- "MiniAppium.swipe(\"left\")"
- "MiniAppium.swipe(\"left\")"
- "MiniAppium.swipe(\"down\")"

如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
共收到 51 条回复 时间 点赞

厉害,都到 1.4.0 版本了,抽空研究一下,有个疑问就是,遍历测试个人认为通过一些方法把 app 所有的路径覆盖一遍,把图截下来。根 testin 云测提交测试的时候,有遍历测试的选择,但是一直疑问,它具体的价值和作用是什么?难道是截图后 tester 自己对着图看一遍吗?@seveniruby

强大,用来配合我的内存泄露检测应该不错,改天试试

—— 来自 TesterHome 官方 安卓客户端

#1 楼 @oscar 自动遍历主要有如下几个功能

  • 遍历基本的界面, 了解主要界面的可用性. 比如兼容性, 基本功能, 这是云平台的遍历提供的基本功能和作用.
  • 利用遍历获取 app 的加载时间和性能数据, 需要借助其他的性能数据抓取工具.
  • 利用遍历验证 app 的内存泄漏以及稳定性等功能
  • UI diff 验证新老版本的功能差异. 并识别兼容性问题.
  • 抓取接口请求 辅助验证一些模块基本接口, 并辅助分析接口调用流程.

appcrawler 还没做到这么强. 只是个小工具. 目前的地位可以理解为相当于更好的功能遍历的 monkey. 可参考下腾讯的 newmonkey 的演讲.

太好了,立马试用一下

#3 楼 @seveniruby ok,那我看一下 newmonkey,有分享的 ppt 或演讲的连接不?

  • appcrawler 实现了利用遍历验证 app 的内存泄漏已经稳定性功能吗?发现内存泄漏或者 crash 有哪些输出,
  • ui diff 这个不错,这个工具支持?

#5 楼 @oscar 目前没 html 报告. 只能自己用命令行去分析不同版本的对应文件. 主要是 dom 文件的比较. 后续的版本会做成 html 报告. newmonkey 那个你自己 google 吧

Monkey 将本帖设为了精华贴 08月09日 19:14

如果有动态页面的话,是不是会 dump 失败?

七夕礼物 666

赞 1 个,回去后,下 jar 包研究看看。

#5 楼 @oscar
内存泄露可以配合 MLeaksFinder 和 leakcanary 使用

马住 试用!

图片上进行标注这个功能很吊,什么技术,比较好奇

#11 楼 @sanlengjingvv 不错, 我就是这么做的, 我最近也刚开始用 MLeaksFinder 测试 iOS 的内存泄漏

思寒开发效率很高!

试用了半个月,点击效率确实不错。
但是有个疑问,我发现 Appcrawler 默认使用的是unicodeKeyboard,这样的话ANDROIDBACK按键不就失效了吗?在我这边是有这个情况的。

提个建议,startUpAction 可以再丰富些。App 打开后的引导流还是有些坑的/.~自己改了一版。

稍微动了一下。

#16 楼 @anikikun 恩, 下个版本加上全功能的支持. 你这么快就学会 scala 了啊. 赞

#17 楼 @seveniruby
哈,刚开始看有些绕。几个关键的点搞明白了倒还好。

思寒,你们设备上BACK键都 OK 的?

#18 楼 @anikikun 支持. android 上默认按照 backButton 来找后退键. 没有才使用 back 方法. iOS 没 back. 必须制定 backButton

发现 1 个 crash 问题,利器!

#20 楼 @pacerron 不错啊 我这边多个版本也发现了十几个 crash 的问题了. 最近正在扩展其他的功能.

#18 楼 @anikikun 如果你懂的 scala, 其实可以用测试用例的方式了. 考虑到很多人不懂 scala. 所以我就没提. 目前已经支持测试用例了. 比如自动化与自动遍历结合在一起跑.

test("交易"){
  see("交易").tap()
  see("交易记录").tap()
  crawl(maxDepth = 2)
}
test("行情"){
  see("搜索股票").tap
  send("alibaba")
  see("BABA").tap
}

请问 1.4 版本不支持 appium1.4 吗?启动时报错如下:

App com.xueqiu.qa.appcrawler.Crawler *** FAILED ***
 org.openqa.selenium.SessionNotCreatedException: A new session could not be created. (Original error: UiAutomator quit before it successfully launched) (WARNING: The server did not provide any stacktrace information)

#23 楼 @jennyyung 这是 appium 的问题. 你自己排查吧.

#22 楼 @seveniruby 恩,这也是个方式。我看了test里的内容。
很强大,加入 FunSuite,让 AppCrawler 不再只是一个爬虫那么简单了...

#24 楼 @seveniruby 好的,另外想问一下 #18 楼的测试用例怎么执行?看 help 里没有对应的参数。

👏

—— 来自 TesterHome 官方 安卓客户端

#11 楼 @sanlengjingvv ,好的谢谢指点

#6 楼 @seveniruby 思寒,这个工具不支持已经安装里的 apk 吧,比如 app 已经安装了,直接指定报名(com.xxx.xx)进行遍历

#28 楼 @oscar 不传递-a 参数就行了

#26 楼 @jennyyung 那个功能需要的知识点有点多, 暂时未公开.

我输入命令行后,一直没有反应,求解?
日志如下:

/Users/hyper/Downloads/appcrawler-1.4.0/bin/appcrawler -a ShunDeBank_2.0.1_DEBUG.apk
2016-08-10 20:49:05 INFO [AppCrawler$.main.98] verbose=false
2016-08-10 20:49:05 INFO [AppCrawler$.main.119] Set Platform=Android
2016-08-10 20:49:05 INFO [AppCrawler$.main.141] app path = /Users/hyper/Downloads/ShunDeBank_2.0.1_DEBUG.apk
2016-08-10 20:49:05 INFO [AppCrawler$.main.148] appium address = Some(http://127.0.0.1:4723/wd/hub/)
AppCrawlerTestCase:
2016-08-10 20:49:06 INFO [AndroidCrawler.initLog.23] set com.xueqiu.qa.appcrawler.AndroidCrawler@46ff33c6 log level to INFO
1001 [main-ScalaTest-running-AppCrawlerTestCase] INFO com.xueqiu.qa.appcrawler.AndroidCrawler  - set com.xueqiu.qa.appcrawler.AndroidCrawler@46ff33c6 log level to INFO
1001 [main-ScalaTest-running-AppCrawlerTestCase] INFO com.xueqiu.qa.appcrawler.AndroidCrawler  - set com.xueqiu.qa.appcrawler.AndroidCrawler@46ff33c6 log level to INFO
1001 [main-ScalaTest-running-AppCrawlerTestCase] INFO com.xueqiu.qa.appcrawler.AndroidCrawler  - set com.xueqiu.qa.appcrawler.AndroidCrawler@46ff33c6 log level to INFO
1001 [main-ScalaTest-running-AppCrawlerTestCase] INFO com.xueqiu.qa.appcrawler.AndroidCrawler  - set com.xueqiu.qa.appcrawler.AndroidCrawler@46ff33c6 log level to INFO
1001 [main-ScalaTest-running-AppCrawlerTestCase] INFO com.xueqiu.qa.appcrawler.AndroidCrawler  - set com.xueqiu.qa.appcrawler.AndroidCrawler@46ff33c6 log level to INFO
2016-08-10 20:49:06 INFO [AndroidCrawler.addLogFile.105] result directory = Android_20160810204906
2016-08-10 20:49:06 INFO [AndroidCrawler.start.126] prepare setup Appium
2016-08-10 20:49:06 INFO [AndroidCrawler.setupAppium.36] url=http://127.0.0.1:4723/wd/hub/
2016-08-10 20:49:06 INFO [AndroidCrawler.setupAppium.37] Capabilities [{automationName=Appium, platformVersion=, app=/Users/hyper/Downloads/ShunDeBank_2.0.1_DEBUG.apk, autoWebview=false, deviceName=demo, platformName=, appActivity=, autoLaunch=true, unicodeKeyboard=true, appium=http://127.0.0.1:4723/wd/hub/, appPackage=, noReset=false}]

Windows 下 Appium 版本只有 1.4,请问楼主 windows 下如何实现完美运行 AppCrawler?

思寒,想请问截图标注是如何实现?

怎么画九宫格?

我还没有尝试过,下载下来体验一把

amazing

—— 来自 TesterHome 官方 安卓客户端

#29 楼 @seveniruby 但是如何指定要跑的 app 呢,如果 app 已经安装

#36 楼 @oscar 配置文件里面设置包名和启动 activity 名称就好啦

#38 楼 @zhangyida 恩,看到了,谢谢

UiAutomator quit before it successfully launched 求解?

https://testerhome.com/topics/715 社区帖子里面有类似问题出现,按照思寒推荐方法没能解决,请问大家有遇到这个问题么,求指点。
@seveniruby
运行环境:
PC: win7
Appium: 1.4.16
appcrawler:1.4
执行命令 appcrawler - a xueqiu.apk

#20 楼 @pacerron 你应该是正常运行起来了 ,能帮我看一下 #40 的问题么,关于 err : UiAutomator quit before it successfully launched
帮忙指点一下。

#41 楼 @victors java -jar appcrawler-1.2.1.jar -p android -o demo/ -u http://127.0.0.1:4723/wd/hub --capability appActivity=.********* --app *******

参考

#43 楼 @pacerron 参考命令行格式?我看你用的是 1.2.1 版本
#42 楼 @pacerron
是手机 uiautomator 存在问题,已修复,在 appcrawler 1.2.1 版本上可以正常遍历,非常感谢!
但是尝试 appcrawler 1.4 版本 尚未成功,文档中快速遍历命令行 “appcrawler -a xueqiu.apk”
err :

info: [debug] executing cmd: "D:\Program Files\adt-bundle-windows-x86_64\sdk\pla
tform-tools\adb.exe" -s 7731G11044C090389 shell "am start -S -a android.intent.a
ction.MAIN -c android.intent.category.LAUNCHER -f 0x10200000 -n com.xueqiu.andro
id/.com.squareup.leakcanary.internal.DisplayLeakActivity"

error: Activity used to start app doesn't exist or cannot be launched! Make sure
 it exists and is a launchable activity

这个问题还没有解决。

遍历时间可以自定义吗?

想利用 appcrawler -c xueqiu.json -p android -a xueqiu.apk 进行遍历
报如下错误
win7 下执行的,请问哪里出了问题,请各位帮忙看下。

Exception in thread "main" java.nio.charset.UnmappableCharacterException: Input
length = 2
        at java.nio.charset.CoderResult.throwException(CoderResult.java:278)
        at sun.nio.cs.StreamDecoder.implRead(StreamDecoder.java:338)
        at sun.nio.cs.StreamDecoder.read(StreamDecoder.java:177)
        at java.io.InputStreamReader.read(InputStreamReader.java:184)
        at java.io.BufferedReader.read1(BufferedReader.java:203)
        at java.io.BufferedReader.read(BufferedReader.java:279)
        at java.io.Reader.read(Reader.java:140)
        at scala.io.BufferedSource.mkString(BufferedSource.scala:96)
        at com.xueqiu.qa.appcrawler.CrawlerConf.load(CrawlerConf.scala:152)
        at com.xueqiu.qa.appcrawler.AppCrawler$.main(AppCrawler.scala:113)
        at com.xueqiu.qa.appcrawler.AppCrawler.main(AppCrawler.scala)

#46 楼 @victors 已知的中文问题 你如果是 windows 的话 把中文去掉就行了

也在踩 windows 的坑中...

匿名 #49 · 2016年08月16日

@seveniruby 发现一个问题,1.4.0 和 1.2.1 是不是执行 config 文件的策略也不一样了?我同一个 config 文件,在 1.2.1 和 1.4.0 下感觉遍历策略很不同哦

#48 楼 @anikikun windows 的坑基本都已经在 1.5.0 版本中解决了. 内测的差不多了. 过几天就放出来

#49 楼 @guaixiaomei 有个对比的结果吗, 看看差别在哪了. 部分的确有差别.

#50 楼 @seveniruby 嗯,不容易呀,编码问题一大痛。思寒可以收一台苏菲当测试机去~哈哈😁

思寒_seveniruby 关闭了讨论 08月18日 11:31
需要 登录 后方可回复, 如果你还没有账号请点击这里 注册