AppCrawler AppCrawler 自动遍历工具 1.4.0 版本

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

新版本已经更新到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爬虫, 用于自动遍历测试. 支持AndroidiOS, 支持真机和模拟器
移动测试技术交流 https://testerhome.com
感谢: 晓光 泉龙 杨榕 恒温 mikezhou

Usage: appcrawler [options]

-a, --app <value> Android或者iOS的文件地址, 可以是网络地址, 赋值给appiumapp选项
-c, --conf <value> 配置文件地址
-p, --platform <value> 平台类型android或者ios, 默认会根据app后缀名自动判断
-t, --maxTime <value> 最大运行时间. 单位为秒. 超过此值会退出. 默认最长运行3个小时
-u, --appium <value> appiumurl地址
-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的坑中...

@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
需要 登录 后方可回复, 如果你还没有账号请点击这里 注册