2014年11月21日 星期五

Eclipse 新增加Maven外掛

Android 官網上有提供兩種開發工具,Eclipse 以及Android Studio

在使用Appium這種測試工具的時候,需要使用java的專案檔來執行測試程式,所以選擇了Eclipse,但官網上的Eclipse沒有內建Maven,所以要另外安裝plugin,這篇文章描述了怎麼安裝Maven的過程

安裝Maven的網址為
http://download.eclipse.org/technology/m2e/releases


但安裝Maven的時候會報錯誤,這個時候就看錯誤訊息有什麼
目前碰到的狀況是缺少guava

安裝guava的網址為
https://dl.google.com/eclipse/plugin/4.2

會列出以下選項(可能根據版本不同會顯示不同的選項)







選擇以下兩種安裝



之後重啟Eclipse就可以安裝Maven了

2014年10月1日 星期三

Android 單元測試 - AsyncTask

測試專案的時候,碰到了一個狀況

 public void testMethod() throws InterruptedException {

       //下行程式碼是AsyncTask
       doAsyncTask();
       //dothing

 }

private void doAsyncTask(){
        //網路連接,等待回傳值
        NetWork.connect(new Callback(){
               @Override
                public void success(){
                      
                }
                public void fail(){
                      assertTrue(false);
                }
         });
}

test case在還沒有跑完doAsyncTask裡的callback就結束了

猜想是因為testcase在執行完本身的執行緒後,沒有碰到例外就當做測試成功

但這樣無法測試到需要多執行緒的程式碼,於是需要有一個等待機制的工具讓test case等待callback測試結束再往下繼續執行

java 有一個類叫做 CountDownLatch,主要用處是等待其他執行緒做完工作後,通知現在的執行緒繼續做尚未做完的工作

使用方法為new CountDownLatch(1),在建構子設定等待次數,await()方法是在子執行緒開始後呼叫,主執行緒會等待CountDownLatch倒數結束,等子執行緒做完動作呼叫countDown方法,主執行緒會從await繼續往下執行


套用在要測試的程式裡就會是

public void testMethod() throws InterruptedException {
       CountDownLatch latch = new CountDownLatch(1); 
       //下行程式碼是AsyncTask
       doAsyncTask();
       //呼叫await後,程式會停在這一行等待倒數結束
       latch.await();
       //dothing
       

 }

private void doAsyncTask(){
        //網路連接,等待回傳值
        NetWork.connect(new Callback(){
               @Override
                public void success(){
                      //當成功後,呼叫倒數加1,會通知latch檢查有沒有結束倒數
                      latch.countDown();
                }
                public void fail(){
                      assertTrue(false);
                }
         });
}

2014年9月26日 星期五

在Android Studio 作單元測試

Android Studio上可以編寫測試程式,感覺比Eclipse來得簡單,不需要外掛其他東西

目前用到兩種測試方法

第一種:

class extends TestCase

呼叫沒牽扯到cotext的方法,比對傳出結果是否符合預期

新增測試方法需注意開頭需要加test   

範例如下

public class QbonTest extends TestCase{

    public void testMethodAdd(){
       String message = TransUtil.millionSecondToDateString(1903707403849L);
       assertEquals(message,"2020-12-22 12:33:33");
    }
}


第二種:

class extends ActivityInstrumentationTestCase2<T>

T代表著你要測試的Activity,可以測試包含context的方法,或者測試activity內的方法

public class MainActivityTest extends ActivityInstrumentationTestCase2<TestActivity> {
 
    public MainActivityTest() {
        super(TestActivity.class);
    }

    @Override
    protected void setUp() throws Exception {
        super.setUp();
    }

    @SmallTest
    public void testTestActivity() {

        Activity activity = getActivity();
        int num = activity.getNumber();
        assertEquals(num,333);
    }

}





2014年9月25日 星期四

Eclipse 轉換成 Android Studio

Eclipse可以export 出gradle的專案import 到Android Studio

Rightclick > Export > Generate Gradle build files > choose project > finish

選取的專案以及被引用的專案會產生 build.gradle

打開Android Studio 後,import 剛才產生的專案檔案,需注意要import gradle檔案

選擇import project要選擇外層目錄的gradle檔案,把export的專案全部引用進去

