Espresso:快速的Android UI自動化測試
在我和很多Android開發者聊天的時候,我注意到他們在開發的過程中並不注重測試這一環節,原因是他們認為Android測試太難實現,或者難以整合到現有的工程中等等。但是實際上寫一個 Espresso並不是一件很難的事情,而且它能夠非常方便地整合到你的工程之中。
容易實現
Espresso測試是非常容易實現的,它由三部分組成:
- ViewMachers:尋找用來測試的View。
- ViewActions:傳送互動事件。
- ViewAssertions:檢驗測試結果。
舉個例子,接下來這部分程式碼向id為name_field的EditText輸入”Steve”,並點選id為greet_button的按鈕,最後檢查螢幕上是否有”Hello Steve!”字樣。
- @Test
- publicvoid testSayHello() {
- onView(withId(R.id.name_field)).perform(typeText("Steve"));
- onView(withId(R.id.greet_button)).perform(click());
- onView(withText("Hello Steve!")).check(matches(isDisplayed()));
- }
是不是很簡單?我們再來看看在多執行緒情況下如何進行測試。
整合測試
Espresso官方文件有這樣一段話:
Espresso測試有個很強大的地方是它在多個測試操作中是執行緒安全的。Espresso會等待當前程序的訊息佇列中的UI事件,並且在任何一個測試操作中會等待其中的AsyncTask結束才會執行下一個測試。這能夠解決程式中大部分的執行緒同步問題。
我一般使用 Retrofit來處理我的Http請求,而不是AsyncTask(雖然大多數人還是使用AsyncTask),在這種情況下也有別的辦法來實現執行緒安全的測試。Espresso中有個API叫做registerIdlingResource,它可以讓你使用自定義的執行緒安全邏輯。
通過IdlingResource,我們可以通過以下這段程式碼來實現執行緒同步的Retrofit介面:
- publicclass MockApiService implements ApiService, IdlingResource {
-
privatefinal ApiService api;
- privatefinal AtomicInteger counter;
- privatefinal List<ResourceCallback> callbacks;
- public MockApiService(ApiService api) {
- this.api = api;
- this.callbacks = new ArrayList<>();
- this.counter = new AtomicInteger(0);
- }
- @Override
- public Response doWork() {
- counter.incrementAndGet();
- return decrementAndNotify(api.doWork());
- }
- @Override
- public String getName() {
- returnthis.getClass().getName();
- }
- @Override
- publicboolean isIdleNow() {
- return counter.get() == 0;
- }
- @Override
- publicvoid registerIdleTransitionCallback(ResourceCallback resourceCallback) {
- callbacks.add(resourceCallback);
- }
- private <T> T decrementAndNotify(T data) {
- counter.decrementAndGet();
- notifyIdle();
- return data;
- }
- privatevoid notifyIdle() {
- if (counter.get() == 0) {
- for (ResourceCallback cb : callbacks) {
- cb.onTransitionToIdle();
- }
- }
- }
- }
這個類告訴了Espresso你的應用將會在(doWork())方法呼叫後才能夠進入下一個步驟。但是你看完這段程式碼應該馬上意識到一件事情:這樣的寫法太過囉嗦了,你需要實現很多方法才能做到這執行緒同步一個小功能。一定有其他更好的辦法來實現(接下來就是了!)。
實際上技巧就隱藏在之前的官方文件中,“Expresso會等待UI事件……並等待AsyncTask的結束才會執行下一個測試”。 實際上我們只要在AsyncTask的ThreadPoolExecutor中執行Retrofit請求就可以了!
幸運的是Retrofit的BaseAdapter.Builder類提供了這樣一種方法:
- new RestAdapter.Builder()
- .setExecutors(AsyncTask.THREAD_POOL_EXECUTOR, new MainThreadExecutor())
- .build();
如此簡單,你還有理由不寫Espresso測試嗎?
相關推薦
Espresso:快速的Android UI自動化測試
在我和很多Android開發者聊天的時候,我注意到他們在開發的過程中並不注重測試這一環節,原因是他們認為Android測試太難實現,或者難以整合到現有的工程中等等。但是實際上寫一個 Espresso並不是一件很難的事情,而且它能夠非常方便地整合到你的工程之中。 容易實現
Android UI 自動化測試之UiObject
UiObject 類介紹 代表一個元件物件,物件有許多模擬實際操作手機的方法與屬性 點選與長按物件 (1)元件區域位置關係 (2)點選長按相關 api public void testClick() throws UiObjectN
Android UI自動化測試最佳實踐
轉載地址:http://qa.baidu.com/blog/?p=985 一. 概述 Android系統測試和Web的測試類似,有兩類自動化的方式:錄製回放與基於頁面元素操作的手工開發。由於錄製回放在長期維護與程式碼重用方面存在問題,這裡主要的方式還是後者,這也是Web
轉載:狠狠地聊一下UI自動化測試
target 設計 action com 用例設計 ati web測試 ui自動化 web 狠狠地聊一下UI自動化測試 用例設計 功能測試 性能測試 單元測試 WEB測試 其他相關 轉載:狠狠地聊一下UI自動化測試
解放雙手,Android開發應該嘗試的UI自動化測試
困境 你在南方的豔陽裡,手指紛飛;我在北方的寒夜裡,喝杯咖啡。 接下來我將說到這種情況並非個例——作為一個Android開發者,當我實現了一個介面的一些功能,或者對介面上某些功能進行了修改,我該如何去查收我想要的結果呢? 最簡單的方式就
android常用自動化測試框架
window 自動 瀏覽器 資料 對比 移動 ppi des 選擇 目錄: Monkey MonkeyRunner Instrumentation UiAutomator Espresso Selendroid Robotium Athrun Appi
python專項測試——Android App自動化測試框架
selenium sdk str ase val 測試環境 self ron app自動化 1 為什麽需要框架? 代碼混亂,難閱讀; 重復編碼,效率低;需求變化,難維護; 一 自動化實例 1 準備測試的app;準備測試環境;實現腳本; 2 測試app:只有登錄功能
Robot Framework使用Phantomjs進行無界面UI自動化測試
com 程序 linux版本 -c 框架 data 我們 img 必須 Robot Framework 是一款關鍵字驅動的驗收自動化測試框架,現在在國內使用的越來越廣泛了。一種通用的Web UI自動化測試解決方案是Robot Framework+Selenium2Lib
ui自動化測試的意義與理解
方法 慢慢 lin 線上 效果 fff 效率 場景 答案 分層測試的思想 分層測試(有的也叫測試金字塔)是最近幾年慢慢流行、火熱起來的,也逐漸得到了大家的認可,大家應該已經比較熟悉分層測試的思想了,不太了解的可以自行找一些相應的渠道去補充一下上下文的知識。 總的來說測試需要
UI 自動化測試1-環境配置
在哪裏 表示 配置環境 我們 環境變量 sta 正常 通過 mage 一.安裝Eclipse:1. 安裝Eclipse2. 打開Eclipse(這個時候你會發現無法打開會提示….) 原來是我們沒有裝JDK和JRE (肯定有人又疑惑了,jdk和jre是什麽有
UI自動化測試4-公共類和調用
沒有 element 問題 drive bdr 導致 mage man del 1. 作業解答 上節課給大家的作業是find element by.cssSelector. 我簡單舉一個例子 WebElement email = driver.findElement(By
Windows 下搭建 Appium + Android+python 自動化測試環境
細節 事情 android view package 效果 框架 比較 framework 前言 本來並不打算寫這麽一篇文章,但是實踐下來發現網上的各種教程裏大致有兩個問題。一是文章有些跟不上時代,目前android開發和測試的技術更新都比較快,內容有些過期。二是細節部分不
UI自動化測試簡介及Selenium工具的介紹和環境搭建
版本 ebe 需求分析 核心 nis rep color 基於 多語 自動化測試簡介 1.1何為自動化測試? 是把以人為驅動的測試轉化為機器執行的一種過程,它是一種以程序測試程序的過程。換言之,就是以程序實現的方式來代替手工測試。 1.2自動化測試分類 分為功能自動
UI自動化測試(二)瀏覽器操作及對元素的定位方法(xpath定位和css定位詳解)
cli 刷新 ota api enter 版本 ror apache 窗口 Selenium下的Webdriver工具支持FireFox(geckodriver)、 IE(InternetExplorerDriver)、Chrome(ChromeDriver)、 Opera
UI自動化測試(四)AutoIT工具使用和robot對象模擬鍵盤按鍵操作
rop 並保存 cto 右鍵 自動化測試 nqa files 安裝 存在 AutoIT簡介 AutoIt 目前最新是v3版本,這是一個使用類似BASIC腳本語言的免費軟件,它設計用於Windows GUI(圖形用戶界面)中進行自動化操作。它利用模擬鍵盤按鍵,鼠標移動和窗口/
Robot Framework進行web ui自動化測試,瀏覽器配置說明
org .html open fire img row sele title cnblogs 轉載請註明出處,謝謝; chrome瀏覽器: 1、從如下地址下載與本地瀏覽器版本號一致的chromedriver.exe驅動文件; http://chromedriver.stor
UI自動化測試之selenium(1)——selenium中的常用api
selenium api 目錄 1 對瀏覽器操作1.1 用webdriver打開一個瀏覽器1.2 最大化瀏覽器&關閉瀏覽器1.3 設置瀏覽器窗口大小1.4 打開測試頁面1.5 處理瀏覽器彈出的新窗口2 頁面元素定位3 如何對頁面元素進行操作3.1 WebElement相關方法3.2 iFram
Appium做Android功能自動化測試
做了 指標 並不會 return 啟動 target socket cor enter 前言 做Android端功能自動化已有2年多的時間了,使用過的功能自動化框架有Robotium、Uiautomator、Appium。最近研究自動化case復用的方案,調研了Appium
基於python+appium+yaml安卓UI自動化測試分享
是否 作者 exceptio sts http def pen ogr 技術 結構介紹 之前分享過一篇安卓UI測試,但是沒有實現數據與代碼分離,後期維護成本較高,所以最近抽空優化了一下。不想看文章得可以直接去Github,歡迎拍磚大致結構如下: 結構.png
UI自動化測試POM設計之-maven工程
絕對路徑 pro 解決 unit 是否 分享 根據 osi ren 為了更好的管理UI自動化測試項目,介紹一下Maven項目創建以及應用 一. 配置Maven環境 1. 下載並安裝Maven 下載地址:http://maven.apache.org/downlo