欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久

打開(kāi)APP
userphoto
未登錄

開(kāi)通VIP,暢享免費電子書(shū)等14項超值服

開(kāi)通VIP
Android開(kāi)源測試框架學(xué)習

近期因工作需要,分析了一些Android的測試框架,在這也分享下整理完的資料。

 

Android測試大致分三大塊:

  1. 代碼層測試
  2. 用戶(hù)操作模擬,功能測試
  3. 安裝部署及穩定性測試

代碼層測試

對于一般java代碼,采用傳統的Junit測試,開(kāi)發(fā)人員通常會(huì )編寫(xiě)重要接口和函數的白盒測試代碼,不做過(guò)多討論。

但因Android的特殊運行機制(Dalvik虛擬機),其中存在A(yíng)pplication、Activity、Service等特殊組件,而這些組件都涉及到生命周期管理的問(wèn)題。

為了對這些組件進(jìn)行測試,Google提供了一套針對性的測試框架,AndroidTestFramework

官方教程鏈接 http://developer.android.com/training/testing.html

官方api http://developer.android.com/reference/android/test/package-summary.html

其中最為常用的就是針對Activity的測試,即ActivityInstrumentationTestCase2<T>類(lèi)。

繼承該類(lèi)后可通過(guò)getActivity()方法獲取Activity的一個(gè)mock對象,從而實(shí)現各種界面元素的測試。代碼如下

public class LoginActivityTest extends ActivityInstrumentationTestCase2<LoginActivity> {        LoginActivityTest mActivity;        Button btnLogin;        public LoginActivityTest(){      super(LoginActivity.class);//必須實(shí)現super(testclass)        }        @Override    protected void setUp() throws Exception {        super.setUp();        mActivity = getActivity();                btnLogin = mActivity.findViewById(R.id.btnLogin);    }        public void testGetActivity(){           assertNotNull("can't get LoginActivity" , mActivity);           assertNotNull("can't get loginButton" , btnLogin);        }}
 

需要注意的是,測試代碼運行的線(xiàn)程并不是UI線(xiàn)程。因此如果需要對UI元素進(jìn)行setText或是click之類(lèi)的操作,需要通過(guò)getActivity().runOnUiThread(action)方法執行。代碼如下

getActivity().runOnUiThread(new Runnable() {            @Override            public void run() {                 btnLogin.click();            }        });
 

用戶(hù)操作模擬,功能測試

雖然AndroidTestFramework可以幫助我們完成各種界面的測試。但是,這些代碼的編寫(xiě)非常繁瑣。而且在大部分情況下,我們需要的是一個(gè)連貫性的,在多個(gè)Activity之間存在跳轉的業(yè)務(wù)流程測試。這種測試比較接近傳統的白盒測試,只針對可見(jiàn)的UI元素進(jìn)行操作,模擬用戶(hù)的行為來(lái)完成測試。

Google同樣為我們提供了一套專(zhuān)門(mén)針對UI元素的測試方案,具體可見(jiàn)http://developer.android.com/tools/testing/testing_ui.html

可是Google的這套UI框架仍然不是很友好。為此,我尋找了一些相對成熟的測試框架來(lái)幫助我們。經(jīng)過(guò)一系列分析比較和實(shí)際代碼測試,在這推薦采用Robotium開(kāi)源框架做為今后一段時(shí)間內的主要業(yè)務(wù)測試框架。

Robotium介紹

Robotium是一款國外的Android自動(dòng)化測試框架,主要針對Android平臺的應用進(jìn)行黑盒自動(dòng)化測試,它提供了模擬各種手勢操作(點(diǎn)擊、長(cháng)按、滑動(dòng)等)、查找和斷言機制的API,能夠對各種控件進(jìn)行操作。Robotium結合Android官方提供的測試框架達到對應用程序進(jìn)行自動(dòng)化的測試。另外,Robotium 4.0版本已經(jīng)支持對WebView的操作。Robotium 對Activity,Dialog,Toast,Menu 都是支持的。

源碼及相關(guān)資料地址:https://code.google.com/p/robotium/

Robotium具有清晰的調用方法、良好的兼容性、完善的文檔和大量的實(shí)際應用案例,并且支持截屏。最為符合我們目前的實(shí)際需求。經(jīng)實(shí)際測試,無(wú)需特殊配置即可兼容Jenkins系統。
下面以一段HSA項目中的實(shí)際測試代碼舉例。該測試用例完成從登陸、菜單選取、一直到功能界面輸入驗證的一個(gè)流程。

public class LoginActivityTest extends ActivityInstrumentationTestCase2<LoginActivity> {    Solo solo;    LoginActivity mActivity;        public LoginActivityTest(){        super(LoginActivity.class);    }        @Override    protected void setUp() throws Exception {        super.setUp();        mActivity = getActivity();//初始LoginActivity        solo = new Solo(getInstrumentation(),mActivity);//初始Robotium的主要入口,solo對象    }        public void testLogin(){        //清除用戶(hù)名EditText內容        solo.clearEditText(0);        //輸入"userName" 到用戶(hù)名EditText        solo.enterText(0, "userName");                //清除密碼EditText內容        solo.clearEditText(1);        //輸入"userPass" 到密碼EditText        solo.enterText(1, "userPass");                //清除站點(diǎn)EditText內容        solo.clearEditText(2);        //輸入"siteCode" 到站點(diǎn)EditText        solo.enterText(2, "siteCode");                //點(diǎn)擊登陸按鈕        solo.clickOnButton("登錄");                //檢驗當前界面為MainListActivity        solo.assertCurrentActivity("Expected MainListActivity activity", "MainListActivity");                //點(diǎn)擊動(dòng)態(tài)菜單列表中的第一項,進(jìn)入下一級子菜單界面        solo.clickInList(0);        //檢驗當前界面為SubMenuActivity        solo.assertCurrentActivity("Expected SubMenuActivity activity", "SubMenuActivity");                //點(diǎn)擊子菜單列表中的第一項,進(jìn)入功能界面        solo.clickInList(0);        //檢驗當前界面為ReceiveActivity        solo.assertCurrentActivity("Expected ReceiveActivity activity", "ReceiveActivity");                //點(diǎn)擊界面中的"使用當前人員"按鈕        solo.clickOnButton("使用當前人員");        //輸入重量        solo.enterText(1, "123");                //輸入單號        solo.enterText(2, "21123456798");                //模擬軟鍵盤(pán),發(fā)送EditText的ACTION_DONE事件        solo.getCurrentActivity().runOnUiThread(new Runnable() {            @Override            public void run() {                solo.getEditText(2).onEditorAction(EditorInfo.IME_ACTION_DONE);            }        });                //尋找是否有內容為"已掃描1件"的textview, 會(huì )自動(dòng)等待10秒        boolean succ = solo.searchText("已掃描1件"))                //判斷成功        assertTrue(succ);    }}
 

可見(jiàn),Robotium通過(guò)一個(gè)solo對象來(lái)進(jìn)行各種事件的模擬,代碼清晰易懂,并且完全兼容原生AndroidTestFramework

 

安裝部署及穩定性測試

安卓系統最為讓人詬病的問(wèn)題就是碎片化,這點(diǎn)在中國比較明顯。大致上,2.3.X 和 4.x 的系統各占半壁江山,此外還存在大量的山寨定制系統。

因此在這推薦兩款云端測試工具,Testin和百度云測試。

兩個(gè)框架測試都很簡(jiǎn)單,在官網(wǎng)注冊賬號后上傳apk即可,網(wǎng)站會(huì )用大量的真機進(jìn)行安裝部署和monkey測試。測試完成后會(huì )發(fā)送一份測試給注冊郵箱。

Testin支持Robotium框架的代碼測試,同時(shí)上傳項目apk和測試apk(相同簽名)即可。

Testin地址: http://www.testin.cn/

百度云測試: http://mtc.baidu.com/

 

其他測試框架

Monkey測試

Android SDK開(kāi)發(fā)包中自帶一個(gè)monkeyrunner的工具,可用來(lái)進(jìn)行monkey測試。
文檔地址:

Robolectric

一款基于JVM運行的Android測試框架,最大特點(diǎn)就是不需要啟動(dòng)模擬器,因此速度非???!
目前已支持大部分原生SDK功能的測試,支持Resource,但對于一些特殊硬件上的模擬還存在欠缺。期待進(jìn)一步的完善
示例代碼:

// Test class for MyActivity@RunWith(RobolectricTestRunner.class)public class MyActivityTest {  @Test  public void clickingButton_shouldChangeResultsViewText() throws Exception {    Activity activity = Robolectric.buildActivity(MyActivity.class).create().get();    Button pressMeButton = (Button) activity.findViewById(R.id.press_me_button);    TextView results = (TextView) activity.findViewById(R.id.results_text_view);    pressMeButton.performClick();    String resultsText = results.getText().toString();    assertThat(resultsText, equalTo("Testing Android Rocks!"));  }}

地址: http://robolectric.org/index.html

 

Google Espresso

Google于2013年10月開(kāi)源的一款測試框架。據稱(chēng)在Google內部已通過(guò)多個(gè)項目的實(shí)際驗證,并可能在未來(lái)加入到默認AndroidSDK中。
設計上接近Robotium,主要用于業(yè)務(wù)端的模擬行為測試。相較Robotium,具有更為強大的UI元素匹配尋找功能和更快的運行速度。
不過(guò)經(jīng)過(guò)本人的實(shí)際使用,發(fā)現該框架的代碼編寫(xiě)相對復雜,遠不如Robotium來(lái)的輕巧。此外,該框架無(wú)法運行在默認AndroidTestFramework中(可認為是升級版),且因剛開(kāi)源,缺少文檔和應用案例等資料,導致測試代碼編寫(xiě)效率相對低下,故暫時(shí)不予采用。
地址: https://code.google.com/p/android-test-kit/wiki/Espresso

Mockito

一款用于Mock測試的主流框架
地址: https://code.google.com/p/mockito/

