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 自動去操作模擬器的計算器

68f2fb57be00acc1128a60dd8848eb55.gif

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

歡迎大家一起交流學習。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/533478.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/533478.shtml
英文地址,請注明出處:http://en.pswp.cn/news/533478.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

gradle 查看依賴類庫版本_Android studio中查看依賴的第三方庫的歷史版本和最新版本...

在日常開發過程中,我們通過會依賴很多的第三方庫項目。類似這樣:dependencies {compile com.android.support:support-v4:24.2.1compile com.google.code.gson:gson:2.4compile com.lzy.net:okhttputils:1.7.0compile com.github.ybq:Android-SpinKit:1.…

set和map去重調用什么方法_【ES6】Set、Map

SetSet 是 ES6 提供給我們的構造函數,能夠造出一種新的存儲數據的結構特點:只有屬性值沒有屬性名,成員值唯一用途:可以轉成數組,其本身具備去重(自動去重),交集,并集,差集的作用等參…

cygwin 編譯 android vlc,Cygwin?編譯?VLC?問題

Cygwin 編譯 VLC遇到了這么多問題,不過還好最后編譯過去了。問題1:gcc -mno-cygwin -Wsign-compare-Wall -mms-bitfields -pipe -o libaccess_output_dummy_plugin.dll-g-shared -u _vlc_entry__0_8_6 -L/usr/win32/liblibaccess_output_dummy_plugin.a …

kvm上添加萬兆網卡_爛泥:為KVM虛擬機添加網卡

本文首發于爛泥行天下。前幾篇文章介紹了有關KVM安裝虛擬機以及如何給虛擬機添加硬盤,今天我們再來介紹下有關如何給KVM虛擬機添加網卡。給KVM虛擬機添加網卡,可以分為兩種形式:圖形界面的和virsh attach-interface命令的。圖形界面的很簡單&…

android studio日歷小程序,android studio無法加載日歷界面

LayoutInflater inflater (LayoutInflater) getApplicationContext().getSystemService(LAYOUT_INFLATER_SERVICE); //載入界面view inflater.inflate(R.layout.pumkin_calendar,null);AlertDialog.Builder ad;ad new AlertDialog.Builder(pumkinLand.this);ad.setView(view);…

gazebo 直接獲取傳感器數據_5個使傳感器更簡單的技巧

傳感器遍布地球表面和周圍空間,為世界提供數據。這些廉價的傳感器是物聯網背后的驅動力之一,也是我們社會現在面臨的數字革命。然而,連接到傳感器并從傳感器獲取數據并不總是直截了當或容易的。這里有五個提示,可以幫助工程師第一…

paylinks.php_畢業設計-基于PHP的網上購物網站系統設計

畢業設計-基于PHP的網上購物網站系統設計,共45頁,14912字,附完整的程序源代碼。包括前臺,后臺的實現,先運行phpStudyAdmin后打開dzsw/install.php摘要隨著Internet技術的發展,人們的日常生活已經離不開網絡…

com/android/dx/command/main,com/android/dx/command/dexer/Main : Unsupported major.minor version 52.0

如果你在開發過程中遇到了上述的Bug,基本上是JDK版本不一致造成的,指的是高版本的JDK編譯的class不能放在低版本的JDK上運行。如果是Version 52,就表示JDK8編譯的class不能運行在JDK7上,所以需要在本地安裝JDK8. 如果是Version 51…

谷歌瀏覽器怎么重發請求_Googel 瀏覽器 模擬發送請求工具--Advanced REST Client

Advanced REST Client是 Chrome 瀏覽器下的一個插件,通過它可以發送 http、https、WebSocket 請求。在 Chrome 商店下搜索 Advanced REST Client,即可找到如果搜索不到的可到CSDN 下載:1.下載插件:Advanced Rest Client2.因為最新…

鴻蒙os吃內存嗎,終于上手機!華為鴻蒙 OS 2.0 系統:128KB 內存就能跑

終于上手機!華為鴻蒙 OS 2.0 系統:128KB 內存就能跑2020-09-11 10:51:480點贊0收藏0評論9月11日消息,華為昨天下午在東莞松山湖舉辦了全球開發者大會,本次大會帶來了全新的 EMUI 11 系統和備受期待的鴻蒙 OS 2.0 操作系統&#xf…

flink 不設置水印_區分理解Flink水印延遲與窗口允許延遲的概念

link 在開窗處理事件時間(Event Time) 數據時,可設置水印延遲以及設置窗口允許延遲(allowedLateness)以保證數據的完整性。這兩者因都是設置延遲時間所以剛接觸時容易混淆。本文接下將展開討論分析“水印延遲”與“窗口允許延遲”概念及區別。水印延遲(WaterMark)(1…

愛特php文件管理器2.8_查找「超級蜘蛛池開發者中心 摳:44564876易」安卓應用 - 豌豆莢...

8.6萬人安裝開發者頭條 - 程序員分享平臺 2015 年獲「最美應用」官方推薦,程序員必裝的應用。 開發者頭條是由一群程序員創建的,我們運營了 developerWorks 的微博、微信,創建了碼農周刊,已覆蓋百萬程序員; 我們更懂程…

談華為鴻蒙內核和操作系統,談華為鴻蒙內核和操作系統

作者 | 陸首群談到華為自研鴻蒙內核和操作系統,從華為透漏出來的信息來看,有點自相矛盾、撲朔迷離!我曾說過:真真假假,虛虛實實!這里有技術原因,也有外部原因。一開始(大概是 2016 年左右)&…

彈跳機器人 桌游_MIT機器人輕松搞定桌游疊疊樂:你能玩過它算我輸 |《科學》子刊...

乾明 發自 凹非寺 量子位 報道 | 公眾號 QbitAI江湖上,一直流傳著一種疊疊樂的試煉。規則很簡單,從下方的積木中,抽一根往上搭。你能往上搭幾層?對MIT團隊研發的機器人來說,玩這個游戲基本上不費吹灰之力。而且&#x…

華為鴻蒙無人駕駛,特斯拉最大的對手竟是華為?Hicar+鴻蒙OS無人駕駛技術不再一家獨大!...

原標題:特斯拉最大的對手竟是華為?Hicar鴻蒙OS無人駕駛技術不再一家獨大!短短幾個月的時間,特斯拉的市值翻了近4倍,對于一個超級企業來說一切都顯得那么不可思議,如果把它單純的看成一家車企,恐…

new_picview_一款漂亮的圖片查看器PictureViewer

前段時間寫了一款查看妹子圖片的客戶端宅男福利妹子客戶端SuperGank,于是后來就把其中的一個圖片查看的功能封裝成了一個library,使用簡單,可以進行多項設置。先來看一眼效果圖吧!下面來看看如何使用它:首先把圖片url的…

鴻蒙系統會不會影響游戲,令人擔心,鴻蒙系統會不會讓人失望?未來難說

如今,一直被炒的沸沸揚揚的鴻蒙系統,終于在2019年8月9日發布了,次日,也就是8月10日,榮耀的智慧屏又帶著鴻蒙系統出現了一次,榮耀智慧屏也成為了首次搭載鴻蒙系統的終端,見證了中國操作系統的歷史…

buck電路上下管_推薦 | 學好電路設計與仿真?你不能錯過這兩本書籍 ~

網 友小編,有沒有 Saber 相關書籍可以推薦一下?還有,Saber 軟件下載那個版本比較好?當然有啦!小 編《Saber 電路仿真及開關電源設計》柯福波 等編著本書以 Saber 開關電源為基礎,以具體工程電路為范例&am…

html5畫電池狀態,HTML5的一個顯示電池狀態的API簡介

這篇文章主要介紹了HTML5的一個顯示電池狀態的API簡介,由Mozilla設計,具體的設備和瀏覽器支持情況還要通過檢測才能確定,需要的朋友可以參考下移動設備的份額在網絡流量中在大量增長,其所貢獻的網絡流量非常龐大,以至于為了移動設備,我們單獨…

redux異步action_react-redux--異步Action

上兩篇文章敘述的都是同步操作,每當 dispatch action 時,state 會被立即更新。但是實際應用中,我們有很多操作執行后,過一段時間,才會得到結果。那么怎么處理這種情況呢?先熟悉一個概念中間件本質就是一個通…