• 
    

    
    

      99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看 ?

      基于adb命令的安卓自動化測試框架

      2017-09-06 20:24:40仲林霖
      科學與財富 2017年24期
      關(guān)鍵詞:安卓自動化

      仲林霖

      摘要:本文主要介紹了一個可以執(zhí)行安卓自動化測試的方法,使用adb命令調(diào)試手機。通過adb命令獲取手機界面元素,發(fā)送動作指令給手機。

      關(guān)鍵詞:安卓 adb 自動化

      1. 引言

      Android系統(tǒng)已經(jīng)占據(jù)智能移動設(shè)備市場80%以上的份額,所以相應的對于app的測試也尤為重要,而自動化測試又是一個效率高、及其節(jié)省人力的方法。現(xiàn)在市場上的測試框架用的比較多的是Appium。雖然Appium框架功能相對比較齊全,但是Appium的框架比較重,相關(guān)的文檔指導比較少,所以使用起來,學習成本也高。本文所描述框架,主要是簡化測試框架、提高執(zhí)行效率。

      2. 關(guān)于adb的基礎(chǔ)

      Android 調(diào)試橋 (adb) 是一個通用命令行工具,其允許您與模擬器實例或連接的 Android 設(shè)備進行通信。它可為各種設(shè)備操作提供便利,如安裝和調(diào)試應用,并提供對 Unix shell(可用來在模擬器或連接的設(shè)備上運行各種命令)的訪問。該工具作為一個客戶端-服務(wù)器程序,包括三個組件:

      客戶端,該組件發(fā)送命令。客戶端在開發(fā)計算機上運行。您可以通過發(fā)出 adb 命令從命令行終端調(diào)用客戶端。

      后臺程序,該組件在設(shè)備上運行命令。后臺程序在每個模擬器或設(shè)備實例上作為后臺進程運行。

      服務(wù)器,該組件管理客戶端和后臺程序之間的通信。服務(wù)器在開發(fā)計算機上作為后臺進程運行。

      3. 自動化框架

      此框架只支持測試安卓app,是基于adb命令功能的封裝,在執(zhí)行效率上有了很大提升。

      1)尋找目標控件

      控件屬性包含:text、resource-id、class、package、content-desc、checkable、checked、clickable、enable、focusable、focused、scrollable、long-clickable、password、selected、bounds。尋找的條件可以是上面列出屬性的其中一個,或者多個組合。用java代碼舉例:

      Map condition = new HashMap<>();

      condition.put("text", "valueText");

      condition.put("resource-id", "valueResourceid");

      condition.put("content-desc", "valueContentDesc");

      根據(jù)條件尋找控件,這里首先把手機界面的結(jié)構(gòu)dump出來,在進行XML解析,然后再逐個和尋找目標條件比對。

      2)點擊目標控件,輸入文本,返回、home、menu

      a. 獲取目標控件的信息后,取得位置,然后使用adb發(fā)送點擊位置的指令。用java代碼舉例:

      String bounds = targetElement.attributeValue("bounds");

      ArrayList listInt = new ArrayList<>();

      String number = "";

      for (int i = 0; i < bounds.length(); i++) {

      if (Character.isDigit(bounds.charAt(i))) {

      number += bounds.charAt(i);

      } else {

      if (!number.equalsIgnoreCase("")) {

      listInt.add(Integer.valueOf(number));

      number = "";

      }

      }

      }

      int left = listInt.get(0);

      int top = listInt.get(1);

      int right = listInt.get(2);

      int bottom = listInt.get(3);

      String cmd = "adb shell input tap " + String.valueOf(right - left) + " " + String.valueOf(bottom - top);

      Runtime.getRuntime().exec(new String[]{"/bin/bash", "-c", cmd});

      b. 往控件里面輸入文本,需要輸入框首先獲取光標,然后再使用adb命令發(fā)送輸入文本指令。用java代碼舉例:

      String cmd = "adb shell input text " + text;

      Runtime.getRuntime().exec(new String[]{"/bin/bash", "-c", cmd})

      c. 輸入返回、Home、Menu實體按鍵,使用adb命令發(fā)送按鍵指令。用java代碼舉例:

      返回鍵:

      Runtime.getRuntime().exec(new String[]{"/bin/bash", "-c", "adb shell input keyevent 4"});

      Home鍵:

      Runtime.getRuntime().exec(new String[]{"/bin/bash", "-c", adb shell input keyevent 3});

      Menu鍵:

      Runtime.getRuntime().exec(new String[]{"/bin/bash", "-c", adb shell input keyevent 1});

      4. 實例分析

      自動化框架的點擊、輸入文本、實體按鍵直接封裝成方便方法,比如需要點擊某個resource-id為“abc”的控件,可以使用方法“clickByResId("abc")”來實現(xiàn)功能,一行代碼就足夠,可以使大大減少自動化腳本的編輯成本。

      在運行自動化腳本的過程中,會存在要操作的控件還沒有出現(xiàn)在安卓手機上,這時候需要有一個循環(huán)等待的機制來解決這個問題,在控件沒有找到的時候,就一直等待,直到目標控件。這種循環(huán)等待機制會大大增加腳本的魯棒性。

      在測試安卓手機的過程中,會出現(xiàn)很多權(quán)限請求的彈窗,影響腳本繼續(xù)往下執(zhí)行,即使有循環(huán)等待機制,也會因為彈窗不處理而無限等待下午。針對這個問題,可以在執(zhí)行測試腳本的同時,新開一個線程輪訓地去檢查安卓手機界面是否有彈窗,一旦發(fā)現(xiàn)彈窗就點擊授權(quán)跳過。因為主測試進程沒有找到目標控件會一直等待,所以彈窗點擊授權(quán)之后,就可以繼續(xù)進行測試。以java代碼舉例:

      new Thread(new Runnable() {

      @Override

      public void run() {

      while (true) {

      if (hasObject("權(quán)限請求"){

      clickByText("允許");

      }

      Thread.sleep(1000);

      }

      }

      }).start();

      5. 結(jié)語

      通過自動化框架,可以提高編輯腳本的效率,降低腳本出錯的概率,幫助缺少開發(fā)經(jīng)驗的軟件測試人員更容易地書寫測試腳本,推進自動化測試。

      參考文獻

      [1] 鄭婷婷,黃英持,Android應用的多設(shè)備自動化測試實現(xiàn)[J].軟件導刊,2016(02)

      猜你喜歡
      安卓自動化
      iPhone不卡的秘密曝光:安卓也能享受
      消費電子(2022年6期)2022-08-25 09:44:40
      MIPS安卓平臺上ARM二進制翻譯系統(tǒng)
      文物表情包
      一種基于安卓系統(tǒng)的手機側(cè)抓包分析方法
      供電企業(yè)電力自動化主站系統(tǒng)研究
      錦界煤礦連采膠帶機集控系統(tǒng)的介紹
      供熱站自動控制系統(tǒng)中PLC的應用
      AGV小車在白酒行業(yè)自動化立體倉庫中的應用
      中國市場(2016年36期)2016-10-19 03:40:15
      配電室無人職守集控站在京博石化的運用
      科技視界(2016年20期)2016-09-29 14:13:02
      配電線路運行資料管理自動化的探討
      科技視界(2016年20期)2016-09-29 13:45:10
      安化县| 宿松县| 青神县| 遂宁市| 清新县| 乐平市| 洱源县| 区。| 同仁县| 齐齐哈尔市| 辽宁省| 贞丰县| 三门峡市| 临江市| 承德县| 广元市| 高碑店市| 勃利县| 岳阳市| 若尔盖县| 兰西县| 奉新县| 临猗县| 甘泉县| 云林县| 美姑县| 大余县| 鸡西市| 淄博市| 龙门县| 浠水县| 威远县| 乌兰浩特市| 攀枝花市| 车致| 庆安县| 阿拉善右旗| 磐石市| 裕民县| 马关县| 宁陵县|