自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

Fastbot 開源版技術(shù)原理與架構(gòu)

移動(dòng)開發(fā)
下面將逐一介紹工具的工作流程、核心概念、算法原理、設(shè)計(jì)實(shí)現(xiàn)以及常用配置,深入了解其在提升移動(dòng)應(yīng)用測(cè)試效率的能力。

問題背景

近年來,移動(dòng)應(yīng)用程序的數(shù)量呈現(xiàn)爆炸性增長(zhǎng),隨之而來的是用戶對(duì)應(yīng)用程序質(zhì)量的高要求。確保應(yīng)用程序的質(zhì)量對(duì)于維護(hù)用戶忠誠度和業(yè)務(wù)成功至關(guān)重要。然而傳統(tǒng)的人工測(cè)試方法存在一些挑戰(zhàn),包括耗費(fèi)大量時(shí)間和資源、可擴(kuò)展性和可維護(hù)性的限制等,因此移動(dòng)應(yīng)用的自動(dòng)化測(cè)試工具應(yīng)運(yùn)而生。隨著人工智能時(shí)代的到來,軟件測(cè)試領(lǐng)域不斷向智能化發(fā)展,其中自動(dòng)測(cè)試生成的能力一直是學(xué)術(shù)和工業(yè)界共同關(guān)注的研究熱點(diǎn),依靠自動(dòng)生成測(cè)試能較大程度減少測(cè)試腳本的編寫與維護(hù)工作量。

在實(shí)際應(yīng)用中,工業(yè)級(jí)應(yīng)用程序經(jīng)常需要進(jìn)行更新以適應(yīng)不斷變化的用戶需求,例如,工業(yè)廠商一般每周都會(huì)發(fā)布一個(gè)新的核心應(yīng)用版本,然而采用現(xiàn)有的自動(dòng)化測(cè)試工具在這種情況下效果一般,它們僅僅是簡(jiǎn)單地在移動(dòng)應(yīng)用上重新運(yùn)行一次測(cè)試,缺乏對(duì)人類經(jīng)驗(yàn)和知識(shí)的運(yùn)用。Fastbot正是一款結(jié)合了強(qiáng)化學(xué)習(xí)和基于模型決策算法的自動(dòng)化安卓測(cè)試工具,它由字節(jié)跳動(dòng)軟件工程實(shí)驗(yàn)室(https://se-research.bytedance.com/)團(tuán)隊(duì)提出,旨在利用強(qiáng)化學(xué)習(xí)的技術(shù),通過學(xué)習(xí)和推理從之前的測(cè)試運(yùn)行中獲得知識(shí),從而達(dá)到更快更高效的測(cè)試效果。此外,F(xiàn)astbot還提供了個(gè)性化的專家系統(tǒng),用戶可以自定義各種配置去滿足不同的測(cè)試場(chǎng)景和需求。

下面將逐一介紹工具的工作流程、核心概念、算法原理、設(shè)計(jì)實(shí)現(xiàn)以及常用配置,深入了解其在提升移動(dòng)應(yīng)用測(cè)試效率的能力。

工作流程

圖片

Fastbot 是一種利用強(qiáng)化學(xué)習(xí)的可復(fù)用的基于模型的自動(dòng)化安卓測(cè)試工具。它接受一個(gè)給定的應(yīng)用程序版本,以 APK 文件的形式作為輸入,并輸出覆蓋報(bào)告和找到的崩潰。Fastbot 的工作流程包括兩個(gè)主要階段,如圖所示:

(a) 測(cè)試前的設(shè)置。a1 對(duì) APK 文件進(jìn)行反編譯,收集控件的靜態(tài)文本信息。a2 在一組設(shè)備上安裝 APK,同時(shí) a3 加載先前測(cè)試運(yùn)行中的歷史測(cè)試數(shù)據(jù)填充模型。

(b) 引導(dǎo)式 UI 探索。b1 從被測(cè)應(yīng)用程序中獲取當(dāng)前的 GUI 頁面,b2 識(shí)別和抽象出當(dāng)前頁面上的可用 hyper-event(超事件,一組具有相同屬性的事件,將在下文具體解釋)。b3 選擇一個(gè)具體的 UI 事件,該事件有可能增加 Activity 覆蓋率,b4 執(zhí)行該事件。執(zhí)行完畢后,b5 更新歷史測(cè)試數(shù)據(jù)、概率模型,同時(shí) b6 更新強(qiáng)化學(xué)習(xí)智能體。

這些步驟將循環(huán)迭代,直到使用完時(shí)間預(yù)算。

核心概念

技術(shù)和算法原理

Fastbot 的關(guān)鍵思想是利用存儲(chǔ)在概率模型中的先驗(yàn)知識(shí),去有效地指導(dǎo) GUI 測(cè)試。為了實(shí)現(xiàn)這一點(diǎn),關(guān)鍵步驟是決定在當(dāng)前 GUI 頁面上選擇哪個(gè) UI 事件,可以快速地提高 Activity 覆蓋率。具體而言,給定一個(gè) GUI 頁面,F(xiàn)astbot 提取當(dāng)前所有可用的超事件,并采用以下兩種策略協(xié)同組合去選擇執(zhí)行的事件:(1)基于模型的事件選擇,(2)基于學(xué)習(xí)的事件選擇。

1. 基于概率模型的事件選擇

為了平衡模型對(duì)未知?jiǎng)幼鞯奶剿骱鸵阎呋貓?bào)動(dòng)作的利用,避免陷入局部最優(yōu)的僵局,基于模型的事件選擇包括兩種模式:模型擴(kuò)展和模型利用。

