Bluepill:LinkedIn開源的iOS并行UI測試工具
前不久,LinkedIn在官方博客介紹了該公司的***開源項目Bluepill。Bluepill使得開發(fā)人員可以在單一機器上同時用多種模擬器運行iOS UI測試,目標(biāo)在于提供穩(wěn)定的測試工具和可擴展的測試。
它的牛逼之處在于:
在一臺機器上同時啟動多個iOS模擬器,自動化運行多個UI測試并給出每一個測試的測試報告。
更直觀點,可以看官方的Demo截圖:
可以看到圖中足足同時運行了12個模擬器,可以覆蓋目前幾乎所有主流iOS版本了。
為何研發(fā)Bluepill
LinkedIn的移動團隊在研發(fā)中提出過一個叫“3x3哲學(xué)”的理念,它意為設(shè)定目標(biāo)每天發(fā)布三次,在代碼提交到對團隊成員可用之間不超過三個小時。這對持續(xù)交付提出了很大的挑戰(zhàn)。
UI測試作為持續(xù)交付的一部分,是非常耗時的,你通常需要測試所有主流系統(tǒng)版本之后才能發(fā)布。Bluepill就是為了解決這個問題而誕生的。
為了達成3x3的目標(biāo),Bluepill給出了兩個特性:
測試平臺的穩(wěn)定性,主要針對Xcode iOS模擬器的“古怪問題”,有時候測試失敗不是因為代碼有問題,而是模擬器不給力,跑不起來或卡住了。據(jù)LinkedIn統(tǒng)計,他們所運行的測試中有2%就屬于這種情況。
測試的可擴展性。測試的并行運行可同時覆蓋多種模擬環(huán)境,可擴展性從根本上提供了這種能力。
Bluepill的黑魔法
之前,LinkedIn團隊嘗試在Facebook開源的xctool的基礎(chǔ)上開發(fā)并行測試工具,結(jié)果xctool停止開發(fā)和維護了,LinkedIn的工程師在一番調(diào)研后忍痛放棄開始自研。
Bluepill借助于CoreSimulator解決穩(wěn)定性和可擴展性問題。CoreSimulator是Apple的一個未公開的框架,它具有創(chuàng)建不同類型的設(shè)備模擬器、選擇運行時版本、處理模擬器提供的通知等功能。在文章中作者提到,LinkedIn使用CoreSimulator實現(xiàn)了將Bluepill從Xcode模擬器中隔離出來,并使Bluepill可并行使用多種模擬器運行測試。這里無需關(guān)心Xcode模擬器版本,因為Xcode模擬器是一種隨每次Xcode的更新而不斷進化的黑盒。
如何使用Bluepill
使用Bluepill非常簡單,最簡單的用例中,你在Xcode中將工程Build之后,可使用如下命令運行Bluepill:
./bluepill -a ./Sample.app -s ./SampleAppTestScheme.xcscheme -o ./output/
這個命令將會啟動四個模擬器,此外還有一些可以用來定制測試環(huán)境的選項,包括使用模擬器的數(shù)量、運行時環(huán)境、失敗測試時允許重試的次數(shù)、測試被卡住時的等待時間等。
Bluepill采用BSD-2許可在GitHub上開源提供。對于不打算自己從源代碼構(gòu)建的開發(fā)人員,Bluepill也提供了二進制版本。
擴展閱讀
LinkedIn為了研發(fā)Bluepill,在持續(xù)交付、UI測試上花了很大的功夫,你可以在他們的官方博客上閱讀相關(guān)文章:
- https://engineering.linkedin.com/blog/2017/01/open-sourcing-bluepill--run-ios-tests-in-multiple-simulators
- https://engineering.linkedin.com/blog/2015/12/managing-ios-continuous-integration-at-enterprise-scale
- https://engineering.linkedin.com/blog/2016/04/3x3--ios-build-speed-and-stability
- https://engineering.linkedin.com/blog/2015/12/test-stability---how-we-make-ui-tests-stable