一、robot簡介
robot是dojo框架中用來進行前端自動化測試的工具,doh主要目的在於單元測試,而robot可以用來模仿使用者操作來測試ui。總所周知,selenium也是一款比較流行的前端自動化測試工具,與selenium相比robot的優點在於robot觸發的瀏覽器事件是真正的使用者操作事件,而selenium中的事件屬於「合成事件」。打個比方,使用者在乙個textbox元素上觸發了mousedown事件,但是在觸發mousedown事件之前,肯定會觸發mouseover等事件。如果使用selenium的工具的「合成事件」則不會觸發mouseover等事件。對於使用dojo框架的開發者來說,robot更有利於同dijit互動,包括自定義dijit;當然最重要的一點是,在研究selenium的過程中,我發現selenium有嚴重的瀏覽器相容性問題!於是果斷放棄。
言歸正傳,下面來具體介紹robot。robot主要有三部分組成:
doh/robot,這裡面包含的是robot的核心內容,與dojo框架沒有耦合關係,可以單獨拿出去作為乙個自動化測試工具。
1 require(["doh/robot"], function(doh));
dojo/robot,該模組使用dojo核心技術,支援doh/robot的全部方法,主要在doh/robot的基礎上增加了兩個方法:mousemoveat和scrollintoview。
1 require(["dojo/robot"], function(doh));
dojox/robot,該模組在dojo/robot的基礎上增加了兩個重要方法:initrobot和waitforpageload。為什麼說他們重要,因為他們可以再乙個測試案例檔案中控制其他的測試檔案,後文將詳細。
1 require(["dojox/robot"], function(doh));
二、基本步驟
doh/robot測試主要分為以下四步:
1、例項化乙個doh.deferred物件
2、執行互動命令
3、設定乙個超時函式來驗證互動結果
4、在runtest中返回deferred物件
1 require(["doh/runner", "doh/robot"], function(doh, robot),
9 runtest: function
(), 500);
13 robot.typekeys(" again", 500, 2500);
14 robot.sequence(d.gettestcallback(function
()), 900);
17return
d;18}19
});20
doh.run();
21 });
這裡要說以下robot.sequence和d.gettestcallback這兩個函式,sequence是robot中的一種同步方式書寫的settimeout,下文delay中會講到這類方法的優勢。doh.deferred是doh中對dojo/deferred的擴充套件,加入了許多方法,gettestcallback就是其中之一,該函式作用就在於互動命令執行完成後驗證互動結果,並將結果告知測試框架從而決定顯示綠條還是紅條,通常乙個測試案例中只有一處呼叫該方法。一下是該函式的原始碼:
1 gettestcallback: function(cb, scope)catch
(e)10 _this.resolve(true);//
綠條11
};12 },
三、api介紹
1、基本引數
下面以doh/robot中typekeys為例介紹一下robot api的基本引數,具體提供了哪些api可以在這裡檢視:api
1 typekeys: function(/*string||number
*/ chars, /*
integer, optional
*/ delay, /*
integer, optional
*/duration), 100) // first call; wait 100ms
17//
robot.typekeys("dij", 500) // 500ms after previous call; 600ms in all
18//
19//
duration:
20//
time, in milliseconds, to spend pressing all of the keys.
21//
22 }
現在我們就需要挨個該f1跟f2的時間引數,如果f1之後有100個動作要執行。。。。god bless you。使用robot api提供的函式,我們只需要設定每個動作之間的時間間隔即可。
1 settimeout(f1, 300);2 settimeout(f2, 400);
3 =>>
4 settimeout(f3, 300);
5 settimeout(f1, 500);
6 settimeout(f2, 600);
1var mask = query("div.ovwhighlight")[0];
2 robot.mousemoveat(mask, 200, 200);
3 robot.mousepress(, 100);
4 robot.mousemoveat(mask, 200, 200, 10, 10);
5 robot.mouserelease(, 100);
duration便是的是執行這個動作所需要的時間,以typekeys為例,假設duration設定為1800ms,char為「abc」,則輸入a、b、c這三個字元各佔600ms。
2、mousemoveat
dojo/robot中提供了乙個mousemoveat函式,在上文的示例中,我們可以看到滑鼠移動函式用的是mousemove函式,該函式與mousemoveto函式都是通過相對於當前瀏覽器document的x、y座標來定位元素,而mousemoveat則是通過選擇符或者node節點來定位元素。
1 mousemoveat : function(/*string||domnode||function
*/ node, /*
integer, optional
*/ delay, /*
integer, optional
*/ duration, /*
number, optional
*/ offsetx, /*
number, optional
*/offsety), 100) // first call; wait 100ms
21//
doh.typekeys("dij", 500) // 500ms after previous call; 600ms in all
22//
23//
duration:
24//
25//
the default is 100ms.
26//
27//
offsetx:
28//
x offset relative to the node, in pixels, to move the mouse. the default is half the node's width.
29//
30//
offsety:
31//
y offset relative to the node, in pixels, to move the mouse. the default is half the node's height.
32//
所以上文中的例項可以這樣寫:
1 require(["doh/runner", "dojo/robot"], function(doh, robot),
9 runtest: function
(), 500);
13 robot.typekeys(" again", 500, 2500);
14 robot.sequence(d.gettestcallback(function
()), 900);
17return
d;18}19
});20
doh.run();
21 });
3、initrobot
具體示例可以訪問這裡,檢視原始碼你會發現這裡面並沒有robot的測試**,該檔案位於dojo-release-1.9.1-src\dijit\tests目錄下,robot測試**位於dojo-release-1.9.1-src\dijit\tests\robot目錄下。
參考文件:
前端自動化測試工具doh學習總結(二)
一 robot簡介 robot是dojo框架中用來進行前端自動化測試的工具,doh主要目的在於單元測試,而robot可以用來模仿使用者操作來測試ui。總所周知,selenium也是一款比較流行的前端自動化測試工具,與selenium相比robot的優點在於robot觸發的瀏覽器事件是真正的使用者操作...
自動化測試工具
二 如何實施自動化測試 自動化測試指軟體測試的自動化,在預設狀態下執行應用程式或者系統預設條件包括正常和異常,最後評估執行結果。將人為驅動的測試行為轉化為機器執行的過程。自動化測試框架一般可以分為兩個層次,上層是管理整個自動化測試的開發,執行以及維護,在比較龐大的專案中,它體現重要的作用,它可以管理...
自動化測試工具monkey
monkey是android中的乙個命令列工具,可以執行在模擬器裡或實際裝置中。它向系統傳送偽隨機的使用者事件流 如按鍵輸入 觸控螢幕輸入 手勢輸入等 實現對正在開發的應用程式進行壓力測試。monkey測試是一種為了測試軟體的穩定性 健壯性的快速有效的方法。a 測試的物件僅為應用程式包,有一定的侷限...