模型擴(kuò)展: 如果當(dāng)前 GUI 頁面中的某些超事件尚未包含在概率模型??中,F(xiàn)astbot 將啟動(dòng)擴(kuò)展策略,隨機(jī)選擇一個(gè)尚未執(zhí)行的超事件。在實(shí)際中有兩種可能的情況:1)先前的測(cè)試運(yùn)行可能沒有覆蓋所有的超事件,2)當(dāng)前測(cè)試應(yīng)用程序版本中添加了一些新的功能。該模式可以幫助擴(kuò)展模型并優(yōu)先探索潛在的新功能。

Fastbot 的算法原理在于利用先前的知識(shí)和概率模型,通過模型擴(kuò)展和模型利用兩種策略模式選擇事件,以快速提高 GUI 測(cè)試的 Activity 覆蓋率。該算法的設(shè)計(jì)使得 GUI 測(cè)試能夠更高效地進(jìn)行,并能夠適應(yīng)不同的應(yīng)用場(chǎng)景。

2. 基于強(qiáng)化學(xué)習(xí)的事件選擇

前面概率模型只能表達(dá)一步的指導(dǎo)信息,而強(qiáng)化學(xué)習(xí)技術(shù)能夠?qū)⒁徊綌U(kuò)展為多步的指導(dǎo)信息。Fastbot 采用了 Sarsa N-Step 算法作為獎(jiǎng)勵(lì)函數(shù)去計(jì)算和更新 Q 值。

3. 案例解釋

為了加深理解,下面用頭條應(yīng)用來對(duì)算法的幾種決策進(jìn)行解釋:

概率模型的探索與利用模式

