前端自動化測試工具doh學習總結(二)

2021-09-23 21:41:48 字數 4234 閱讀 7432

一、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物件

require(["doh/runner", "doh/robot"], function(doh, robot),

runtest: function(), 500);

robot.typekeys(" again", 500, 2500);

robot.sequence(d.gettestcallback(function()), 900);

return d;

}});

doh.run();

});

這裡要說以下robot.sequence和d.gettestcallback這兩個函式,sequence是robot中的一種同步方式書寫的settimeout,下文delay中會講到這類方法的優勢。doh.deferred是doh中對dojo/deferred的擴充套件,加入了許多方法,gettestcallback就是其中之一,該函式作用就在於互動命令執行完成後驗證互動結果,並將結果告知測試框架從而決定顯示綠條還是紅條,通常乙個測試案例中只有一處呼叫該方法。一下是該函式的原始碼:

gettestcallback: function(cb, scope)catch(e)

_this.resolve(true);// 綠條

};},

三、api介紹

1、基本引數

下面以doh/robot中typekeys為例介紹一下robot api的基本引數,具體提供了哪些api可以在這裡檢視:api

typekeys: function(/*string||number*/ chars, /*integer, optional*/ delay, /*integer, optional*/ duration), 100) // first call; wait 100ms

// robot.typekeys("dij", 500) // 500ms after previous call; 600ms in all

//// duration:

// time, in milliseconds, to spend pressing all of the keys.

//}

現在我們就需要挨個該f1跟f2的時間引數,如果f1之後有100個動作要執行。。。。god bless you。使用robot api提供的函式,我們只需要設定每個動作之間的時間間隔即可。

settimeout(f1, 300);

settimeout(f2, 400);

=>>

settimeout(f3, 300);

settimeout(f1, 500);

settimeout(f2, 600);

1     var 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節點來定位元素。

mousemoveat : function(/*string||domnode||function*/ node, /*integer, optional*/ delay, /*integer, optional*/ duration, /*number, optional*/ offsetx, /*number, optional*/ offsety), 100) // first call; wait 100ms

// doh.typekeys("dij", 500) // 500ms after previous call; 600ms in all

//// duration:

// the default is 100ms.

//// offsetx:

// x offset relative to the node, in pixels, to move the mouse. the default is half the node's width.

//// offsety:

// y offset relative to the node, in pixels, to move the mouse. the default is half the node's height.

//

所以上文中的例項可以這樣寫:

require(["doh/runner", "dojo/robot"], function(doh, robot),

runtest: function(), 500);

robot.typekeys(" again", 500, 2500);

robot.sequence(d.gettestcallback(function()), 900);

return d;

}});

doh.run();

});

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 測試的物件僅為應用程式包,有一定的侷限...