動手寫一個Remoting介面測試工具(附原始碼下載)

zhuweisky發表於2014-05-14

      基於.NET開發分散式系統,經常用到Remoting技術。在測試驅動開發流行的今天,如果針對分散式系統中的每個Remoting介面的每個方法都要寫詳細的測試指令碼,無疑非常浪費時間。所以,我想寫一個能自動測試remoting介面的小工具InterfaceTester。而且,當分散式系統中的某個remoting介面出現bug時,該小工具可以提交需要模擬的資料,以便在除錯remoting服務的環境中,快速定位和解決bug。

  InterfaceTester執行起來後的效果如下圖:

      

1.如何使用

(1)首先,填上要測試的並且是已經發布的Remoting服務的地址資訊。

(2)選取要測試的remoting介面所在的程式集,一般是一個dll。選定程式集後,InterfaceTester會自動搜尋該程式集中定義的所有介面,並將其繫結到“介面型別”的下拉選單。

(3)從 “介面型別”的下拉選單中選擇要測試的介面。選定介面後,InterfaceTester會自動搜尋該介面中定義的所有方法,並將其繫結到“目標方法”的下拉選單。

(4)從 “目標方法”的下拉選單中選擇要測試的方法,InterfaceTester會根據該方法所要求的引數,自動生成引數錄入介面。

(5)在引數錄入介面上,輸入用於測試的引數的值,然後,點選“呼叫”按鈕, InterfaceTester便會呼叫上述指定地址的remtoing服務的指定介面的指定方法,如果呼叫的方法有返回值,則會在“呼叫返回”的panel上顯示該值。如果返回的不是一個簡單型別,而是一個物件,則“呼叫返回”的panel上將會以xml的形式顯示這個物件的各個屬性值。

 

2.實現原理

就這個小工具的實現而言,主要用到的技術就是反射(reflection)。另外,需要注意的就是,根據引數的型別,生成錄入介面。具體細節大家可以參見原始碼。目前,InterfaceTester支援的被測試方法的引數型別是有限制的:

(1)支援簡單的資料型別,像string、int、bool等。

(2)支援List<>、I List<>、IDictionary<,>、Dictionary<,>等集合型別。

(3)支援簡單的資料結構的class(如像Point、自定義的Entity等)。

 

3.原始碼解決方案

  下載原始碼並用VS開啟後,解決方案下有三個專案:InterfaceTester、DemoInterface、DemoService。

(1)InterfaceTester專案是我們本文的主角:用於remoting介面測試的小工具。

(2)DemoInterface和 DemoService則是為了試試小工具而構建的一個小demo。 DemoInterface定義了釋出的remoting服務的介面, DemoService則是釋出的remoting服務。

在試用時,先啟動 DemoService專案,再啟動InterfaceTester,就可以試試我們的小工具功能了。

 

4.原始碼下載

 

  對於這個remoting介面測試小工具,大家如果有什麼好的建議,請留言告訴我:)

 

相關文章