1. 場景
因為公司業(yè)務與微信公眾號息息相關(guān)旬渠,要展開自動化測試等需求除了要解決Web端外還需要兼顧Android與Ios等常見移動端設(shè)備的自動化測試方案俱萍,并且目前已決定使用Selenium框架實現(xiàn)Web端自動化測試端壳,為了解決移動微信前端自動化測試方案告丢,現(xiàn)對方案選型展開調(diào)研,調(diào)研主要以查閱網(wǎng)上資源進行损谦。
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. 支持移動端
因為此次調(diào)研僅考慮移動端自動化測試秩贰,僅限于PC端webApplication的幾個框架就不可避免的要排除掉了霹俺,這其中包含Selenium,PhantomJS毒费,KARMAR丙唧。
2.2. 支持多平臺
此外,對于當前市場Android與IOS并存的情景觅玻,需要保證不同平臺項目都能正常運行想际,所以只提供單一平臺的Selendroid,Robotium可以暫時不用考慮了溪厘。
2.3 學習成本
經(jīng)過上面兩次篩選胡本,我們的選擇剩下了Macaca,Appium畸悬,Calabash侧甫。但是由于當前測試人員對Ruby語言認知較少,選擇Calabash的話蹋宦,需要花費更多的額外時間學習語言披粟,由此Calabash也排除在外。
剩下Appium冷冗,Macaca兩種工具守屉,現(xiàn)對兩者進行對比
3. Appium與Macaca對比
3.1 基礎(chǔ)資料
3.1.1. Appium:https://testerhome.com/topics/1045
3.1.2. Macaca:https://macacajs.github.io/zh/introduction
3.2 環(huán)境搭建
3.2.1. Appium: https://testerhome.com/topics/1045
根據(jù)教程搭建的環(huán)境能正常運行案例。
3.2.2. Macaca: https://testerhome.com/topics/7898
需要配置眾多東西蒿辙,搭建好環(huán)境之后無法運行實例拇泛,詢問業(yè)內(nèi)使用過Macaca的朋友滨巴,得到的反饋是目前還存在很多問題,建議我先去國內(nèi)移動端自動化測試社區(qū)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: 無擴展,僅提供基礎(chǔ)框架绪颖,其余需要自己搭配其他框架實現(xiàn)
3.4.2 Macaca: 集成了較多功能秽荤,詳情查看https://macacajs.github.io/zh/coverage,但使用門檻較高
3.5 其他因素
3.5.1 框架維護:
Appium屬于國際通用的開源框架柠横,團隊應該會長期維護窃款,
Macaca屬于阿里開源框架,不清楚會不會維護牍氛,不排除系統(tǒng)導致框架不可用的局面
3.5.2 功能比較:Appium在功能上要優(yōu)于Macaca
4.0 工具抉擇
建議使用Appium作為移動端自動化測試框架晨继,原因如下:
- Appium作為老大哥,功能上較為完善搬俊,文檔于資料等較為齊全
- Appium支持較多語言紊扬,特別是C#,與公司開發(fā)語言一致唉擂,對一些疑難雜癥可以尋求開發(fā)幫助
- Appium直接封裝Selenium框架接口以兼容移動端自動化解決方案問題餐屎,與Web自動化所選擇的Selenium框架統(tǒng)一
- 公司已經(jīng)搭建Jenkins環(huán)境,并且Appium也有工具解決APP抓元素問題玩祟,所以Macaca集成的工具對現(xiàn)階段我們而言用處不大腹缩,還需要額外投入更多成本去學習怎么使用,得不償失空扎。
- 避免陷入Macaca后續(xù)不可用的尷尬局面藏鹊。
Macaca目前還屬于快速迭代的時期,還不太穩(wěn)定转锈,鑒于此盘寡,建議使用Appium并且持續(xù)保持對Macaca的關(guān)注。