自动化macac

基于Macaca(Java)的客户端功能自动化回归实践(Android & iOS通用校验)

 

0.引言

Macaca是由蚂蚁国际无线团队研发的跨终端自动化测试方案,同时支持Android、iOS、PC,用户层提供了统一的Api。对于Android和iOS客户端而言,同一个App,自动化测试脚本中的执行、校验部分可以做到统一通用,极大地降低自动化测试脚本的编写和维护成本,也确保了多端校验的统一。

Untitled_Page

  • 汇率工具Android实践(左图)iOS实践(右图)【Gif图质量存在失真,完整的Android和iOS视频见文档末尾】:

ExchangeRate_Android_PartCases.gif ExchangeRate_iOS_PartCases.gif

1. 环境准备

1)Macaca 安装Android和iOS对应的驱动

Macaca安装在ATA中已经很多文章有所涉及,推荐直接官网查看:https://macacajs.com/

安装完成之后确认,输入:

     macaca doctor

macaca-doctor

2)App Inspector安装

参考官网的说明:http://macacajs.github.io/macaca/inspector.html

1.安装:
tnpm i app-inspector -g

2.运行:

app-inspector -u Udid --verbose  

app-inspector

备注:

扫描二维码关注公众号,回复: 865984 查看本文章

1)Udid对于Android手机机通过“adb devices”命令获取:

adb devices

2)Udid对于iOS手机可以通过“Xcode-Window-Devices”查找到对应的identifier:

Xcode-Window-Devices

3.运行完“ app-inspector -u Udid --verbose ”会自动打开浏览器,然后通过页面查找元素属性:

app-inspector

app-inspector-gif

属性获取说明【"name"、"css"、"xpath"、"id"、“link text”、“partial link text”】:

1)Selector的具体选择规则
Selector iOS Android
name label or value or accessibility Id content-desc or rawtext
xpath XPath XPath
class name class/type class
id accessibility Id resource Id
link text all property rawtext
partial link text all property(partial) rawtext (partial)
2) Selector对应java代码中的样例如下表:
Selector iOS Android
name String elementName = "汇率工具" String elementName = "汇率工具"
xpath 1)完整xpath String elementXpath = "//XCUIElementTypeApplication[1]/XCUIElementTypeWindow[1]/XCUIElementTypeOther[1]/XCUIElementTypeNavigationBar[1]/XCUIElementTypeButton[2]"
2
相对xpath
String elementXpath = "//XCUIElementTypeButton[@property='**']"
(property
表示xml上的属性名称)
1)完整xpath
String elementXpath = "//android.widget.FrameLayout[1]/android.widget.LinearLayout[1]/android.widget.FrameLayout[1]/android.widget.FrameLayout[1]/android.widget.LinearLayout[1]/android.widget.RelativeLayout[1]/android.widget.RelativeLayout[1]/android.widget.ImageButton[1]"
2
)相对xpath
String elementXpath = "//android.widget.ImageButton[@property='**']]"
(property
表示xml上的属性名称)
class name String elementClassName = ''android.widget.EditText'' String elementClassName = ''Button''
id String elementId = "com.alipay.mobile.ui:id/social_search_normal_input" String elementId = "CreditCardTextField"
link text String elementLinkText = "label=人民币 CNY" String elementLinkText = "人民币 CNY"
partial link text String elementPartialLinkText = "label=人民币" String elementPartialLinkText = "人民币"
3) 常见Tips:
  • Android的xpath在列表页最好不要用,因为随着页面滑动(页面可见区变化),同一个元素对应的xpath是会变化的;【原因:iOS是dump整个页面的xml,Android是dump可见区域的xml】
  • swipe()因iOS特性,对于滑动的初始点击响应较为灵敏,需要将Scroll duration设置小一些,确保能够滑动成功,建议值100 ms,否则可能变为drag事件;
  • 另外同样由于iOS是dump整个页面的xml,Android是dump可见区域的xml的原因,对于findElement(),iOS只要元素存在在页面中,不管当前是否可见,均可找到,但是对于Android必须要元素存在于当前可见范围才可找到;对于该情况需要先用isElementExist()判断寻找的元素是否当前可视区可见(Android & iOS同);
  • 运行app-inspector时,WebDriverAgent工程如果是用的自己的AppID签名的话需要将修改一下,比如加个后缀,能够区分即可【macaca ios驱动中也有一个WebDriverAgentRunner工程,跑iOS用例时报错时一样的方法处理】;即报如下错误时:

error-log

通过报错信息上面的信息可以查找到对应的工程目录:

WebDriverAgentRunner

搜索com.facebook.WebDriverAgentRunner,将工程的Product Bundle Identifier修改加个后缀即可;

Bundle identifier

2. 功能回归用例(Android & iOS 通用校验)

本文主要讲解如果通过UI用例回归验证功能,在功能测试覆盖阶段将能够自动化的功能用例Cover掉,减少人工执行实践,并可持续回归;因为Macaca做到了用户层Api的统一,所以基于Macaca可以做到Android和iOS校验执行用例的统一,仅仅是各自元素的指定需要单独分别维护。

1)用例编写

下面直接通过在“汇率工具”项目中的实践来说明用例编写:

1.工程目录及对应的说明如下图:

project

2.config.properties说明:

config.properties.png

3.BaseTest说明

BaseTest.png

4.Capabilities说明

Capabilities.png

特别说明:对于autoAcceptAlerts(弹框处理)尽量不要全局设置为true(降低性能、影响业务功能测试),可以在用例中通过主动调用函数acceptAlert();

其他参考:https://macacajs.com/desired-caps

5.Page元素获取说明:

Page-1.png

Page-2.png

Page-3.png

特别说明:如此设计之后仅仅需要维护page类中的Android和iOS元素,具体的用例不需要关心具体的元素指定;

6.测试用例说明:

用例编写如下,主要是操作对应的元素,然后校验元素值的准确性,java版本api:https://macacajs.github.io/wd.java/

Testcase.png

2)用例执行

1. 起macaca server

macaca server --verbose

macaca-server

备注:钱包国际业务工程地址:http://gitlab.alipay-inc.com/yadong.zyd/AlipayWalletIntlBizMacaca

2. 编译器里面run testcase即可

目前Macaca JS版本已经接入SLM,Java版本正在接入中,接入之后则可以持续集成(线下也可以通过Jekins配置搭建),此外也可以通过功能用例去跑兼容性;

整个接入Macaca(Java)版本遇到了很多的问题(环境、api等等),最后通过和Macaca项目组的共同分析和跟进,基本得到了解决,大家在使用过程中也可以与我们联系;

猜你喜欢

转载自www.cnblogs.com/SouthRain/p/6689151.html