import進去Android Studio可能會有一些問題
目前碰到的有下列幾項:

  1. 發生要設定gradle home的問題解決方法是下載gradle,解壓縮後把gradle home指到目錄,下載連結:http://www.gradle.org/downloads

  2. export的專案資料夾內的build.gradle檔案會引發buildToolsVersion不合,解決辦法是更改 檔案內的buildToolsVersion "19.1.0"  (這邊的19.1.0是系統建議的版本號)

  3. unable to load class org gradle api artifacts.... 解決方法為最外層的資料夾gradle檔案內的classpath 修改為 'com.android.tools.build:gradle:0.9.+'  (此處是根據下載的gradle的版本來決定號碼)

因為Eclipse用得比較久,現在用Android Studio還不順手
快捷鍵的部分算是目前最需要的,Android Studio有提供轉換Eclipse快捷鍵

Preferences > 在IDE Settings的區塊 選擇Keymap > 中間上方可以選擇 Eclipse(Mac OS X)
按下Apply 後 ,就可以使用Eclipse的快捷鍵


2014年9月24日 星期三

Appium在Mac環境,運行Java寫的Script

自動化測試工具Appium,可利用不同的語言編寫腳本,測試android iOS的app,目前只實際跑過android系統,此測試工具支援windows與mac作業系統


使用過程:
會需要server launch,等到launch成功,再運行script(接受多種語言撰寫)


使用方法:

可以使用node.js下指令來運行server,或者下載應用程式直接launch,應用程式就是圖形化的node.js界面,功能目前使用來看是一樣的


目前使用的是圖形化界面,所以接下來都會是圖形化界面的範例(使用android實作):

首先介紹的是啟動apk

在以下畫面設定好apk的位置後下面都可以跳掉不選,但DeviceName就得要填了,目前是填寫模擬器的名稱,但有填跟沒填一樣,因為我都使用實機來測試

Use Custom Settings 這個部分就是看要不要sign key,設定好後就可以模擬上架的apk


設定完android的部分,點擊Launch後,Server會運行起來,之後按下放大鏡的按鈕,Appuim會去抓apk的路徑並且build進去模擬器or實機


log區塊會執行一堆程式碼,等到停下來的時候就會開啟預覽畫面,裡面的元件是可以點擊的,如果碰到畫面與元件的位置不相同,只要把螢幕拉伸,就可以符合位置了

接下來介紹目前有用過的按鈕,右上角有兩個按鈕分別是

Record 記錄著按下去的script,等等會解釋
Refresh 更新目前的手機畫面
下面有一個tab 預設會先跑到Touch,裡面會有五個按鈕
Tap 是點擊
Swipe 是拖動,可以滑動螢幕
Shake 是搖晃手機
Precise 是快速點擊
Scroll To 在圖形化界面不能使用

Text 是可以輸入文字,但目前測試不支援中文,只要點擊預覽圖的EditText,輸入文字按Send Keys就可以在手機螢幕上看到輸入的文字



剛才提到的Record 按鈕如果按下去的話會跑出script的範例程式,可以選擇六種不同的語言撰寫腳本程式,程式開頭是設定參數,當你做的動作越多,script會越多,等到記錄的流程都差不多做完後,就可以用擅長的語言開始自動化測試


目前使用的語言是Java,要使用maven外掛來執行junit 

如果使用Android Developer上的Eclipse那一包,內建是沒有Maven的外掛,需要另外去Eclipse的Install New Software,可參考Eclipse安裝Maven外掛

新建Maven專案後,我的資料夾結構會長得像下圖

測試程式寫在src/text/java裡面,要新建檔案可以 New Junit Test Case,選擇Junit 4 test後,輸入名稱按下Finish

把你要測試的程式碼放在test裡面

如果沒有jar檔案的話就去官網下載,連結在此

porn.xml要引用appium的jar
要新增以下程式碼到porn.xml
<dependencies>
      <dependency>
          <groupId>io.appium</groupId>
          <artifactId>java-client</artifactId>
          <version>1.6.1</version>
      </dependency>      

  </dependencies>

執行測試專案,要先確保appium的圖形化界面有沒有Launch,之後就在專案按右鍵,Run As > Junit Test



中文連結資料
http://appium.io/slate/cn/v1.2.0/?ruby#appium