日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > Android >内容正文

Android

android驱动测试,Android: 通过 cucumber 驱动 monkey 做稳定性测试

發布時間:2025/3/8 Android 53 豆豆
生活随笔 收集整理的這篇文章主要介紹了 android驱动测试,Android: 通过 cucumber 驱动 monkey 做稳定性测试 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

主要內容

穩定性測試是什么

Monkey 介紹

自動化 Monkey

穩定性測試是什么

通過隨機點擊屏幕一段時間,看看 app 會不會奔潰,能不能維持正常運行。

Monkey 介紹

Monkey 是一個命令行工具,它可以運行在我們的模擬器或者設備當中。它可以發送一些偽隨機(pseudo-random)的用戶事件流,例如點擊,觸摸,手勢等。我們能夠使用 Monkey 工具來對我們所開發的應用進行壓力測試。Monkey 測試是一種為了測試軟件的穩定性,健壯性的快速有效的方法。

Monkey 常用命令

基本語法如下:

adb shell monkey [options]

如果什么參數都不給,monkey 將以無反饋模式進行啟動,并把事件任意發送到安裝在目標環境下中的全部包。

下面是一個更為典型的命令行示例,它啟動指定的應用程序,并向其發送 500 個偽隨機事件:

adb shell monkey -p your.package.name -v 500

根據 Monkey 官網的介紹:https://developer.android.com/studio/test/monkey 可以添加對應的執行參數。

Monkey 的參數都是根據具體需求設定的,主要分為常規類,事件類,約束類和調試類。下面就對這些命令進行說明:

類別

參數

說明

常規類

--help

顯示 moneky 參數幫助信息 usage

-v

打印日志信息,每個-v 將增加反饋信息的級別。-v 越多日志信息就會越詳細,不過目前最多支持三個-v。Level0:一個-v,除啟動提示、測試完成和最終結果之外,提供較少信息。Level1:兩個-v,提供較為詳細的測試信息,如逐個發送到 Activity 的事件。Level2:三個-v,提供更加詳細的設置信息,如測試中被選中的或未被選中的 Activity。

事件類

-s

偽隨機數生成器的 seed 值。如果用相同的 seed 值再次運行 Monkey,它將生成相同的事件序列。

--throttle

后面接時間,單位為毫秒,表示事件之間的固定延時(即執行每一個指令的間隔時間),若不接這個選項,monkey 則不會延時

--pct-touch

后面接觸摸事件的百分比。(觸摸事件是一個 down-up 事件,它發生在屏幕上的某單一位置)

--pct-motion

后面接動作事件的百分比。(動作事件由屏幕上某處的一個 down 事件、一系列的偽隨機事件和一個 up 事件組成)。

--pct-trackball

后面接軌跡事件的百分比 (軌跡事件由一個或幾個隨機的移動組成,有時還伴隨有點擊)。

--pct-nav

后面接 “基本” 導航事件百分比 (導航事件主要來自方向輸入設備的上,下,左,右事件)

--pct-majornav

后面接 “主要” 導航事件的百分比 (這些導航事件通常引發圖形界面中的動作,如:5-way 鍵盤的中間按鍵、回退按鍵、菜單按鍵)

--pct-syskeys

后面接 “系統” 按鍵事件的百分比 (這些按鍵通常被保留,由系統使用,如 Home、Back、StartCall、End Call 及音量控制鍵)。

--pct-appswitch

后面接啟動 Activity 的百分比。在隨機間隔里,Monkey 將執行一個 startActivity() 調用,作為最大程度覆蓋包中全部 Activity 的一種方法。

--pct-anyevent

調整其它類型事件的百分比。它包羅了所有其它類型的事件,如:按鍵、其它不常用的設備按鈕、等等。

約束類

-p

如果用此參數指定了一個或幾個包,Monkey 將只允許系統啟動這些包里的 Activity。如果你的應用程序還需要訪問其它包里的 Activity(如選擇取一個聯系人),那些包也需要在此同時指定。如果不指定任何包,Monkey 將允許系統啟動全部包里的 Activity。要指定多個包,需要使用多個-p 選項,每個-p 選項只能用于一個包。

-c

如果用此參數指定了一個或幾個類別,Monkey 將只允許系統啟動被這些類別中的某個類別列出的 Activity。如果不指定任何類別,Monkey 將選擇下列類別中列出的 Activity:Intent.CATEGORY_LAUNCHER 或 Intent.CATEGORY_MONKEY。要指定多個類別,需要使用多個-c 選項,每個-c 選項只能用于一個類別。

調試類

--dbg-no-events

設置此選項,Monkey 將執行初始啟動,進入到一個測試 Activity,然后不會再進一步生成事件。為了得到最佳結果,把它與-v、一個或幾個包約束、以及一個保持 Monkey 運行 30 秒或更長時間的非零值聯合起來,從而提供一個環境,可以監視應用程序所調用的包之間的轉換。

--hprof

