自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

復(fù)雜業(yè)務(wù)場(chǎng)景下如何進(jìn)行iOS端自動(dòng)化測(cè)試

開(kāi)發(fā) 開(kāi)發(fā)工具 自動(dòng)化
目前來(lái)說(shuō),分布式運(yùn)行并不是難點(diǎn),亟需解決的問(wèn)題是針對(duì)特殊平臺(tái)和復(fù)雜場(chǎng)景下的測(cè)試,例如復(fù)雜業(yè)務(wù)場(chǎng)景下iOS平臺(tái)的自動(dòng)化測(cè)試。

之前寫(xiě)過(guò)一篇文章,提到了一些分布式自動(dòng)化測(cè)試和容器化技術(shù)結(jié)合的架構(gòu)設(shè)想。但是目前來(lái)說(shuō),分布式運(yùn)行并不是難點(diǎn),亟需解決的問(wèn)題是針對(duì)特殊平臺(tái)和復(fù)雜場(chǎng)景下的測(cè)試,例如復(fù)雜業(yè)務(wù)場(chǎng)景下iOS平臺(tái)的自動(dòng)化測(cè)試。

[[189159]]

移動(dòng)應(yīng)用特點(diǎn)是簡(jiǎn)單易用和UI簡(jiǎn)潔,以便用戶在移動(dòng)端完成一件事的路徑盡可能短。所以一般情況下,我們遇到的iOS APP場(chǎng)景相對(duì)于Web應(yīng)用要簡(jiǎn)單一些。所以一般情況下iOS自動(dòng)化測(cè)試并不會(huì)遇見(jiàn)復(fù)雜場(chǎng)景,測(cè)試反饋時(shí)間短,效率相對(duì)較高。對(duì)運(yùn)行環(huán)境來(lái)說(shuō),只需要相應(yīng)版本macOS系統(tǒng)以及Xcode環(huán)境即可。

但是,對(duì)于大型企業(yè)的移動(dòng)應(yīng)用,例如電商平臺(tái)、共享出行平臺(tái)等,牽扯到的主要幾個(gè)問(wèn)題:

1. 大規(guī)模的測(cè)試用例導(dǎo)致測(cè)試反饋時(shí)間太長(zhǎng)

說(shuō)到這個(gè)問(wèn)題,就要說(shuō)到現(xiàn)在主流的移動(dòng)端自動(dòng)化測(cè)試框架Appium和Calabash。我所經(jīng)歷過(guò)的大部分項(xiàng)目,無(wú)外乎使用其一。

但在Xcode 7之后,iOS Simulator變得越來(lái)越慢(做iOS的同學(xué)們應(yīng)該都有體會(huì)),更不幸的是,在iOS 10、Xcode 8之后,Apple棄用了UIAutomation,導(dǎo)致大量高效、常用的API無(wú)法使用。

并且迄今為止,Appium沒(méi)有針對(duì)iOS 10平臺(tái)發(fā)布一個(gè)正式版本的lib和APP,這就導(dǎo)致一些用戶無(wú)法使用inspector定位元素(使用ARC的用戶除外),雖然官方建議不要使XPath進(jìn)行元素定位,但有的時(shí)候我們不得不這么做。***殺器是iOS自動(dòng)化受到Apple的單例限制(一臺(tái)物理主機(jī)同一時(shí)間有且僅有一個(gè)Instrument)。

這些種種最終導(dǎo)致了iOS自動(dòng)化測(cè)試時(shí)間太長(zhǎng),更不用談及多種iOS設(shè)備的兼容性問(wèn)題了,自動(dòng)化實(shí)現(xiàn)過(guò)程成本過(guò)高,令大部分組織和團(tuán)隊(duì)食之無(wú)味、棄之可惜。

iOS自動(dòng)化測(cè)試時(shí)間太長(zhǎng)

2. 復(fù)雜場(chǎng)景無(wú)法在一臺(tái)機(jī)器上進(jìn)行測(cè)試

對(duì)于復(fù)雜場(chǎng)景的應(yīng)用來(lái)說(shuō),我們很難通過(guò)現(xiàn)有框架同時(shí)在一臺(tái)物理機(jī)上控制多個(gè)不同的模擬器,也無(wú)法隨意的切換到系統(tǒng)級(jí)控件去查看APP觸發(fā)的通知等等。你可以通過(guò)一些合法途徑使用虛擬化做iOS端的并發(fā)測(cè)試(切記合法途徑)。

