androidui自動化
A. 如何使用python做android的自動化測試
開始第一個簡單的Android UI自動化測試 1.使用adb命令連接真機或模擬器 2.打開uiautomatorviewer工具 3.使用uiautomatorviewer工具獲取應用的元素進行定位 4.簡單介紹unittest框架的使用方法
B. Android 手機自動化測試工具有哪些
Robotium是一款經常使用的自動化測試工具軟體,支持Android。
Robotium是一個免費的Android UI測試工具。它適用於為不同的安卓版本和子版本測試自動化。軟體開發人員經常把它描述為Android Selenium。Robotium測試是用java寫的。事實上,Robotium是一個單元測試庫。
但通過Robotium創建測試需要花費很多時間和努力,因為為了自動化測試還需要修改程序源代碼。該工具也不適合與系統軟體的交互,它不能鎖定和解鎖智能手機或平板電腦。Robotium也沒有錄制回放功能,也不提供截圖
C. 怎樣看android自動化uiautomator源碼
Google在sdk4.0以後提供了一個自動化解決方案uiautomator:
優點:可以跨應用了;這可是親生的;
缺點:必須sdk4.0以上版本;要想實現的好,最好有開發配合;java項目編譯為jar後需要push到手機才能運行,也就是說必須列印日誌暴力調試。
D. Android 手機自動化測試工具有哪幾種
monkey(google自己的),monkeyrunner,uiautomator(google自己的),robotium,appium,cafe(網路研發),Espresso(google自己的),Athrun(淘寶研發),seeTest
monkey&monkeyrunner 基於坐標點的測試工具
Uiautomator&robotium 基於控制項的測試工具
appium 通過driver&中間件實現跨平台測試工具(支持android/Ios等)
cafe通過AIDL實現進程間通信
Espresso 基於Android Instrumentation framework實現的Android UI自動化測試框架,不支持跨進程
SeeTest 基於圖像元素的測試工具
E. Android自動化測試工具有哪些
1、 Robotium 安卓測試工具
Robotium是一款經常使用的自動化測試工具軟體,支持Android。
Robotium是一個免費的Android UI測試工具。它適用於為不同的安卓版本和子版本測試自動化。軟體開發人員經常把它描述為Android Selenium。Robotium測試是用java寫的。事實上,Robotium是一個單元測試庫。
但通過Robotium創建測試需要花費很多時間和努力,因為為了自動化測試還需要修改程序源代碼。該工具也不適合與系統軟體的交互,它不能鎖定和解鎖智能手機或平板電腦。Robotium也沒有錄制回放功能,也不提供截圖。
2、MonkeyRunner 安卓應用測試
Monkeyrunner是一款流行的Android測試工具,用於自動化功能測試。
這個工具比Robotium更低一層次。這個不必處理源代碼來做自動化測試。這個測試可以用Python寫,並且可以使用錄制工具來創建測試。
Monkeyrunner可以連接到電腦或模擬真實設備運行測試。該工具有一個介面,用它來控制智能手機,平板電腦或外部模擬器的Android代碼。
這個測試工具的缺點是,它必須為每個設備編寫腳本。另一個問題是,每次測試程序的用戶界面變化都需要調整測試腳本。
3、Ronaorex 安卓測試應用工具
Ranrex 是一款不僅可以支持最新Android版本,也支持從Android2.2開始的早期版本和分支版本。
Ranorex的優勢是它有詳細的截屏報告。它能通過Wifi連接智能手機和平板電腦。
一個自動化測試工程師通過這個Android工具可以不用XML數據格式來詳細編寫數據驅動的測試。Ranorex工作室使自動化測試工程師只要點擊滑鼠就可容易地創建測試。它允許詳細聲明額外的程序模塊,來用於在後期開發周期中測試更復雜的場景。
它是一個商業的移動應用工具,其許可價格為1990歐元。不過Ranorex搜索功能相當慢;它需要30秒來完成這樣的操作。我們必須為Ranorex配備apk文件設備,否則無法通過這個工具實現自動化測試,因為它只能在APK文件設備上工作。
F. 怎樣使用Appium進行Android自動化測試
1、Robotium——安卓測試工具 Robotium是安卓系統最常用的自動化測試工具,並且是一款免費的安卓UI測試工具。它適合於各種不同的安卓版本及其下行版本。軟體開發者經常把它稱作安卓。Robotium創建的測試使用Java寫的。事實上,Robotium是一個個體測試資料庫。 但是Robotium需要花費很長時間努力去創建測試,就像為了自動化程序創建的源代碼。它不適合互動的軟體系統,不能鎖住和解鎖智能手機。Robotium沒有記錄和播放功能,它不支持截屏。 2、MonkeyRunner——安卓App測試工具 MonkeyRunner是最流行的有自動化功能的安卓軟體測試工具。MonkeyRunner比起Robotium要低端一些。它並不處理源代碼。測試創建是用Python寫的,其中可能使用記錄工具,為了創建測試。MonkeyRunner可以在連接狀態的PC或者模擬器上運行測試。它有一個應用程序介面可以控制智能手機或者模擬器。但手機APP測試工具的最大缺陷是每個設備都要編寫腳本。另一個缺陷就是,每次測試程序發生改變時都要調整。 3、Ranorex——安卓App測試工具 Ranorex是一個不錯的自動化測試工具,不僅最新版本,Android 2.2.以上版本都是可以的。Ranorex的好處在於它有詳細的截屏報告。他可以通過WiFi上網連接智能手機或者平板電腦。通過這個 Android 工具,自動化的測試工程師可以詳細描述數據驅動測試,但不包括 XML 數據格式。Ranorex可以很輕松地創建測試,自動化測試工程師只需點擊滑鼠。Ranorex允許附加的程序模塊。這個模塊可以被用於開發更為復雜的測試場景中。Ranorex是一個商業化的移動應用程序的工具;其許可價格是 1990歐元/年。Ranorex搜索相當慢;它需要 30 秒的時間來執行操作。其中一個必須為Ranorex文書的 APK 文件。否則它不能通過這個工具進行自動化測試,它只能在APK 文件下工作。 4、Appium——安卓自動化測試工具 Appium是為iOS和安卓系統創建的自動化測試框架,是一個免費工具。它支持 2.3 及更高版本的 Android 系統。Appium利用WebDriver界面運行測試。它支持許多編程語言,如 Java、 C#、Ruby和其他的WebDriver資料庫。它可以在移動設備上控制 Safari 和Chrome。但是,一些自動化的測試工程師抱怨它提供的報告不足。它的缺點也減少了對於XPath在移動設備上的支持。 5、UI Automator——安卓自動化測試 谷歌最近推出了這一工具。它支持從4.1開始的安卓版本。我們應該選擇另一個更早期的安卓應用程序進行自動化測試。UI Automator能夠與各類安卓系統兼容,包括系統的應用程序。這使得UI Automator可以鎖定和解鎖智能手機或平板電腦。通過該工具創建的腳本可以在許多不同的安卓平台上執行。它允許復制用戶的操作復雜的序列。UI Automator也可以利用外部按鈕的裝置調節,打開和關閉設備的按鈕。 UI Automator可以與測試框架TestNG集成。在這種情況下,用戶界面自動可以生成內容豐富和詳細的報告,類似於由Ranorex生成的報告。此工具搜索速度還非常快。在許多安卓平台上測試後,軟體測試專家認為UI Automator是質量最好的移動應用程序。它是安卓做好的應用程序之一,它由谷歌推出。 通常大約 80%的新軟體的 bug 都會重現支持的平台。其餘 20%出現在其他平台上。這意味著,在大多數情況下,事先測試軟體產品比盲目使用更好。 目前, Android 4.1 版本安裝了約 66%操作系統的設備。這就是為什麼許多自動化的測試工程師經常決定UI Automator是最合適的解決方案。
G. android ui自動化怎麼判斷結果對錯
在使用前,需要具備以下條件:
最新版本的 Android Studio
運行Android 4.3或者更高版本的設備或者虛擬器
理解 JUnit
H. 用android uiautomator做自動化測試,怎麼連接真機進行
Google在sdk4.0以後提供了一個自動化解決方案uiautomator:
優點:可以跨應用了;這可是親生的;
缺點:必須sdk4.0以上版本;要想實現的好,最好有開發配合;java項目編譯為jar後需要push到手機才能運行,也就是說必須列印日誌暴力調試。
Appium基於Android InstrumentationFramework和UIAutomator,也就是說這個工具是可以跨應用的。說遠了,好吧,為了幫大家更容易理解appium的使用,我這里就講一下uiautomator的使用方法。
你應該有android-sdk吧,升級到4.0以上,進入目錄android-sdk ools,你會看到兩個文件:
traceview.bat 和 uiautomatorviewer.bat,這倆文件讓你想起了monkeyrunner了吧,是的,traceview.bat就對應於hierarchyviewer.bat,用來查看程序的ui界面的,通常也是使用管理員許可權啟動的。
好了,現在用eclipse創建一個java project,是的,你沒看錯,是java project不是android project,添加引用:
在project.properties中內容為:
# Project target.
target=android-16
這里的android-16需要和之前的android.jar和uiautomator.jar位置相一致。
然後呢?寫代碼吧,建立一個類,得,發個給大家參考:
packagecom.uia.example.my;
importorg.apache.http.util.EncodingUtils;
importandroid.graphics.Bitmap;
importandroid.graphics.BitmapFactory;
importandroid.graphics.Rect;
importandroid.os.Environment;
importcom.android.uiautomator.core.UiObject;
importcom.android.uiautomator.core.UiObjectNotFoundException;
importcom.android.uiautomator.core.UiScrollable;
importcom.android.uiautomator.core.UiSelector;
importcom.android.uiautomator.testrunner.UiAutomatorTestCase;
importjava.io.File;
importjava.io.FileOutputStream;
importjava.io.IOException;
{
publicStringsLog;
publicFilefout=null;
=null;
publicvoidwrite2file(String filename,String sData)
{
String sLog="";
//初始化日誌文件
if(Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)){
sLog = Environment.getExternalStorageDirectory().getAbsolutePath();
try{
fout=newFile(sLog,filename);
outStream=newFileOutputStream(fout,true);//此處的true是append
sData=sData +" ";
outStream.write(sData.getBytes());
outStream.flush();
outStream.close();
fout=null;
}
catch(Exception e){
e.printStackTrace();
}
}else{
System.out.println("該手機沒有SD卡");
}
}
publicvoidtestDemo() {
//1.啟動app
getUiDevice().pressHome();
UiObject allAppsButton =newUiObject(newUiSelector().description("Apps"));
allAppsButton.clickAndWaitForNewWindow();
UiObject appsTab =newUiObject(newUiSelector().text("Apps"));
appsTab.click();
UiScrollable appViews =newUiScrollable(newUiSelector().scrollable(true));
UiObject settingsApp = appViews.getChildByText(newUiSelector().className(android.widget.TextView.class.getName()),"Efilm");
settingsApp.clickAndWaitForNewWindow();
//2.進入主界面
System.out.println("into main view");
System.out.println(getUiDevice().waitForWindowUpdate("com.eshore.efilm", 60000));
System.out.println("intoed main view");
UiObject tv1 =newUiObject(newUiSelector().text("影院"));
tv1.click();
//3.點擊影院
UiObject oyy=newUiObject(newUiSelector().description("cinema_row"));
System.out.println("wait yingyuan come out");
oyy.waitForExists(60000);
System.out.println("yingyuan come out");
oyy.clickAndWaitForNewWindow();
System.out.println("click yingyuan");
//4.場次
UiObject occ=newUiObject(newUiSelector().description("LinearLayout10"));
System.out.println("wait changci come out");
oyy.waitForExists(60000);
System.out.println("changci come out");
occ.clickAndWaitForNewWindow();
System.out.println("click changci");
//5.座位
UiObject oseat=newUiObject(newUiSelector().description("cinema_shows_list_item").index(0).childSelector(newUiSelector().description("LinearLayout10")));
System.out.println("wait seat come out");
oseat.waitForExists(5000);
inth=getUiDevice().getDisplayHeight();
intw=getUiDevice().getDisplayWidth();
System.out.println("(h/2,w/2)="+h/2+","+w/2);
getUiDevice().click(h/2,w/2);
//System.out.println("seat count:"+String.valueOf(oseat.getChildCount()));
//System.out.println("seat getText:"+ oseat.getText());
//截座點陣圖
Process process;
try{
process = Runtime.getRuntime().exec("screencap /mnt/sdcard/EfilmFailSnapShot01.png");
try{
process.waitFor();
}catch(InterruptedException e) {//TODOAuto-generated catch block
e.printStackTrace();
}
}catch(IOException e) {
//TODOAuto-generated catch block
e.printStackTrace();
}
//takeScreenShots("EfilmSeatSnapShot");
}
}
這個例子是隨便寫的,可能不夠嚴謹。大體就這么個情況吧。下一步就是編譯執行了,先插上手機usb介面,然後打開cmd,執行:
找到SDKID,也就是android create中的-t參數:
cd C: PROGRAMandroid-sdk ools
android list
找到t參數的值以後:
cd C: PROGRAMandroid-sdk ools
android create uitest-project -n TAppWorkAssistV1 -t 25 -p C:android自動化Tv2.0TestSetting
cd C:android自動化Tv2.0TestSetting
ant build
cd C:android自動化Tv2.0TestSettingin
adb push TAppWorkAssistV1.jar /data/local/tmp/
adb shell uiautomator runtest TAppWorkAssistV1.jar -c com.uia.example.my. TAppWorkAssistV1
看了看,好像沒有什麼特別值得解釋的
-n TAppWorkAssistV1:類名
-p: 項目所在目錄
Ant build 把這個類編譯成一個jar包:TAppWorkAssistV1.jar
然後把jar包push到手機上,調用執行這個類就可以了
大致是這么個步驟,不過有一個非常重要的細節,就是如果你需要更省心,就最好把界面元素,無論動態的還是布局文件中的,都加上content-description屬性,並保證唯一性,根據:
UiSelector:description(String desc)
Set the search criteria to match thecontent-description property for a widget.
那就可以統一隻使用這一個引用界面元素的方法就行了,就不用去想方設法利用其它的屬性來引用了。