多平台自动遍历测试工具 AppCrawler

多平台自动遍历测试工具 AppCrawler

1. 简介

AppCrawler 是由 seveniruby(霍格沃兹测试学院创始人思寒)开源的一个自动化遍历测试项目,它是一个基于 Appium 的自动遍历工具,支持 Android 和 iOS,可通过配置设定遍历规则。

开源项目地址:https://github.com/seveniruby/AppCrawler

  • 优点:
    • 跨平台性: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

启动步骤:

  1. 启动 Appium
  2. 启动模拟器或真机,保证 adb devices 可有找到你的设备
  3. 用下面命令遍历一个已经安装过的 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

点击行情,对行情的指定范围进行遍历。

  1. 启动雪球 App
  2. 利用 testcase 进入行情页
  3. 利用 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

点击行情,对页面的上标题和热股进行自动遍历,并优先选取热股,然后选取上标题的内容:

  1. 启动雪球 App
  2. 利用 testcase 进入行情页
  3. 利用 selectedList 选定范围,比如只遍历上标题(如上图)和热股这两栏
  4. 利用 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>

全部评论

相关推荐

11-04 19:05
已编辑
东莞城市学院 单片机
不知道怎么取名字_:你这个要实习两年?哪有这么久的,感觉就是即使你毕业了,但还按实习的话,是不是不用给你缴社保公积金啥的
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务