但這樣還是逃不掉物理機(jī)龐大的開(kāi)銷(xiāo)以及虛擬機(jī)的性能損耗問(wèn)題,拋開(kāi)這個(gè)問(wèn)題不講,單從復(fù)雜場(chǎng)景來(lái)說(shuō),例如出行平臺(tái),你需要一臺(tái)機(jī)器作為乘客發(fā)布訂單,還需要多個(gè)擁有不同地址定位的車(chē)主來(lái)測(cè)試訂單推送優(yōu)先級(jí)等。對(duì)于這種復(fù)雜場(chǎng)景來(lái)說(shuō)Appium控制起來(lái)就很難了。

使用虛擬化做iOS端的并發(fā)測(cè)試

3. 測(cè)試場(chǎng)景需要切換不同APP

如今很多的APP功能不單單是在應(yīng)用本身,可能還需要跟系統(tǒng)應(yīng)用以及其他應(yīng)用進(jìn)行交互,例如用戶在被測(cè)APP中執(zhí)行某個(gè)操作之后,需要檢查notification,或者在測(cè)試的過(guò)程中需要切換無(wú)網(wǎng)絡(luò)環(huán)境,從而測(cè)試APP的不同行為。

想到這些復(fù)雜場(chǎng)景和各種坑之后,估計(jì)打算做iOS測(cè)試的同學(xué)心里開(kāi)始打退堂鼓了。下面我們來(lái)一步步逐一解決這些問(wèn)題:

問(wèn)題一:解決Instrument單例的限制

對(duì)于這個(gè)問(wèn)題困擾了很久,那業(yè)界領(lǐng)先的互聯(lián)網(wǎng)公司又是怎么做的呢?有一次看到Uber的Showcase,在一臺(tái)機(jī)器上啟動(dòng)了5、6臺(tái)模擬器,用不同類型的賬號(hào)登錄(乘客、車(chē)主)每個(gè)模擬器做不同的行為。由于是在物理機(jī)上的對(duì)iOS模擬器的操作,速度和性能都得到了很好的保證。他們是怎么解決Instrument的限制呢?

我們可以通過(guò)使用Apple私有API,同時(shí)操作不同型號(hào)的模擬器,對(duì)多個(gè)不同的Simulator進(jìn)行批量化操作,例如啟動(dòng)、重置、安裝、運(yùn)行等操作:

使用Apple私有API

問(wèn)題二:解決復(fù)雜場(chǎng)景下控制不同iOS模擬器的不同行為

xcodebuild命令使我們可以把WebDriverAgent運(yùn)行在我們想要的設(shè)備上,但如果使用Apple的命令,還是只能在單個(gè)設(shè)備上安裝運(yùn)行,之前運(yùn)行的多臺(tái)設(shè)備都會(huì)自動(dòng)關(guān)掉,而只會(huì)保留命令中的destination,默認(rèn)啟動(dòng)8100端口去檢測(cè)這臺(tái)設(shè)備:

如果這樣的話,那我們之前做的所有工作不就沒(méi)有任何意義了嗎?別急,我們已然可以通過(guò)Apple提供的資源,對(duì)不同的設(shè)備啟動(dòng)不同的進(jìn)程端口進(jìn)行監(jiān)聽(tīng)。

這時(shí)我們可以通過(guò)curl命令launch我們需要的進(jìn)行測(cè)試的APP,可以輕而易舉的拿到當(dāng)前運(yùn)行APP的session:

  1. curl -X POST '-H "Content-Type: application/json"' -d "{\"desiredCapabilities\":{\"bundleId\":\"com.apple.Preferences\"}}" http://localhost:8101/session 
  2.  
  3. response:{ 
  4.   "value" : { 
  5.     "sessionId" : "94A6580F-1F0F-4411-AC64-3E2525BBA5E1", 
  6.     "capabilities" : { 
  7.       "device" : "iphone", 
  8.       "browserName" : "Settings", 
  9.       "sdkVersion" : "10.1", 
  10.       "CFBundleIdentifier" : "com.apple.Preferences" 
  11.     } 
  12.   }, 
  13.   "sessionId" : "94A6580F-1F0F-4411-AC64-3E2525BBA5E1", 
  14.   "status" : 0} 

同時(shí),對(duì)于不同的設(shè)備,我們可以通過(guò)HTTP server啟動(dòng)inspector來(lái)幫助我們進(jìn)行APP中的元素定位,即使是系統(tǒng)應(yīng)用:

通過(guò)HTTP server啟動(dòng)inspector

問(wèn)題三:解決不同測(cè)試場(chǎng)景需要APP的切換

有了第二個(gè)問(wèn)題的解決方案,只要執(zhí)行相似的curl命令,就可以拿到不同的APP以及不同的sessionId。

