基于Instrumentation Framework的開(kāi)源項(xiàng)目AndroidMonkey是怎樣的,很多新手對(duì)此不是很清楚,為了幫助大家解決這個(gè)難題,下面小編將為大家詳細(xì)講解,有這方面需求的人可以來(lái)學(xué)習(xí)下,希望你能有所收獲。
創(chuàng)新互聯(lián)公司是專業(yè)的三山網(wǎng)站建設(shè)公司,三山接單;提供網(wǎng)站建設(shè)、做網(wǎng)站,網(wǎng)頁(yè)設(shè)計(jì),網(wǎng)站設(shè)計(jì),建網(wǎng)站,PHP網(wǎng)站建設(shè)等專業(yè)做網(wǎng)站服務(wù);采用PHP框架,可快速的進(jìn)行三山網(wǎng)站開(kāi)發(fā)網(wǎng)頁(yè)制作和功能擴(kuò)展;專業(yè)做搜索引擎喜愛(ài)的網(wǎng)站,專業(yè)的做網(wǎng)站團(tuán)隊(duì),希望更多企業(yè)前來(lái)合作!
最大的一個(gè)疑問(wèn)是怎么monkey是用instrumentation來(lái)注入event呢?這樣的話它怎么做到跨進(jìn)程應(yīng)用的事件發(fā)送呢?因?yàn)楦鶕?jù)本人的了解instrumentation框架是不能跨進(jìn)程的,而monkey是絕對(duì)跨進(jìn)程的!
@Override public int fireEvent(Instrumentation testRuner) { String note; if (mAction == KeyEvent.ACTION_UP) { note = "ACTION_UP"; } else { note = "ACTION_DOWN"; } System.out.println(":Typing Key (" + note + "): " + mKeyCode + " // "); try { // testRuner.sendKeySync(getEvent()); testRuner.sendKeyDownUpSync(mKeyCode); } catch (Exception e) { System.out.println("Failed to send key (" + note + "): " + mKeyCode + " // "); return MonkeyEvent.INJECT_FAIL; } return MonkeyEvent.INJECT_SUCCESS; }
糾結(jié)了一段時(shí)間后返回下載地方看了下概覽,很短,但很清楚的描述了這個(gè)不是我想要的monkey,而是原生monkey的一個(gè)修改后做成的android庫(kù)。既然碰上了就順便翻譯下它的介紹和使用吧,反正就那么幾句話,待今后有時(shí)間再來(lái)進(jìn)一步研究它了,至于它是否真的如我所言不能跨進(jìn)程,就留待今后或者大家來(lái)驗(yàn)證了。
AndroidMonkey是一個(gè)android庫(kù)。事實(shí)上它是在基于原生monkey的基礎(chǔ)上做成的一個(gè)方便測(cè)試和分析(比如:代碼覆蓋率)的一個(gè)測(cè)試庫(kù)。
測(cè)試人員/用戶可以很方便的使用這個(gè)庫(kù)來(lái)創(chuàng)建針對(duì)安卓gui應(yīng)用的隨機(jī)測(cè)試腳本
為什么使用這個(gè)庫(kù):
使用這個(gè)庫(kù)的話你可以只用幾行代碼就能編寫(xiě)出針對(duì)你的app的隨機(jī)測(cè)試用例
你可以在你的測(cè)試代碼中加入斷言從而很方便的去判斷你的SUT(被測(cè)系統(tǒng)/應(yīng)用)的當(dāng)前情況(如果你用monkey的話是很難做到的)
你可以通過(guò)隨即測(cè)試對(duì)你的app做覆蓋率分析,這對(duì)我們的研究是很有用的(像我現(xiàn)在所做的)(譯者注:其實(shí)最后這一句話應(yīng)該這樣子去理解:如果你是一個(gè)公司的采購(gòu),你想去評(píng)估一個(gè)應(yīng)用是否足夠穩(wěn)定滿足你的需求,那么你就會(huì)先試用做一些前期研究)
public class ContactAdderTest extends ActivityInstrumentationTestCase2{ private int NUM_EVENTS = 1000; public ContactAdderTest() { super("com.example.android.contactmanager", ContactAdder.class); } @Override protected void setUp() throws Exception { super.setUp(); setActivityInitialTouchMode(false); } public void testMonkeyEvents() { Display display = getActivity().getWindowManager().getDefaultDisplay(); Instrumentation inst = getInstrumentation(); PackageManager pm = getActivity().getPackageManager(); Monkey monkey = new Monkey(display, "com.example.android.contactmanager", inst, pm); // Generate and fire a random event. for (int i = 0; i < NUM_EVENTS; i++) { monkey.nextRandomEvent(); } } }
使用簡(jiǎn)介
簡(jiǎn)介
以下是介紹如何使用這個(gè)庫(kù):
詳情
C創(chuàng)建android項(xiàng)目
先創(chuàng)建一個(gè)Android Test Project項(xiàng)目,通過(guò)Android ADT[http://developer.android.com/sdk/eclipse-adt.html] 添加對(duì)AndroidMonkey庫(kù)的引用(引用jar或者項(xiàng)目)
創(chuàng)建測(cè)試類
創(chuàng)建一個(gè)普通的ActivityInstrumentationTestCase2測(cè)試類,然后加入如下的測(cè)試用例代碼:
public void testMonkeyEvents(){ Display display = getActivity().getWindowManager().getDefaultDisplay(); Instrumentation inst = getInstrumentation(); PackageManager pm = getActivity().getPackageManager(); Monkey monkey = new Monkey(display, packageToTest, inst, pm); for (int i = 0; i < NUM_EVENTS; i++){ monkey.nextRandomEvent(); } }
看完上述內(nèi)容是否對(duì)您有幫助呢?如果還想對(duì)相關(guān)知識(shí)有進(jìn)一步的了解或閱讀更多相關(guān)文章,請(qǐng)關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,感謝您對(duì)創(chuàng)新互聯(lián)的支持。