通過對(duì)歷史數(shù)據(jù)記載對(duì)概率模型 M 初始化,見圖 b,啟動(dòng)頭條應(yīng)用后,進(jìn)入 home Activity1,當(dāng)前頁面可以抽象為 3 個(gè) hyper-event,這三個(gè)事件都被包含在模型中,因此 Fastbot 回啟動(dòng)模型利用策略選擇事件,看圖 b 左邊部分,可以知道 e3 有 90%的概率留在 Activity1,因此更傾向于選擇 e1 和 e2,假設(shè)選擇 e1 后,到達(dá) Activity2,在 Activity2 中 e4 已經(jīng)在模型中,并且 100%回到 Activity1,同時(shí) e5,e6 不再模型中,此時(shí) Fastbot 將啟動(dòng)探索模式,隨機(jī)選擇 e5 或者 e6,如果選擇 e5,到達(dá) Activity3,此時(shí)模型添加一條 e5-Activity3 的概率值 100%,同時(shí)由于 e1 的執(zhí)行次數(shù)加 1,因此 e1 的概率也要改變,e1-Activity2 的概率變?yōu)?0.7/1.1=63.6%,e1-Activity5 的概率變?yōu)?36.4%,更新為圖 b 右半部分。

圖片圖片

Q 表的更新利用

在圖 a 中,Activity2,e4,e6 沒有被執(zhí)行過,同時(shí) e6 不在模型內(nèi),因此 e1 的獎(jiǎng)勵(lì)更高,相似的,e7,e8 也是新的事件,因此 e5 的獎(jiǎng)勵(lì)會(huì)更高,假設(shè) e1,e2,e3 都會(huì)執(zhí)行過很多次,并且 Activity2,3,4 都被覆蓋了,此時(shí)將利用 Q 表中的值去計(jì)算事件選擇的概率,在當(dāng)前 Activity1 中,由于 e1 的獎(jiǎng)勵(lì)最高說明他能夠到達(dá)更深的 Activity,因此選擇 e1 作為下一個(gè)事件執(zhí)行。

圖片

設(shè)計(jì)實(shí)現(xiàn)

Fastbot 開源版包括客戶端和本地服務(wù)端兩部分,客戶端負(fù)責(zé)監(jiān)聽 UI 事件,接收和注入相應(yīng)的動(dòng)作,服務(wù)端負(fù)責(zé)計(jì)算和決策。具體而言,在每個(gè)設(shè)備上運(yùn)行 Fastbot 客戶端,通過監(jiān)控 GUI 頁面信息發(fā)送給服務(wù)端,服務(wù)端接收信息根據(jù)算法決策返回選擇的事件,客戶端接收事件并執(zhí)行操作。

客戶端使用 Java 語言編寫,用于獲取 GUI 信息,讀取服務(wù)端決策,并將決策轉(zhuǎn)化為設(shè)備可以執(zhí)行的代碼,從而操作設(shè)備;本地服務(wù)端,即與 Java 層相對(duì)應(yīng)的底層 C/C++代碼層,以動(dòng)態(tài)鏈接庫(.so 文件)的形式與 Java 層通過 JNI 接口進(jìn)行交互,它用于實(shí)現(xiàn)用戶偏好的讀取,模型的學(xué)習(xí)和任務(wù)決策,并將決策結(jié)果轉(zhuǎn)化為 JSON 格式的信息傳遞給 Java 層。

Fastbot 的實(shí)現(xiàn)繼承 Monkey 原生框架,下圖展示了 Fastbot 擴(kuò)展的代碼簡(jiǎn)要結(jié)構(gòu)圖,在 java 層新增了來自 Fastbot 算法返回的事件源 MonkeySourceApeNative 類,對(duì) GUI 樹的獲取,以及對(duì) Android 不同的系統(tǒng)的兼容的 Adapter 適配接口,此外,為了支持自定義操作的解析和執(zhí)行對(duì) Monkey 的原始事件進(jìn)行了封裝。

圖片

常用配置

1. 配置自定義事件

Fastbot 支持自定義事件序列,適用于場(chǎng)景覆蓋不全,通過人工配置到達(dá) Fastbot 遍歷不到的場(chǎng)景。