執(zhí)行相似的curl命令

是時(shí)候放棄Appium了?

通過(guò)Uber的Octopus框架以及Appium正在使用的WebDriverAgent, 不難發(fā)現(xiàn)此方案的推廣速度以及樂(lè)觀的前景。我們可以使用不同curl命令對(duì)不同的Simulator以及APP進(jìn)行query、tap、typing以及touch id等操作,這與Appium提供的那些我們最常使用的API的等價(jià)的,并且由于不需要先去調(diào)Appium API 而直接去通過(guò)WebDriverAgent與元素進(jìn)行交互,使得測(cè)試執(zhí)行速度上有不同程度的提高,又由于自身強(qiáng)大的控制力以及靈活性,使其可以輕松進(jìn)行并發(fā)操作和復(fù)雜業(yè)務(wù)場(chǎng)景支持,我們只需要把不同的curl命令進(jìn)行封裝,結(jié)合各自APP的業(yè)務(wù)場(chǎng)景便可以輕松完成。

帶來(lái)的成本?

可以說(shuō)大部分團(tuán)隊(duì)沒(méi)有引入移動(dòng)端自動(dòng)化的原因,最主要的無(wú)外乎編寫(xiě)成本高,UI變化快。個(gè)人認(rèn)為這個(gè)方案帶來(lái)的成本比其帶來(lái)的價(jià)值要大得多。不再需要QA再去學(xué)習(xí)新的語(yǔ)言來(lái)編寫(xiě)腳本,所有與APP元素的交互都可通過(guò)HTTP請(qǐng)求來(lái)完成,元素信息通過(guò)易讀的JSON來(lái)呈現(xiàn)。我們可以通過(guò)任何語(yǔ)言和框架用編寫(xiě)后端自動(dòng)化測(cè)試的方式完成iOS的自動(dòng)化測(cè)試。

下面通過(guò)測(cè)試ThoughtWorks的StartKit做一個(gè)簡(jiǎn)單的登錄頁(yè)面的測(cè)試Demo(請(qǐng)?jiān)谠睦稂c(diǎn)擊鏈接),并且我們已經(jīng)在超過(guò)三個(gè)項(xiàng)目中使用過(guò)該測(cè)試方案。

總結(jié)

由于項(xiàng)目因素,我們實(shí)踐的場(chǎng)景會(huì)相對(duì)受限,長(zhǎng)時(shí)間如此可能會(huì)影響我們解決問(wèn)題的思路,我們應(yīng)該不時(shí)的跳出自己工作之外去思考,把簡(jiǎn)單的事情做的復(fù)雜,這樣才可以在碰到復(fù)雜問(wèn)題的時(shí)候,做的簡(jiǎn)單。

【本文是51CTO專欄作者“ThoughtWorks”的原創(chuàng)稿件,微信公眾號(hào):思特沃克,轉(zhuǎn)載請(qǐng)聯(lián)系原作者】

戳這里,看該作者更多好文

責(zé)任編輯:趙寧寧 來(lái)源: 51CTO專欄
相關(guān)推薦

2024-11-21 15:24:49

2021-04-28 16:49:27

自動(dòng)化設(shè)備制藥

2016-10-26 22:16:48

macaca自動(dòng)化測(cè)試javascript

2010-03-30 09:38:58

2016-10-26 22:07:06

macaca自動(dòng)化測(cè)試javascript

2016-10-26 22:24:00

macaca自動(dòng)化測(cè)試javascript

2016-10-26 22:29:13

macaca自動(dòng)化測(cè)試javascript

2020-09-27 14:24:58

if-else cod業(yè)務(wù)

2024-11-01 15:05:12

2009-08-19 09:00:48

單元測(cè)試框架自動(dòng)化測(cè)試

2022-01-14 11:51:00

測(cè)試工具自動(dòng)化

2011-05-16 15:36:00

軟件測(cè)試

2022-07-21 08:43:01

功能測(cè)試測(cè)試

2020-08-03 15:40:57

Web自動(dòng)化工具測(cè)試

2014-04-16 14:15:01

QCon2014

2022-07-04 19:02:06

系統(tǒng)業(yè)務(wù)思考

2017-04-10 12:25:32

iOS自動(dòng)化測(cè)試

2014-09-11 15:05:40

驅(qū)動(dòng)設(shè)計(jì)驅(qū)動(dòng)開(kāi)發(fā)

2023-01-04 13:41:23

RPA自動(dòng)化機(jī)器人

2017-06-05 15:08:14

容量全鏈路流量
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)