LinkedIn工程師兼Test Butler創(chuàng)建者Drew Hannay寫道,Test Butler是一款面向Android的開源測(cè)試工具,它允許開發(fā)人員對(duì)若干測(cè)試環(huán)境設(shè)置通過(guò)編程進(jìn)行控制,從而使開發(fā)人員可以可靠地運(yùn)行測(cè)試。
據(jù)Hannay介紹,Test Butler的靈感來(lái)自谷歌2014年的演講“環(huán)保之路:清理有毒的移動(dòng)環(huán)境”。該演講介紹了如何解決反復(fù)出現(xiàn)并影響移動(dòng)測(cè)試的問(wèn)題,比如缺少可靠性和可再現(xiàn)性、速度緩慢等。Hannay表示,當(dāng)結(jié)果可能受到環(huán)境因素影響時(shí),測(cè)試就不可靠了,尤其是當(dāng)它們出現(xiàn)在設(shè)備/操作系統(tǒng)層面時(shí),比如Android模擬器的CPU突然休眠,不正常的設(shè)備方向變化,隨機(jī)出現(xiàn)的鎖屏,意外彈出的系統(tǒng)對(duì)話框,等等。所有那些事件都會(huì)導(dǎo)致Espresso UI測(cè)試失敗。
為了解決這些問(wèn)題,按照最初的設(shè)計(jì),Test Butler將作為一個(gè)后臺(tái)服務(wù)在Android模擬器上運(yùn)行,提供一些旨在增加測(cè)試環(huán)境穩(wěn)定性的特性,比如:
禁用動(dòng)畫,這是Espresso正常運(yùn)行所需要的; 通過(guò)安裝一個(gè)自定義的IActivityController禁用系統(tǒng)對(duì)話框; 監(jiān)控模擬器的鎖屏、Wi-Fi和CPU,保證它們不會(huì)休眠。測(cè)試中的應(yīng)用可以和Test Butler進(jìn)行通信,并控制多個(gè)測(cè)試環(huán)境變量,比如:
啟用/禁用Wi-Fi; 在測(cè)試執(zhí)行過(guò)程中通過(guò)編程改變?cè)O(shè)備方向; 模擬不同的定位服務(wù)模式,比如,省電模式或者高精度模式; 定義應(yīng)用程序運(yùn)行的區(qū)域設(shè)置。Test Butler的一個(gè)關(guān)鍵方面是,它使用面向內(nèi)置Android模擬器的系統(tǒng)密鑰庫(kù)進(jìn)行簽名。也就是說(shuō),它會(huì)自動(dòng)取得自己所需的任何signature級(jí)的權(quán)限,而不需要通過(guò)ADB,或者篡改清單文件。
下面的代碼展示了如何設(shè)置應(yīng)用,讓其和Test Butler一起工作:
public class ExampleTestRunner extends AndroidJUnitRunner { @Override public void onStart() { TestButler.setup(InstrumentationRegistry.getTargetContext()); super.onStart(); } @Override public void finish(int resultCode, Bundle results) { TestButler.teardown(InstrumentationRegistry.getTargetContext()); super.finish(resultCode, results); }}當(dāng)應(yīng)用和Test Butler的連接建立后,你可以使用TestButler類提供的多種方法控制測(cè)試環(huán)境,比如修改定位服務(wù)模式、設(shè)置Wi-Fi狀態(tài)、觸發(fā)設(shè)備反轉(zhuǎn),等等。
據(jù)Hannay介紹,目前,LinkedIn每天使用Test Butler運(yùn)行超過(guò)1百萬(wàn)次測(cè)試。該工具是開源的,代碼托管在GitHub上。