配置步驟:

  1. 新建 max.xpath.actions 文件(文件名稱固定不能更改)
  2. 參照案例格式指定控件和相應(yīng)的動(dòng)作。其中:
  1. prob:發(fā)生概率,"prob":1,代表發(fā)生概率為 100%
  2. activity:所屬場(chǎng)景
  3. times:重復(fù)次數(shù),默認(rèn)為 1 即可
  4. actions:具體需要執(zhí)行的事件序列,其中要指名每個(gè)操作對(duì)象的 xpath,對(duì)應(yīng)的動(dòng)作 action,和與下一個(gè)事件間隔的時(shí)間 throttle(ms),注意 xpath 寫法
  1. 動(dòng)作類型(必須大寫):
  2. CLICK:點(diǎn)擊,想要輸入內(nèi)容在 action 下補(bǔ)充 text,如果有 text 則執(zhí)行文本輸入

  3. LONG_CLICK:長(zhǎng)按

  4. BACK:返回

  5. SCROLL_TOP_DOWN:從上向下滾動(dòng)

  6. SCROLL_BOTTOM_UP:從下向上滑動(dòng)

  7. SCROLL_LEFT_RIGHT:從左向右滑動(dòng)

  8. SCROLL_RIGHT_LEFT:從右向左滑動(dòng)

  9. 配置完成后,將配置文件推送到手機(jī)端: adb push 路徑+max.xpath.actions /sdcard


下面以 AmazeFileManager 為例:

  1. 第一種情況:當(dāng)事件執(zhí)行不涉及 Activity 的跳轉(zhuǎn)時(shí),只需將所有的事件序列寫在一個(gè)對(duì)象中。

如圖所示,actions 字段里的 4 個(gè)動(dòng)作分別對(duì)應(yīng)下圖中紅框標(biāo)出的動(dòng)作,(1)點(diǎn)擊菜單按鈕打開菜單欄,(2)點(diǎn)擊 recent file 按鈕到達(dá)相應(yīng)文件目錄,(3)點(diǎn)擊加號(hào)按鈕,打開浮選選項(xiàng),(4)點(diǎn)擊 File 按鈕打開新建文件對(duì)話框。

圖片

[
    {
        "prob":1,
        "activity":"com.amaze.filemanager.ui.activities.MainActivity",
        "times":1,
        "actions":[
            {
                "xpath":"http://*[@content-desc='Navigate up']",
                "action":"CLICK",
                "throttle": 2000
            },
            {
                "xpath":"http://*[@resource-id='com.amaze.filemanager:id/design_menu_item_text' and @text='Recent files']",
                "action":"CLICK",
                "throttle": 2000
            },
            {
                "xpath":"http://*[@resource-id='com.amaze.filemanager:id/sd_main_fab']",
                "action":"CLICK",
                "throttle": 2000
            },
            {
                "xpath":"http://*[@resource-id='com.amaze.filemanager:id/menu_new_file']",
                "action":"CLICK",
                "throttle": 2000
            }
        ]
    }
]
  1. 第二種情況:當(dāng)事件執(zhí)行涉及到 Activity 的跳轉(zhuǎn)時(shí),要將對(duì)應(yīng)不同 Activity 的事件序列單獨(dú)存放。

下圖展示了從 MainActivity 跳轉(zhuǎn)到 PreferencesActivity 的例子。

圖片

可以看到在配置文件中有兩個(gè)對(duì)象,分別對(duì)應(yīng) MainActivity 和 PreferencesActivity 兩個(gè)頁面下需要執(zhí)行的事件序列。

