亚洲免费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
        精品人妻久久av中文字幕| 精品久久久噜噜噜久久久| 国内免费AV网站在线观看| 精品视频在线观看一区二区有| 日本少妇熟女一区二区| 久久精品aⅴ无码中文字字幕| 精品无码专区久久久水蜜桃| 国产丝袜免费精品一区二区| 一区二区三区在线观看视频精品| 久久人妻少妇嫩草av| 亚州少妇无套内射激情视频 | 免费拍拍拍网站| 在线不卡av天堂| 日本一区二区日韩在线| 亚洲成在人线视av| 男女啪啪免费体验区| 国内精品久久久久国产盗摄| 精品亚洲一区二区三区在线播放| 男人的天堂av网站| 狠狠爱无码一区二区三区| 国产一区二区亚洲av| 国产av一级黄一区二区三区| 日本午夜精品理论片a级app发布| 国产成人九九精品二区三区| 羞涩色进入亚洲一区二区av| 很黄很色很污18禁免费| 欧美综合自拍亚洲综合图片区| 中文字幕日韩精品美一区二区三区| 中文字幕精品亚洲字幕| 亚洲国产欧美日韩欧美特级| 欧美成人a在线网站| 国产黄色一级到三级视频| 日韩人妻中文无码一区二区| 97久久精品人人做人人爽| 谁有在线观看av中文| h视频在线播放观看视频| 亚洲中文字幕在线观看| 中文字幕乱码亚洲无线精品一区| 亚洲中文字幕乱码在线观看| 亚洲成熟丰满熟妇高潮xxxxx| 猫咪www免费人成网最新网站|