多平台自动遍历测试工具 AppCrawler
多平台自动遍历测试工具 AppCrawler
1. 简介
AppCrawler 是由 seveniruby(霍格沃兹测试学院创始人思寒)开源的一个自动化遍历测试项目,它是一个基于 Appium 的自动遍历工具,支持 Android 和 iOS,可通过配置设定遍历规则。
- 优点:
- 跨平台性:AppCrawler 是基于 Appium 开发的,所以支持 Android 和 iOS;
- 可控性:对测试的页面,控件类型的选择,测试的深度等都可自由控制;
- 可定制:可自定义操作,如输入,滑动等;
- 缺点:
- 运行速度较慢:AppCrawler 是基于 Appium 开发具备了跨平台的优点,但是也因为这层封装造成了运行速度相对较慢;
- 使用门槛高:正因为使用灵活性的问题,也造成了使用门槛的提高,主要基于 YAML 文件中使用 Appium 的相关技术知识进行配置,这就对使用者有了一定的技术要求;
2. 环境安装
最新版本下载地址: https://pan.baidu.com/s/1dE0JDCH
AppCrawler 是 jar 包,需要安装依赖环境:
- Java版本:Java8
- Appium
使用命令查看帮忙文档,相关参数含义和部分注解可参考帮忙文档:
java -jar appcrawler-2.4.0-jar-with-dependencies.jar
3. 使用
AppCrawler 在使用之前,确保安装了 Appium 和 adb 工具:
- Appium
- wda
- uiautomator2
- adb
- selenium
启动步骤:
- 启动 Appium
- 启动模拟器或真机,保证 adb devices 可有找到你的设备
- 用下面命令遍历一个已经安装过的 App,比如雪球
java -jar appcrawler-2.4.0-jar-with-dependencies.jar \ --capability "appPackage=com.xueqiu.android,\ appActivity=.view.WelcomeActivityAlias"
Appcrawler 默认从中心元素开始遍历,自动执行点击,滑动等操作,同时会在当前目录生成以时间为命名的文件夹,包含数据,文件、截图、log:
4. 配置文件
AppCrawler 可以利用配置文件进行驱动,使用下面命令生成一个配置文件 demo.yml
java -jar appcrawler.jar --demo
配置好 demo.yml 后,使用 -c 即可加载配置文件,--capability 指定 App 信息,-o 指定报告输出目录
java -jar <appcrawler.jar路径> \ -c example.yml \ --capability "appPackage=com.xueqiu.android,appActivity=.view.WelcomeActivityAlias" \ -o /tmp/xueqiu/1
注意:执行参数比配置文件优先级别高;
demo.yml 有以下主要功能:
- capability设置:与 Appium 完全一致;
- testcase:用于启动 App 后的基础测试用例;
- selectedList:遍历范围设定;
- triggerActions:特定条件触发执行动作的设置;
capability
capability 与 Appium 一致,具体内容可查看 Appium 的 capability:
capability: noReset: "false" fullReset: "false" appium: "http://127.0.0.1:4723/wd/hub" appPackage: com.xueqiu.androi appActivity: .view.WelcomeActivityAlias automationName: uiautomator2 autoGrantPermissions: true
testcase
启动 App 后优先执行 testcase 中的动作。
完整形态:
- given: 所有的先决条件,给定一个条件,只有条件成立的时候才完成后面的操作(实际用的较少);
- when: 先决条件成立后的行为,对什么事件做什么事情;
- then: 断言集合,事件结束后对结果断言;
具体写法:
testcase:
name: "TesterHome AppCrawler"
steps:
- when:
xpath: //*
action: driver.swipe(0.5, 0.8, 0.5, 0.2)
- when:
xpath: //*
action: driver.swipe(0.5, 0.2, 0.5, 0.8)
then:
- //*[contains(@text, '美股')] 简写形态:
- 直接使用 xpath 对应 when 里面的 xpath
- 直接使用 action 对应 when 里面的 action
具体写法,下面的 steps 前面有空格,不要省略:
testcase: steps: - xpath: 自选 action: click
action 的动作支持:
- "" :只是截图记录
- back:后退
- backApp:回退到当前的 App,默认等价于 back 行为,可定制
- monkey:随机事件
- xxx()执行代码:
- Thread.sleep(1000)
- driver.swipe(0.9,0.8,0.9,0.5)
- click:点击事件
- longTap:长按
- 除以上所有行为外均视为输入行为
正则:使用^开头的就认定为正则,比如:^确定$,^.*输入密码。
selectedList
selectedList 可设定遍历范围,比如点击所有可点击的 TextView 和 ImageView 控件:
selectedList: - xpath: //android.widget.ImageView[@clickable='true'] - xpath: //*[@clickable='true' and contains(@class,"Text")]
与之类似的有 firstList 和 lastList,表示优先点击与最后点击:
- firstList: 优先被点击
- lastList:最后执行
设置其最后才执行"确定"按钮,修改完成如下:
lastList:
- { xpath: text_yes, action: click } 其他参数
- backButton: 当所有元素都被点击后默认后退控件定位
- blackList:黑名单
- triggerAction: 特定条件出发执行动作的设置
- tagLimit: 自定义控件类型的点击次数
- tagLimitMax:同类型的最多点击的次数
- assertGlobal:设置一个全局断言,可断言当前app是否包名符合要求
- maxDepth: 遍历的最大深度
自动遍历过程
- 信息的获取:
- 把当前app的界面dump为xml结构
- 获取待遍历元素
- 遍历范围 selectedList
- 过滤黑名单 小控件 不可见控件 blackList
- 重排控件顺序 firstList lastList
- 跳过已点击 + 跳过限制点击的控件tagLimit
- 根据匹配的规则执行action
- 循环上面的步骤
5. 测试报告
打开测试报告中的 index.html 文件,AppCrawler 把每次点击当做一个测试用例,每一个页是一个测试套件:
- Succeed:成功
- Failed:失败
- Canceled:发现了控件,但没点击
appcrawler.log 记录了执行步骤(-vv参数让log更详细),第一项表示执行的步骤,同时会显示源码的位置,选取元素的数量,选取的元素及动作:
6. 案例1
点击行情,对行情的指定范围进行遍历。
- 启动雪球 App
- 利用 testcase 进入行情页
- 利用 selectedList 选定范围,比如只遍历,上证指数,资金这一栏
由于配置文件过长,只列举关键内容,其他内容跟默认配置相同:
capability: noReset: "true" fullReset: "false" appium: "http://127.0.0.1:4723/wd/hub" appPackage: "com.xueqiu.android" appActivity: ".view.WelcomeActivityAlias" testcase: steps: - xpath: "//*[@text='行情']" action: click selectedList: - xpath: "//*[contains(@resource-id,\ 'stock_index_quote_view_layout')]//*[@clickable='true']"
注意:
- 可以用{}包裹需要执行的事件,元素定位符和操作 action 用逗号隔开。
- xpath 中直接写 id 或 text 文本信息,就会默认使用包含去查找。
7. 案例2
点击行情,对页面的上标题和热股进行自动遍历,并优先选取热股,然后选取上标题的内容:
- 启动雪球 App
- 利用 testcase 进入行情页
- 利用 selectedList 选定范围,比如只遍历上标题(如上图)和热股这两栏
- 利用 firstList 设定优先遍历热股
由于配置文件过长,只列举关键内容,其他内容跟默认配置相同:
capability: noReset: "true" fullReset: "false" appium: "http://127.0.0.1:4723/wd/hub" appPackage: "com.xueqiu.android" appActivity: ".view.WelcomeActivityAlias" testcase: steps: - xpath: "//*[@text='行情']" action: click selectedList: - xpath: "//*[contains(@resource-id,'quote_view_layout')]\ //*[@clickable='true']" - xpath: "//*[contains(@resource-id, 'id/pager')]\ //*[@clickable='true']" firstList: - xpath: "//*[contains(@resource-id, 'id/pager')]\ //*[@clickable='true']"
小结
以上,我们熟悉了多平台自动遍历测试工具 AppCrawler 的使用。接下来了解多设备管理平台 STF 的使用。
<p> 专刊包含了10+年经验测试架构师对测试职业发展的深度解读 帮助你掌握当下 BAT 流行的 App 自动化测试技术基础技能和工具使用;以及从入门到进阶的自动化测试实战经验,在面试中能够脱颖而出。 本专刊购买后即可解锁所有章节,故不可以退换哦~ </p> <p> <br /> </p> <p> <br /> </p>

上海得物信息集团有限公司公司福利 1237人发布