1. 场景
因为公司业务与微信公众号息息相关,要展开自动化测试等需求除了要解决Web端外还需要兼顾Android与Ios等常见移动端设备的自动化测试方案,并且目前已决定使用Selenium框架实现Web端自动化测试,为了解决移动微信前端自动化测试方案,现对方案选型展开调研,调研主要以查阅网上资源进行。
2. 工具选择
目前市面上主流开源的自动化测试框架有如下:
框架名称 | 支持平台 | 脚本语言 |
---|---|---|
Macaca | PC,IOS,Android,Hybrid | Js、Java、Python |
Appium | PC,IOS,Android,Hybrid | Ruby、Python、Java、Js、OC、PHP、C#(.Net) |
Selenium | PC(WebApplication) | Java,C#,Python,Ruby,PHP,Perl,JS |
Selendroid | Android | Java,Python,Ruby |
Robotium | Android | Java |
PhantomJS | PC(WebApplication) | Js |
Calabash | IOS,Android,Hybrid | Ruby |
KARMA | PC(WebApplication) | JS |
2.1. 支持移动端
因为此次调研仅考虑移动端自动化测试,仅限于PC端webApplication的几个框架就不可避免的要排除掉了,这其中包含Selenium,PhantomJS,KARMAR。
2.2. 支持多平台
此外,对于当前市场Android与IOS并存的情景,需要保证不同平台项目都能正常运行,所以只提供单一平台的Selendroid,Robotium可以暂时不用考虑了。
2.3 学习成本
经过上面两次筛选,我们的选择剩下了Macaca,Appium,Calabash。但是由于当前测试人员对Ruby语言认知较少,选择Calabash的话,需要花费更多的额外时间学习语言,由此Calabash也排除在外。
剩下Appium,Macaca两种工具,现对两者进行对比
3. Appium与Macaca对比
3.1 基础资料
3.1.1. Appium:https://testerhome.com/topics/1045
3.1.2. Macaca:https://macacajs.github.io/zh/introduction
3.2 环境搭建
3.2.1. Appium: https://testerhome.com/topics/1045
根据教程搭建的环境能正常运行案例。
3.2.2. Macaca: https://testerhome.com/topics/7898
需要配置众多东西,搭建好环境之后无法运行实例,询问业内使用过Macaca的朋友,得到的反馈是目前还存在很多问题,建议我先去国内移动端自动化测试社区TesterHose排雷踩坑,研究了半天后没法解决问题(资料少)
3.3 实例对比
3.3.1 Appium: https://testerhome.com/wiki/apiumpythonapichinese
from appium import webdriver
import time
# 配置
desired_caps = {}
desired_caps['deviceName'] = 'GT-N7100'
desired_caps['platformName'] = 'Android'
desired_caps['version'] = '4.3'
desired_caps['appPackage'] = 'com.job.android'
# 实例化浏览器
driver = webdriver.Remote('http://127.0.0.1:4723/wd/hub', desired_caps)
# 寻找元素并操作
driver.find_element_by_id("com.job.android:id/closebtn").click()
driver.find_element_by_id("com.job.android:id/tv_msg_remind_right").click()
driver.find_element_by_id("com.job.android:id/loginbutton").click()
driver.find_element_by_id("com.job.android:id/login_username").send_keys("123456")
driver.find_element_by_id("com.job.android:id/login").click()
3.3.2 Macaca: http://macacajs.github.io/macaca-wd
#coding=utf-8
import unittest
import time
from macaca import WebDriver
desired_caps = {
'platformName': 'Android', # iOS, Android, Desktop
#'browserName': 'Chrome', # Chrome, Electron
"package": "com.huawei.iptv.stb",
"activity": "com.huawei.iptv.stb.ui.HeadTabActivity",
"deviceName":"192.168.1.105:5555",
}
server_url = {
'hostname': '127.0.0.1',
'port': 3456
}
driver = WebDriver(desired_caps, server_url)
driver.init()
driver.element_by_name("直播").click()
总的来说,两者的API相似度很高,没有什么特别之处
3.4 扩展功能
3.4.1 Appium: 无扩展,仅提供基础框架,其余需要自己搭配其他框架实现
3.4.2 Macaca: 集成了较多功能,详情查看https://macacajs.github.io/zh/coverage,但使用门槛较高
3.5 其他因素
3.5.1 框架维护:
Appium属于国际通用的开源框架,团队应该会长期维护,
Macaca属于阿里开源框架,不清楚会不会维护,不排除系统导致框架不可用的局面
3.5.2 功能比较:Appium在功能上要优于Macaca
4.0 工具抉择
建议使用Appium作为移动端自动化测试框架,原因如下:
- Appium作为老大哥,功能上较为完善,文档于资料等较为齐全
- Appium支持较多语言,特别是C#,与公司开发语言一致,对一些疑难杂症可以寻求开发帮助
- Appium直接封装Selenium框架接口以兼容移动端自动化解决方案问题,与Web自动化所选择的Selenium框架统一
- 公司已经搭建Jenkins环境,并且Appium也有工具解决APP抓元素问题,所以Macaca集成的工具对现阶段我们而言用处不大,还需要额外投入更多成本去学习怎么使用,得不偿失。
- 避免陷入Macaca后续不可用的尴尬局面。
Macaca目前还属于快速迭代的时期,还不太稳定,鉴于此,建议使用Appium并且持续保持对Macaca的关注。