自動(dòng)化測(cè)試背景
自動(dòng)化測(cè)試可以反復(fù)迅速的執(zhí)行一些測(cè)試用例,從而降低執(zhí)行的成本,提升測(cè)試速度,可以讓團(tuán)隊(duì)把回歸的精力放在另一些不合適用自動(dòng)化測(cè)試去實(shí)現(xiàn)的 測(cè)試用例上。好搞定的問(wèn)題讓機(jī)器去搞定,難搞定的問(wèn)題用人去搞定
優(yōu)點(diǎn)
- 節(jié)省人力,只要代碼維護(hù)的好,不需要那么多人就可完成測(cè)試
- 節(jié)省時(shí)間,測(cè)試腳本可以晚上或者是周末跑測(cè)試腳本
- 優(yōu)化資源分配,在運(yùn)行測(cè)試腳本的同時(shí),QA可以做其他事,比如設(shè)計(jì)新測(cè)試用例
- 增加軟件的可信度,測(cè)試是機(jī)器執(zhí)行的,排除了手工測(cè)試時(shí)因人為情緒而發(fā)生的隨意性或疏忽性,測(cè)試結(jié)果更可信
- 能完成手工不易控制的工作,比如采集系統(tǒng)cpu占有率信息,手工計(jì)算很復(fù)雜,還要進(jìn)行數(shù)據(jù)比對(duì),使用腳本更簡(jiǎn)單,更方便。
自動(dòng)化測(cè)試的缺點(diǎn):
- 腳本維護(hù)成本高,尤其是版本變動(dòng)比較大,對(duì)項(xiàng)目來(lái)說(shuō),是潛在的風(fēng)險(xiǎn)
- 不易發(fā)現(xiàn)新bug
下面介紹自動(dòng)化測(cè)試使用的工具, 關(guān)于環(huán)境安裝 ,比較簡(jiǎn)單, 這里就不再概述
Appium 介紹
Appium
用于自動(dòng)化測(cè)試iOS
、Android
和 Windows
桌面平臺(tái)上的原生、移動(dòng) Web
和混合應(yīng)用
。原生應(yīng)用:指用
iOS
、 Android
或者 Windows SDK
編寫(xiě)的應(yīng)用。移動(dòng) Web 應(yīng)用 :用移動(dòng)端瀏覽器訪問(wèn)的應(yīng)用( Appium 支持 iOS 上的 Safari 、Chrome 和 Android 上的內(nèi)置瀏覽器)。
混合應(yīng)用 hybrid:
Hybrid app
Appium
是跨平臺(tái)的:允許用多樣的API
對(duì)多平臺(tái)(iOS、Android、Windows)寫(xiě)測(cè)試。做到在iOS
、Android
和 Windows
測(cè)試套件之間復(fù)用代碼。
Appium 原理
最底層都是基于系統(tǒng)自帶的自動(dòng)化框架:
- iOS 9.3 及以上: 蘋(píng)果的 XCUITest
- iOS 9.3 及以下: 蘋(píng)果的 UIAutomation
- Android 4.3+: 谷歌的 UiAutomator / UiAutomator2
- Android 2.3+: 谷歌的 Instrumentation.
- Windows: 微軟的 WinAppDriver
appium
把這些系統(tǒng)本身提供的框架包裝進(jìn)一套 API —— WebDriver API 中。WebDriver(Selenium WebDriver)規(guī)定了一個(gè)客戶端-服務(wù)器協(xié)議(稱為 JSON Wire Protocol),按照這種客戶端-服務(wù)器架構(gòu),可以使用任何語(yǔ)言編寫(xiě)的客戶端向服務(wù)器發(fā)送適當(dāng)?shù)?HTTP 請(qǐng)求。可以自由使用測(cè)試運(yùn)行器和測(cè)試框架;客戶端程序庫(kù)不過(guò)是一個(gè)簡(jiǎn)單的 HTTP 客戶端,
Appium 的概念
客戶端 / 服務(wù)器
Appium
的核心一個(gè)是暴露 REST API 的 WEB 服務(wù)器。它接受來(lái)自客戶端的連接,監(jiān)聽(tīng)命令并在移動(dòng)設(shè)備上執(zhí)行,答復(fù) HTTP 響應(yīng)來(lái)描述執(zhí)行結(jié)果。
會(huì)話(Session)
自動(dòng)化始終在一個(gè)會(huì)話的上下文中執(zhí)行,這些客戶端程序庫(kù)以各自的方式發(fā)起與服務(wù)器的會(huì)話,但最終都會(huì)發(fā)給服務(wù)器一個(gè) POST /session
請(qǐng)求,請(qǐng)求中包含一個(gè)被稱作「預(yù)期能力(Desired Capabilities)」的 JSON 對(duì)象。這時(shí)服務(wù)器就會(huì)開(kāi)啟這個(gè)自動(dòng)化會(huì)話,并返回一個(gè)用于發(fā)送后續(xù)命令的會(huì)話 ID。
預(yù)期能力(Desired Capabilities)
預(yù)期能力
是一些發(fā)送給 Appium
服務(wù)器的鍵值對(duì)集合,告訴服務(wù)器我們想要啟動(dòng)什么類型的自動(dòng)化會(huì)話。也可以修改服務(wù)器在自動(dòng)化過(guò)程中的行為。
具體參數(shù)可以參考Appium 服務(wù)器初始化參數(shù)(Capability)
Appium 服務(wù)器/ Appium Server GUI
Appium 是一個(gè)用 Node.js 寫(xiě)的服務(wù)器。可以從源碼構(gòu)建安裝或者從 NPM 直接安裝
Appium Server GUI
: 圖形化Server工具
Appium 客戶端
有一些客戶端程序庫(kù)(分別在 Java、Ruby、Python、PHP、JavaScript 和 C# 中實(shí)現(xiàn)),它們支持 Appium 對(duì) WebDriver 協(xié)議的擴(kuò)展。你需要用這些客戶端程序庫(kù)代替常規(guī)的 WebDriver 客戶端。
Appium Inspector
這有一個(gè) Appium 服務(wù)器的圖形界面封裝可以下載,它適用于任何平臺(tái)。它打包了 Appium 服務(wù)器運(yùn)行需要的所有東西。還提供一個(gè) Inspector
使你可以查看應(yīng)用程序的層級(jí)結(jié)構(gòu), 以及錄制各個(gè)語(yǔ)言的腳本
自動(dòng)化測(cè)試流程
啟動(dòng)appium
兩種方式:
一、 終端
appium -p 4723
二、客戶端
運(yùn)行WDA
兩種方式:
一、xcode
二、xcodebuild
xcodebuild clean -project /Users/a58/Desktop/PROGECT/WebDriverAgent/WebDriverAgent.xcodeproj -scheme WebDriverAgentRunner -destination id=22ec9aedc59c3ea52444d7a996c8f6aaa9664298,platform=iOS
xcodebuild test -project /Users/a58/Desktop/PROGECT/WebDriverAgent/WebDriverAgent.xcodeproj -scheme WebDriverAgentRunner -destination id=22ec9aedc59c3ea52444d7a996c8f6aaa9664298,platform=iOS
運(yùn)行成功之后
啟動(dòng)Appium Inspector
啟動(dòng)之后可以使用 App Inspector 來(lái)定位元素,以及錄制腳本, 最主要還是用來(lái)定位元素, 定位到元素之后,就可以進(jìn)行后續(xù)的自動(dòng)化操作(點(diǎn)擊、滑動(dòng)、拖動(dòng)、輸入以及各種手勢(shì))
腳本
為了方便后續(xù)的維護(hù)與拓展,新建了python項(xiàng)目, 并導(dǎo)入了pytest測(cè)試框架,增加測(cè)試的便利性
工程目錄如圖:
appium_cof : appium、wda啟動(dòng)相關(guān)
base: 基類
config: 配置相關(guān), app, 手機(jī), 啟動(dòng)項(xiàng)設(shè)置等
page: APP相關(guān)也民安
testcase: 測(cè)試用例
util: 使用到的工具類等