設置此選項,將在 Monkey 事件序列之前和之后立即生成 profiling 報告。這將會在 data/misc 中生成大文件 (~5Mb),所以要小心使用它。

--ignore-crashes

通常,當應用程序崩潰或發生任何失控異常時,Monkey 將停止運行。如果設置此選項,Monkey 將繼續向系統發送事件,直到計數完成。

--ignore-timeouts

通常,當應用程序發生任何超時錯誤 (如 “ApplicationNot Responding” 對話框) 時,Monkey 將停止運行。如果設置此選項,Monkey 將繼續向系統發送事件,直到計數完成。

一條常用的 Monkey 命令

adb shell monkey -v -v -v -p [PackageName] --ignore-crashes --ignore-timeouts --ignore-security-exceptions --monitor-native-crashes --ignore-native-crashes --throttle 1000 100000 > monkey.txt

Monkey 的特點

綜合上面的描述,使用 Monkey 如下特點:

1.Monky 測試使用的事件流數據流是隨機的,不能進行自定義。

2.可對 MonkeyTest 的對象,事件數量,類型,頻率等進行設置。

通過自然語言開發 Monkey 自動化腳本

因為命令行運行每次需要修改不同的參數,這樣操作不是很靈活,我們可以寫段代碼來驅動。為了讓腳本的可讀性更高,我們使用 BDD 的方式來做。BDD 的好處就是可以在自然語言描述中修改參數就能直接運行程序,并可以數據驅動。對于團隊協作,或者新人了解業務特別方便。下面借助工具來實現這些操作:

因為腳本用 JavaScript,開發工具可以使用CukeTest(http://cuketest.com)

執行引擎可以借助 adbkit 來實現。步驟如下:

環境搭建

配置 sdk(請自行網上查閱資料本機安裝 sdk)

安裝 node.js 庫 adbkit(https://github.com/openstf/adbkit)

創建項目

打開 CukeTest,文件新建 - 新建項目;項目類型選擇基本項目,填寫項目信息,完成創建即可。

在項目的根目錄下執行npm install adbkit --save 完成 abdkit 庫的安裝。

關于 abdkit 可以參考 GitHub https://github.com/openstf/adbkit

設置超時時間

由于需要持續長時間按去運行 monkey 腳本檢測應用的穩定性,所以設置超時時間長一些

編輯 support/env.js

const { setDefaultTimeout } = require('cucumber')

setDefaultTimeout(1000 * 1000)

編輯 feaure 文件

# language: zh-CN

功能: monkey 穩定性測試

調用monkey腳本 檢測手機app原生計算器穩定性

場景: 設計并調用monkey腳本

假如app的package為"com.android.calculator2"

同時設置運行隨機數值為10000

當我希望基本導航事件中占用比例為"10"

同時觸摸事件在所有事件中所占的比例為"70"

同時每個操作步驟之間的間隔為1000毫秒

并且忽略程序崩潰或者發生異常

那么手機序列號為"192.168.181.101:5555"運行1000次腳本

如果你想修改 monkey 腳本的參數,直接修改 feature 文件中的參數即可。

編寫自動化腳本

const { Given, When, Then } = require('cucumber');

var adb = require('adbkit');

var client = adb.createClient();

Your step definitions /

var command = 'monkey'

Given(/^app的package為"([^"]*)"$/, async function (packagename) {

command = command + "-p" + packagename

});

Given(/^設置運行隨機數值為(\d+)$/, async function (seed) {

command += "-s" + seed

});

When(/^我希望基本導航事件中占用比例為"([^"]*)"$/, async function (nav) {

command += '--pct-touch' + nav});

When(/^觸摸事件在所有事件中所占的比例為"([^"]*)"$/, async function (touch) {

command += "--pct-touch" + touch

});

When(/^忽略程序崩潰或者發生異常$/, async function () {

command += "--ignore-crashes"

});

When(/^每個操作步驟之間的間隔為(\d+)毫秒$/, async function (ms) {

command += "--throttle" + ms

});

Then(/^手機序列號為"([^"]*)"運行(\d+)次腳本$/, async function (deviceid, num) {

command += "" + num;

return client.shell(deviceid, command)

// Use the readAll() utility to read all the content without

// having to deal with the events. `output` will be a Buffer

// containing all the output.

.then(adb.util.readAll)

.then(function (output) {

console.log('[%s] %s', device.id, JSON.stringify(output.toString().trim()))

})

});

運行腳本

點擊運行 feature 文件,即可看到 monkey 自動去操作模擬器的計算器

如果要對多個應用做不同的 Monkey 測試,只需要在 CukeTest 中將這個場景一鍵轉換成場景大綱,再添加多行數據就行了。真正實現了通過數據驅動做 Monkey 測試。

歡迎大家一起交流學習。

總結

以上是生活随笔為你收集整理的android驱动测试,Android: 通过 cucumber 驱动 monkey 做稳定性测试的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。