[
    {
        "prob":1,
        "activity":"com.amaze.filemanager.ui.activities.MainActivity",
        "times":1,
        "actions":[
            {
                "xpath":"http://*[@content-desc='Navigate up']",
                "action":"CLICK",
                "throttle": 2000
            },
            {
                "xpath":"http://*[@resource-id='com.amaze.filemanager:id/design_navigation_view']",
                "action":"SCROLL_BOTTOM_UP",
                "throttle": 2000
            },
            {
                "xpath":"http://*[@text='Settings' and @resource-id=['com.amaze.filemanager:id/design_menu_item_text']",
                "action":"CLICK",
                "throttle": 2000
            }
        ]
    },
    {
         "prob":1,
         "activity":"com.amaze.filemanager.ui.activities.PreferencesActivity",
         "times":1,
         "actions":[
                 {
                     "xpath":"http://*[@resource-id='android:id/title' and @text='Appearance']",
                     "action":"CLICK",
                     "throttle": 2000
                 }
             ]
    }
]
  1. 帶文本輸入的情況

配置格式: 在 action 字段選擇“CLICK”,同時(shí)添加“text”字段存儲(chǔ)需要輸入的文本。

圖片

以抖音為例,使用以下配置信息可以指定完成輸入賬戶信息的操作。兩個(gè)動(dòng)作,分別對(duì)應(yīng)點(diǎn)擊 use phone 按鈕和輸入文本。

[
    {
        "prob":1,
        "activity":"com.ss.android.ugc.aweme.account.login.auth.I18nSignUpActivityWithNoAnimation",
        "times":1,
        "actions":[
            {
                "xpath":"http://*[@resource-id='com.zhiliaoapp.musically:id/ayo' and @text='Use phone / email / username']",
                "action":"CLICK",
                "throttle": 2000
            }

        ]
    },
{
        "prob":1,
        "activity":"com.ss.android.ugc.aweme.account.login.v2.ui.SignUpOrLoginActivity",
        "times":1,
        "actions":[
            {
                "xpath":"http://*[@text='Phone number' and @resource-id=['com.zhiliaoapp.musically:id/e61']",
                "action":"CLICK",
                "text":"12341828506",
                "throttle": 2000
            }

        ]
    }
]

2. 屏蔽控件

Fastbot 支持手動(dòng)配置需要屏蔽的控件或區(qū)域,比如測(cè)試過程中“半路”中途退出登錄,屏蔽退出登錄按鈕。

配置步驟:

  1. 新建 max.widget.black 文件(文件名稱固定不可更改)
  2. 參照案例格式指定需要屏蔽的控件,格式如下:
  • bounds:屏蔽某個(gè)區(qū)域,在該區(qū)域內(nèi)的控件或坐標(biāo)不會(huì)被點(diǎn)擊。
  • xpath:查找匹配的控件,屏蔽點(diǎn)擊該控件。
  • xpath+bounds:查找匹配的控件,當(dāng)控件存在時(shí)屏蔽指定的區(qū)域。
  1. activity:當(dāng) activity 與 currentactivity 一致時(shí)執(zhí)行如下匹配
  2. 屏蔽控件或區(qū)域共有三種方式:
  3. 配置完成后,將配置文件推送到手機(jī)端: adb push 路徑+max.widget.black /sdcard

下面以 AmazeFileManager 為例,展示如何進(jìn)行控件,區(qū)域以及樹剪枝屏蔽:

圖片

  1. 屏蔽控件

如圖(a)所示,紅框標(biāo)出來的黑色區(qū)域控件是手動(dòng)配置的屏蔽控件。在這里,使用 xpath 來指定需要被屏蔽的控件。

[
{
    "activity":"com.ss.android.ugc.aweme.main.MainActivity",
    "xpath":"http://*[@content-desc='Navigate up']"
},
{
    "activity":"com.ss.android.ugc.aweme.main.MainActivity",
    "xpath":"http://*[@content-desc='More options']"
}

]
  1. 屏蔽區(qū)域

如圖(b)所示,紅框標(biāo)出來的黑色區(qū)域控件是手動(dòng)配置的屏蔽區(qū)域。在這里使用 bounds 來配置屏蔽區(qū)域。

[
{
    "activity":"com.ss.android.ugc.aweme.main.MainActivity",
    "bounds":"[0,18],[240,60]"
}
]
  1. 樹剪枝屏蔽

