freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

畢業(yè)設(shè)計(jì)-面向android系統(tǒng)的測(cè)試工具(編輯修改稿)

2025-07-12 16:28 本頁(yè)面
 

【文章內(nèi)容簡(jiǎn)介】 通過(guò) Instrumentation 實(shí)現(xiàn),Instrumentation 中也提供了一系列對(duì) Activity 生命周期控制的方法。以 Instrumentation 為基礎(chǔ), Android SDK 在 Junit 基礎(chǔ)上進(jìn)行了擴(kuò)展,提供了 AndroidTestCase 類及系列子類,其中最重要的一個(gè)類是 ActivityInstrumentationTestCase2 基于 Instrumentation 的測(cè)試框架的 工作原理 SDK 中的這張圖說(shuō)明的很清楚了: 研究 Android 源碼發(fā)現(xiàn)框架層中有很多對(duì)測(cè)試有幫助的類、方法都被加上了注解或是聲明為 private 的,無(wú)法從 app 層訪問(wèn)。自然而然我們想到了 java 的反射機(jī)制, java 反射允許我們?cè)L問(wèn)這樣的類和方法。 大連海洋大學(xué)本科畢業(yè)論文(設(shè)計(jì)) 第 3 章 測(cè)試工具介紹 10 在上面的基礎(chǔ)上,國(guó)外有人開(kāi)發(fā)出了 robot/ target=_blank Robotium 工具,可以在有 app 源碼或 apk 的情況下進(jìn)行自動(dòng)化黑盒測(cè)試。 但是 Robotium 目前的缺點(diǎn)也很明顯,無(wú)法對(duì) WebView 進(jìn)行操作,這對(duì)大量使用WebView 的淘寶 Android 客戶端來(lái)說(shuō)無(wú)疑是很大的限制。 而且 Robotium 提供的 API 是面向過(guò)程的,測(cè)試代碼的可擴(kuò)展性差。 我們需要一個(gè)面向?qū)ο蟮模蓪?duì) WebView 進(jìn)行操作的自動(dòng)化測(cè)試框架,這就催生了TMTS(Taobao Mobile Test Studio)框架。 TMTS 立項(xiàng)時(shí)還試圖著重解決另一個(gè)問(wèn)題,就是 Instrumentation 框架下 testapp 和 app運(yùn)行在一個(gè)進(jìn)程中 , app crash 會(huì)導(dǎo)致 testapp 一并 crash。當(dāng)時(shí)和士敦一起研究了Instrumentation、 Activity 的啟動(dòng)流程,甚至想去研究一下 dalvik 是如何解析 Manifest 文件的,最后也沒(méi)有想到好的方法,收獲就是了解了 android 更底層一些的細(xì)節(jié),這個(gè)問(wèn)題現(xiàn)在先擱置了起來(lái)。 從測(cè)試代碼方面來(lái)看, Robotium 中采用的是 actionMethod(View, arg)的方式,TMTS 中采用 getView(id).actionMethod(arg)的方式,更加符合 java 的編程習(xí)慣。 TMTS 測(cè)試代碼的編寫(xiě)也就是分三步,找到 View,調(diào)用 View 的相應(yīng)的 action 方法,斷言。 TMTS 框架主要思想就是通過(guò)反射機(jī)制調(diào)用 Android 框架層 API 拿到當(dāng)前 Activity 的所有 View,在此基礎(chǔ)上返回需要獲得的 View 對(duì)象,對(duì)獲得的 View 通過(guò) Instrumentation封裝一些此 View 常用的操作,最后返回,這就是 TmtsView 及其子類。 這種方式缺點(diǎn)也很明顯,對(duì)每個(gè)從 繼承來(lái)的子類,如果其中有特殊的操作,就需要封裝出一個(gè)對(duì)應(yīng)的 TmtsView 子類。 還有一個(gè)缺點(diǎn)就是目前是通過(guò) View 在布局文件中聲明的 id 去尋找,這樣測(cè)試人員在編寫(xiě)代碼時(shí)需要對(duì) app 的源碼非常熟悉,了解當(dāng)前操作的 view 的 id 是多少,在傳遞 id 參數(shù)時(shí)還有可能寫(xiě)錯(cuò)。之后我們對(duì)這個(gè)方式進(jìn)行了一些改進(jìn),使用 SDK 自帶的hierarchyviewer 工具獲得 view 的 id。對(duì)每個(gè)布局文件進(jìn)行解析生成 java 類,這個(gè)類中會(huì)提供方法返回布局文件中的所有帶 id 的 view,經(jīng)過(guò)討論,最后按 view 子類型來(lái)對(duì)一個(gè)布局中的 view 進(jìn)行歸類。 Bug 的定 位離不開(kāi)日志,因而日志系統(tǒng)也是一個(gè)測(cè)試框架重要的組成部分, Android的 Log 類中提供了一系列的靜態(tài)方法可以在 IDE 中打印日志。在 TMTS 中,提供TmtsLog 類,除日志打印外可將日志內(nèi)容實(shí)時(shí)保存至 SD 卡指定目錄,在框架代碼中的關(guān)鍵部位都加上了這樣的日志用來(lái)保存異常時(shí)的調(diào)用棧信息,用戶的測(cè)試代碼中也可以加上對(duì) TmtsLog 的調(diào)用跟蹤測(cè)試代碼執(zhí)行進(jìn)度, TmtsLog 將為每個(gè)測(cè)試類保存一份這樣的日志文件,同時(shí)包含用戶的過(guò)程日志和框架異常日志,文件名以精確到毫秒的日期加以區(qū)分。 項(xiàng)目做到這里遠(yuǎn)遠(yuǎn)沒(méi)有結(jié)束,套用 屈原的一句話就是路漫漫其修遠(yuǎn)兮。 后面計(jì)劃解決的問(wèn)題有: ,讓 testapp 和 app 運(yùn)行在兩個(gè)不同的進(jìn)程中,這是一個(gè)大坑。 ,目前框架中有很多地方硬編碼 ()去等待一個(gè) View 加載完成,避免對(duì)空的 View 進(jìn)行操作,或者是對(duì)一個(gè) view 進(jìn)行 set 操作后,也需要等待一段時(shí)大連海洋大學(xué)本科畢業(yè)論文(設(shè)計(jì)) 第 3 章 測(cè)試工具介紹 11 間讓操作生效。希望能找到一種回調(diào)機(jī)制優(yōu)雅的解決。 而且 Robotium 提供的 API 是面向過(guò)程的,測(cè)試代碼的可擴(kuò)展性差。 我們需要一個(gè)面向?qū)ο蟮?,可?duì) WebView 進(jìn)行操作的自動(dòng)化測(cè) 試框架,這就催生了TMTS(Taobao Mobile Test Studio)框架。 TMTS 立項(xiàng)時(shí)還試圖著重解決另一個(gè)問(wèn)題,就是 Instrumentation 框架下 testapp 和 app運(yùn)行在一個(gè)進(jìn)程中 , app crash 會(huì)導(dǎo)致 testapp 一并 crash。當(dāng)時(shí)和士敦一起研究了Instrumentation、 Activity 的啟動(dòng)流程,甚至想去研究一下 dalvik 是如何解析 Manifest 文件的,最后也沒(méi)有想到好的方法,收獲就是了解了 android 更底層一些的細(xì)節(jié),這個(gè)問(wèn)題現(xiàn)在先擱置了起來(lái)。 從測(cè) 試代碼方面來(lái)看, Robotium 中采用的是 actionMethod(View, arg)的方式,TMTS 中采用 getView(id).actionMethod(arg)的方式,更加符合 java 的編程習(xí)慣。 TMTS 測(cè)試代碼的編寫(xiě)也就是分三步,找到 View,調(diào)用 View 的相應(yīng)的 action 方法,斷言。 TMTS 框架主要思想就是通過(guò)反射機(jī)制調(diào)用 Android 框架層 API 拿到當(dāng)前 Activity 的所有 View,在此基礎(chǔ)上返回需要獲得的 View 對(duì)象,對(duì)獲得的 View 通過(guò) Instrumentation封裝一些此 View 常用的操作,最后返回,這就是 TmtsView 及其子類。 這種方式缺點(diǎn)也很明顯,對(duì)每個(gè)從 繼承來(lái)的子類,如果其中有特殊的操作,就需要封裝出一個(gè)對(duì)應(yīng)的 TmtsView 子類。 項(xiàng)目做到這里遠(yuǎn)遠(yuǎn)沒(méi)有結(jié)束,套用屈原的一句話就是路漫漫其修遠(yuǎn)兮 。 后面計(jì)劃解決的問(wèn)題有: 讓 testapp 和 app 運(yùn)行在兩個(gè)不同的進(jìn)程中,這是一個(gè)大坑。 目前框架中有很多地方硬編碼 ()去等待一個(gè) View 加載完成,避免對(duì)空的View 進(jìn)行操作,或者是對(duì)一個(gè) view 進(jìn) 行 set 操作后,也需要等待一段時(shí)間讓操作生效。希望能找到一種回調(diào)機(jī)制優(yōu)雅的解決。 Toast 消息 后面可能會(huì)研究的方向,是通過(guò)非 java 的方式來(lái)實(shí)現(xiàn) android 自動(dòng)化測(cè)試。 Android目前已經(jīng)通過(guò) ASE(Android Scripting Environment)支持了多種腳本語(yǔ)言,如 phyton, lua,perl 等,限于目前的人力還沒(méi)有時(shí)間來(lái)研究這一塊,相信 ASE 會(huì)給 Android 自動(dòng)化開(kāi)辟一片新天地。 最后談一點(diǎn)點(diǎn)感悟,老子曾經(jīng)曰過(guò): “持而盈之,不如其已 。揣而銳之,不可長(zhǎng)保。金 玉 滿堂,莫之能守 。富貴而驕,自遺其咎。 ”和 “重為輕根,靜為躁君。 ”第一句話說(shuō)有缺陷 才是真正的完美,沒(méi)有一個(gè)方案是真正完美的。第二句話說(shuō)有時(shí)候看起來(lái)完美的方案,過(guò)段時(shí)間之后又不適用了,而且不適用的地方很可能就是當(dāng)初覺(jué)得完美的地方,對(duì)于軟件項(xiàng) 目解決方案也是如此。 大連海洋大學(xué)本科畢業(yè)論文(設(shè)計(jì)) 第 3 章 測(cè)試工具介紹 12 . 測(cè)試工具中 Service 介紹 . Service 概述 由于手機(jī)屏幕的限制,通常情況下在同一時(shí)刻僅有一個(gè)應(yīng)用程序牌激活狀態(tài),并能夠顯示在手機(jī)屏幕上,因此,應(yīng)用程序需要一種機(jī)制,在沒(méi)有用戶界面的情況下,合其能夠長(zhǎng)時(shí)間在后臺(tái)運(yùn)行,實(shí)現(xiàn)應(yīng)用程序的特 定功能,并能夠處理事件或更新數(shù)據(jù), Android 系統(tǒng)提供了( Service)服務(wù)組件,它不直接與用戶進(jìn)行交互,卻能夠長(zhǎng)期在后臺(tái)運(yùn)行。有很多情況需要使用 Service,典型的例子就是: MP3播放器。 Service 非常適用于無(wú)需用戶干預(yù),且需要長(zhǎng)期運(yùn)行的后臺(tái)功能。 Service 沒(méi)有用戶界面,有利于降低系統(tǒng)資源。而且 Service 比 Activity 具有更高的優(yōu)先級(jí),因此在系統(tǒng)資源緊張的時(shí)候, Service 不會(huì)輕易被 Android 系統(tǒng)終止。即使 Service 被系統(tǒng)終止了,在系統(tǒng)資源恢復(fù)后 Service 也將自動(dòng)恢復(fù) 運(yùn)行狀態(tài),因此可以認(rèn)為 Service 是在系統(tǒng)中永久運(yùn)行的組件。 Service 除了實(shí)現(xiàn)后臺(tái)服務(wù)功能,還可以用于進(jìn)程間通信,解決兩個(gè)不同 Activity 應(yīng)用程序進(jìn)程之間的調(diào)用和通信問(wèn)題。 Service 概覽: 類結(jié)構(gòu)圖: Service 生命周期: 三個(gè)生命周期函數(shù): onCreate() onStart() onDestory 生命周期圖: 大連海洋大學(xué)本科畢業(yè)論文(設(shè)計(jì)) 第 3 章 測(cè)試工具介紹 13 . Service 啟動(dòng) 啟動(dòng) Service 的兩種方式: startService 和 bindService 一、 startService 啟動(dòng) Service 示例: 先創(chuàng)建一個(gè)類繼承于 Service 然后重寫(xiě) onBind()[且這個(gè)方法必須實(shí)現(xiàn) ], onCreate()、onStart()、 onDestory()方法 在 中注冊(cè)剛才寫(xiě)的這個(gè) Service view plainprint? service android:name=.MyService intentfilter action android:name= / /intentfilter /service 通過(guò)在 Activty 中啟動(dòng) Service startServiceDemo: MyService 繼承于 Service 類 view plainprint? package 。 import 。 import 。 import 。 public class MyService extends Service { @Override public IBinder onBind(Intent arg0) { // TODO Autogenerated method stub return null。大連海洋大學(xué)本科畢業(yè)論文(設(shè)計(jì)) 第 3 章 測(cè)試工具介紹 14 } @Override public void onCreate() { (onCreate)。 ()。 } @Override public void onDestroy() { (onDestory)。 ()。 } @Override public void onStart(Intent intent, int startId) { (onStart)。 (intent, startId)。 } } MainActivty: view plainprint? package 。 import 。 import 。 import 。 import 。 import 。 public class MainActivity extends Activity { public void onCreate(Bundle savedInstanceState) { (savedInstanceState)。 setContentView()。 Button btnStart = (Button) findViewById()。 Button btnStop = (Button) findViewById()。大連海洋大學(xué)本科畢業(yè)論文(設(shè)計(jì)) 第 3 章 測(cè)試工具介紹 15 final Intent service = new Intent()。 ()。 (new () { @Override public void onClick(View v) { // 啟動(dòng) Service (service)。 } })。 (new () { @Override p
點(diǎn)擊復(fù)制文檔內(nèi)容
畢業(yè)設(shè)計(jì)相關(guān)推薦
文庫(kù)吧 www.dybbs8.com
備案圖片鄂ICP備17016276號(hào)-1