  List mockedList = mock(List.class);  when(mockedList.get(0)).thenReturn("first");  System.out.println(mockedList.get(0));

總結

如無(wú)意外,接下來(lái)一段時(shí)間內,Android項目會(huì )采用以下的方案搭建測試框架:

  • 代碼級: AndroidTestFramework + Junit
  • UI業(yè)務(wù)模擬: Robotium
  • 安裝部署: Testin
  • CI: Jenkins

有興趣的同學(xué)也可關(guān)注下Robolectric和Espresso兩個(gè)框架的進(jìn)展。

本站僅提供存儲服務(wù),所有內容均由用戶(hù)發(fā)布,如發(fā)現有害或侵權內容,請點(diǎn)擊舉報。
打開(kāi)APP,閱讀全文并永久保存 查看更多類(lèi)似文章
猜你喜歡
類(lèi)似文章
Android Studio 里搭建自動(dòng)化測試框架Robotium
Android 自動(dòng)化測試—robotium(三)EditText控件
Robotium自動(dòng)化測試框架
android自動(dòng)化測試
android自動(dòng)化測試之robotium初探
Robotium環(huán)境搭建與新手入門(mén)教程
更多類(lèi)似文章 >>
生活服務(wù)
分享 收藏 導長(cháng)圖 關(guān)注 下載文章
綁定賬號成功
后續可登錄賬號暢享VIP特權!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服

欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久