亚洲免费av电影一区二区三区,日韩爱爱视频,51精品视频一区二区三区,91视频爱爱,日韩欧美在线播放视频,中文字幕少妇AV,亚洲电影中文字幕,久久久久亚洲av成人网址,久久综合视频网站,国产在线不卡免费播放

        ?

        基于adb命令的安卓自動(dòng)化測試框架

        2017-09-06 20:24:40仲林霖
        科學(xué)與財(cái)富 2017年24期
        關(guān)鍵詞:安卓自動(dòng)化

        仲林霖

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

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

        1. 引言

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

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

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

        客戶端,該組件發(fā)送命令??蛻舳嗽陂_發(fā)計(jì)算機(jī)上運(yùn)行。您可以通過發(fā)出 adb 命令從命令行終端調(diào)用客戶端。

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

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

        3. 自動(dòng)化框架

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

        1)尋找目標(biāo)控件

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

        Map condition = new HashMap<>();

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

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

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

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

        2)點(diǎn)擊目標(biāo)控件,輸入文本,返回、home、menu

        a. 獲取目標(biāo)控件的信息后,取得位置,然后使用adb發(fā)送點(diǎn)擊位置的指令。用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. 往控件里面輸入文本,需要輸入框首先獲取光標(biāo),然后再使用adb命令發(fā)送輸入文本指令。用java代碼舉例:

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

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

        c. 輸入返回、Home、Menu實(shí)體按鍵,使用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. 實(shí)例分析

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

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

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

        new Thread(new Runnable() {

        @Override

        public void run() {

        while (true) {

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

        clickByText("允許");

        }

        Thread.sleep(1000);

        }

        }

        }).start();

        5. 結(jié)語

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

        參考文獻(xiàn)

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

        猜你喜歡
        安卓自動(dòng)化
        iPhone不卡的秘密曝光:安卓也能享受
        MIPS安卓平臺上ARM二進(jìn)制翻譯系統(tǒng)
        文物表情包
        一種基于安卓系統(tǒng)的手機(jī)側(cè)抓包分析方法
        供電企業(yè)電力自動(dòng)化主站系統(tǒng)研究
        錦界煤礦連采膠帶機(jī)集控系統(tǒng)的介紹
        供熱站自動(dòng)控制系統(tǒng)中PLC的應(yīng)用
        AGV小車在白酒行業(yè)自動(dòng)化立體倉庫中的應(yīng)用
        中國市場(2016年36期)2016-10-19 03:40:15
        配電室無人職守集控站在京博石化的運(yùn)用
        科技視界(2016年20期)2016-09-29 14:13:02
        配電線路運(yùn)行資料管理自動(dòng)化的探討
        科技視界(2016年20期)2016-09-29 13:45:10
        色88久久久久高潮综合影院| 亚洲av乱码一区二区三区女同| 水蜜桃在线观看一区二区国产| 人人人妻人人人妻人人人| 一本一道波多野结衣av中文| 欧美日韩精品乱国产| 激情一区二区三区视频| 精品视频在线观看日韩| 国产色在线 | 亚洲| 欧美成人免费高清视频| 视频精品亚洲一区二区| 日本区一区二区三视频| 日本一卡2卡3卡4卡无卡免费网站| 91精品手机国产在线能| 国内精品熟女一区二区| 日韩精品久久中文字幕| 毛片亚洲av无码精品国产午夜| 97人妻视频妓女网| 亚洲精品综合久久国产二区| 人妻av中文字幕久久| 日韩无套内射视频6| 无码一区二区三区人| 亚洲自拍偷拍一区二区三区| 国产成人喷潮在线观看| 亚洲中文字幕乱码| 黄色三级国产在线观看| 欧美高清视频手机在在线| 中文字幕日韩精品无码内射| 国产精品国产三级国产av创 | 国产乱码卡二卡三卡老狼| 国产精品亚洲五月天高清| 日韩av一区二区三区精品| 久久精品国产亚洲av天| 公粗挺进了我的密道在线播放贝壳 | 亚洲精品一区国产欧美| 午夜亚洲国产理论片亚洲2020| 在线观看日本一区二区三区| 国产精品videossex久久发布| 久久久精品久久日韩一区综合| 新久久久高清黄色国产| 精品福利一区二区三区蜜桃|