樹剪枝屏蔽是指在 GUI 樹中查找到對(duì)應(yīng)控件,通過將控件屬性的 enable 設(shè)置為 False,從而使控件屏蔽。

配置步驟:

  1. 配置 max.tree.pruning 文件(文件名固定不可更改)
  2. 參照案例格式指定需要屏蔽的控件,格式如下:
  1. activity:當(dāng) activity 與 currentactivity 一致時(shí)執(zhí)行如下匹配
  2. 剪枝方式:配置 xpath,查找匹配的控件,改變控件屬性,從而使控件屏蔽。
  1. 配置完成后,將配置文件推送到手機(jī)端: adb push 路徑+max.tree.pruning /sdcard

例子:仍以 AmazeFileManager 為例, 如上圖(c)所示,被紅框標(biāo)出的黑色區(qū)域即為手動(dòng)配置的樹剪枝屏蔽控件,可以通過將控件的 enabled 屬性變?yōu)?flase,也可以將其他屬性變?yōu)榭諄韺?shí)現(xiàn)屏蔽。

[
{
    "activity":"com.ss.android.ugc.aweme.main.MainActivity",
    "xpath":"http://*[@content-desc='Navigate up']",
    "enabled":"false"
},
{
    "activity":"com.ss.android.ugc.aweme.main.MainActivity",
    "xpath":"http://*[@content-desc='More options']",
    "enabled":"false"
},
{
    "activity":"com.ss.android.ugc.aweme.main.MainActivity",
    "xpath":"http://*[@resource-id='com.amaze.filemanager:id/search'",
    "resourceid":"",
    "contentdesc":"",
    "text":"",
    "classname":""
}
]

更多信息

Fastbot 開源地址:https://github.com/bytedance/Fastbot_Android

更多 Fastbot 技術(shù)細(xì)節(jié)請(qǐng)參考該論文:“Fastbot2: Reusable Automated Model-based GUI Testing for Android Enhanced by Reinforcement Learning”。 Zhengwei Lv(呂正偉), Chao Peng(彭超), Zhao Zhang(張釗), Ting Su(蘇亭), Kai Liu(劉凱), Ping Yang(楊萍)。 37th IEEE/ACM International Conference on Automated Software Engineering (ASE 2022).

責(zé)任編輯:龐桂玉 來源: 字節(jié)跳動(dòng)技術(shù)團(tuán)隊(duì)
相關(guān)推薦

2012-07-10 16:22:01

開源架構(gòu)

2009-03-20 09:49:00

負(fù)載均衡CDN網(wǎng)站架構(gòu)

2015-09-25 09:56:37

負(fù)載均衡

2024-10-30 10:06:51

2021-12-07 07:32:09

kafka架構(gòu)原理

2018-06-26 11:33:21

云計(jì)算開源軟件

2012-08-01 10:50:48

性能測(cè)試測(cè)試架構(gòu)

2022-01-10 23:59:02

Sentry SaaS 開源

2024-12-05 10:42:51

網(wǎng)絡(luò)架構(gòu)NAT

2021-11-11 10:48:35

架構(gòu)運(yùn)維技術(shù)

2017-05-16 15:33:42

Python網(wǎng)絡(luò)爬蟲核心技術(shù)框架

2009-11-30 10:55:22

2017-07-07 14:30:27

Flink架構(gòu)拓?fù)?/a>

2025-04-03 07:00:00

2024-09-29 08:00:00

動(dòng)態(tài)代理RPC架構(gòu)微服務(wù)架構(gòu)

2013-06-17 16:29:56

2020-09-18 10:56:00

惡意軟件沙盒網(wǎng)絡(luò)攻擊

2020-09-18 10:46:10

網(wǎng)絡(luò)攻擊

2018-12-19 16:15:35

服務(wù)器虛擬化開源

2015-08-27 09:46:02

開源對(duì)象存儲(chǔ)Swift
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)