Silverlight測試——利用Ranorex實現數據驅動測試

最近這段時間一直很忙, 上次關於Jacklin提出WindowsPhone 7訪問本地DataBase在XAP包沒法操做問題. 我正在WP7上測試利用開源數據庫DB4O和SiaqoDB方式來解決這個問題.關於這篇驗證文章晚些時候會把驗證的相關原理,代碼以及驗證中發現的問題整理出一篇文章 發出來.html

本篇來講說關於Silverlight測試——利用Ranorex工具實現TestDataDriver[TDD-數據驅動測試俗稱黑盒測試].程序員

Silverlight 在從1.1版本過渡出來後到Silverlight 2 能夠在不少方面作了極大的改善. 特別是整個Silverlight框架搭建已經日趨完整面向多種變化需求. 相對之前SL版本微軟第一次加入了單元測試框架.[Silverlight Unit TestFrameWork]. 直到今天再次歷經 2個版本[Silverlighti 3/4]的更新和維護, 針對Silverlight Application Unit Test.在第四個版本已經可以輕鬆作到Unit Test.web

談到測試 對於開發人員. 應該瞭解和咱們平常編程息息相關的測試: Unit Test[單元測試] 和 DataDriver Test[TDD] TDD是敏捷的實現方式XP[極限編程]的重要組成部分, 目前Visual Studio中對Unit Test支持.下圖顯示了Visual Studio 2010中提供的幫助測試客戶的各類解決方案:數據庫

在Mix10大會中微軟發佈了Silverlight 4版本. 可是關注測試這塊依然是一個讓廣大DVp開發者頭大的問題. 微軟4月份更新的工具包Arp版本就已經包含了Unit Test測試框架.運行在VS2010中,可是目前這個Test unit FrameWork框框架不能VisualStudio功能相集成.Team Foundation Server的2010與Silverlight單元測試整合也存在相關問題.  由於在測試這塊發現足多不少不實際問題. 微軟也是感到有些氣短 在一次發言專門提到": 以下原文:express

The recommended way for developers to run tests of their Silverlight applications is by building and running the test application. Visual Studio has a separate set of integrated test tools that are not connected to the Silverlight Unit Test Framework, which is the same for all previous releases of the Silverlight testing work.編程

 

 

<2.1>瞭解TDD測試app

TDD縮寫是Test Driver Development 是XP編程中一個很是重要組成部分.框架

嚴格意義來講真正和程序員編碼有限測試應該UnitTEst 單元測試. 程序員有責任編寫功能代碼,同時也就有責任爲本身的代碼編寫單元測試.  最終交互時 咱們不只要交互功能代碼 還要交付這些相關功能代碼的Unit Test.asp.net

Unit TEst面對的對象是程序員. 這樣一來程序員就知道測試對象某一個實現Function函數中功能結構特色. 來進行編寫用例. 就是所謂的白盒測試.白盒測試針對程序的邏輯結構設計測試用例,用邏輯覆蓋率來衡量測試的完整性分佈式

而TDD的特色針對的對象是和代碼業務沒法的測試人員. 當咱們把一個Silverlight Application交給測試MM時 她對軟件中涉及的功能結構是未知的, 這時測試案例好壞我以爲不只用的合適測試方法 並且和我的的經驗又有極大關係. 在程序接口錄入信息.根據定義測試規格輸出相關信息. 而其中程序操做規則是已經制定好的. 其實這就是黑盒測試.黑盒測試着眼於程序外部結構,不考慮內部邏輯結構,主要針對軟件界面和軟件功能進行測試。

<2.2>關於Ranorex工具

本篇中對Silverlight測試工具選擇採用的是Ranorex,目前對於有些老牌的測試工具只支持GUI元素的.而對於Web頁面承載的Silverlight 的UI元素不識別. 而Ranoex則支持WinFrom/Flash/Flex/WPF/IE FF Web2.0/Silverlight。另一個特色時Ranorex小巧 測試腳本徹底支持C# VB.NET、Python多種語言.對。NEtFramework 版本支持已經到 4.0. 這爲咱們程序員編寫Automatic Test Scirpt提供很大的方便.關於本工具信息:

Ranorex Web Site:-[官方站點]

Ranorex UserGuid Sample[用戶指導案例 很詳細關於測試各個方面 建議參考]

Rannorex Download Link [下載鏈接-Version:2.3.4-30天試用版]

Ranorex Genyen Key Tool[30天試用版破解工具下載]

固然在找到Ranorex工具前 我還有幸試用一個測試霸王版的TestComplete,確實一個測試工具霸王版本:

看到這個TestComplete簡介我就想起打包工具中installshield霸王大哥通常. 面對兩個篇幅的配置信息 我基本就已經 提早到下.來看一下TestComplete霸王特色:

TestComplete是一個自動測試管理工具,徹底支持項目層級(project level)的單元測試、功能測試、迴歸測試(regression testing)、分佈式測試以及HTTP性能測試。它是專門爲應用程序開發人員和測試人員設計的。從開發代碼、發佈到維護的整個過程 .

對於Silverlight測試已經覆蓋了目前的全部版本 以及。NetFrameWork支持也覆蓋全部版本.

天啊.TestComplete是一個霸王測試工具不是沒有道理 不費上一天兩天的功夫去了解短期內你是玩轉不起來的. 因此我由於這個特色就拋棄了霸王的TestComplete 轉而投向Ranorex小巧溫柔的懷抱/

更多關於TEStComplate Web Site[官方站點]

<3.1>新建一個C# Automation Solution

對工具Ranorex安裝完成後 你能夠採用破解工具進行破解. 完成後啓動Ranorex.進入主界面:

這塊工具基本和VisualStudio基本相似.對於.NEt程序員來講運用並不難. 在左上角點擊「File」——>」NEW」——>」Soluction」:從打開頁面能夠看出Ranorex工具支持C# VB.NET、Python三種語言編寫腳本同時還支持WorkFlow工做流. 選擇C#節點 並選中 C# For Automatic項目:

建立一個Ranorex C# Test Automatic項目命名爲:SLAutomaticDemo:窗體分佈

建立一個C# Automatic項目後 看一下項目結構:

Program.CS文件是C#語言編寫的測試腳本文件.也是整個項目的入口處Main方法所在類. 另一個很重要的文件Recording1文件則記錄錄製SL界面操做元素事件並自動轉換成可操做的C#代碼. 從Program.CS文件Main方法能夠看出. 主程序就是調用Recording1文件中的Recording1類Start方法來實現腳本的自動化執行的.Program.cs 代碼:

  
  
  
  
  1. public static int Main(string[] args)   
  2. {   
  3. Keyboard.AbortKey = System.Windows.Forms.Keys.Pause;   
  4. int error = 0;   
  5. string logFileName = "Test.rxlog";   
  6. Report.Setup(ReportLevel.Info, logFileName, true);   
  7. try   
  8. {   
  9. //調用Recording1文件中REcording類Start()執行對腳本的調用.很簡單.   
  10. Recording1.Start();   
  11. }   
  12. catch (ImageNotFoundException e)   
  13. {   
  14. Report.Error(e.ToString());   
  15. Report.LogData(ReportLevel.Error, "Image not found", e.Feature);   
  16. Report.LogData(ReportLevel.Error, "Searched p_w_picpath", e.Image);   
  17. error = -1;   
  18. }   

固然在錄製咱們須要一個測試的Silverlight Application. 爲了達到演示目的該Silverlight應用程序界面實現可是一個加法操做: 界面以下:

新建一個Silverlight Application便可. 輸入第一個數和第二個數 點擊計算按鈕就把兩者計算結果顯示在最後一個文本框. 這是頁面操做一個過程.分解成Reaorex錄製步驟分爲 TextBox1得到焦點——>輸入第一個數——>第二個文本框得到焦點——>輸入數字 ——>點擊計算按鈕 ——>顯示數據 既然搞清咱們要錄製固定Silverlight 界面UI操做具體步驟 ,下一步就是利用Ranorex工具進行錄製這個動做整個過程點擊ReCord按鈕 Ranoex工具就會最小化 右下角就出現一個記錄窗體:

在這有人要困惑的問.爲什麼要錄製這個頁面計算過程?

作過黑盒測試驅動編程朋友應該都熟悉. 當咱們把已經完成功能代碼的程序交給測試MM時 她是不知道內部的代碼結構. 如何能測試出界面和功能性上Bug. 測試MM負責不斷錄入變化數據 而根據測試案例中編寫的測試規格來查看輸出結果 來斷定程序是否存在Bug.

你明白了吧. 既然測試過程數據時不斷變化的 咱們如今要作的就是利用Ranorex工具錄製測試案例不變測試規則.

當咱們打開錄製時就能夠在已經運行成功頁面進行上面拆分步驟進行操做.: 錄製完成後便可點擊Stop終止錄製過程,. 

當把Silverlight頁面三步計算操做錄製完成 咱們看一下Ranorex工具對頁面事件操做的記錄:

錄製Silverlight 頁面UI元素流程:

查看計錄Silverlight UI元素的窗體記錄:

根節點是承載頁面WebFrom對應承載的Silverlight comtrol UI元素 分別涉及到四個 三個TExtBox和一個Button按鈕.和咱們操做步驟記錄徹底吻合.

錄製好Silverlight頁面UI元素的操做規則後 咱們工做基本完成一半.

<3.2>編輯錄制行爲

當完成UI元素操做規則錄製後. 下一步只須要利用Ranorex工具編輯錄制中行爲變成動態在C#語言中可運用的代碼屬性 供咱們操做.

能夠對Silverlight事件窗體作簡單的操做就可把咱們記錄轉換成編碼中可操做的DataDriver: 選中咱們在TextBox1/2頁面輸入操做keySequence :

選中Key Sequence右鍵點擊——>Convert to User Code Item 後查看Recording1文件一下源代碼:

源碼中添加兩個屬性:

  
  
  
  
  1. // Create a new property 'FirstNum'    
  2. public static string FirstNum    
  3. {   
  4. get;set;    
  5. }    
  6.  
  7. // Create a new property 'LastNum'    
  8. public static string SecondNum    
  9. {    
  10. get;set;    

你應該明白這個屬性封裝可是咱們在錄製規則中對TextBox1和TextBox2的值. 當咱們把一個key Sequences利用Ranorex工具Convert user Code 在右邊屬性窗體設置屬性生成方法:

同理設置SecondNum屬性的方法 發現源碼中生成代碼:

  
  
  
  
  1. public static void SetFirstnum()   
  2. {   
  3.  //Your code here. Code inside this method will not be changed by the code generator.   
  4.  Report.Info("Key sequence '34'.");   
  5.  Keyboard.Press("34");   
  6.   }   
  7.    
  8.  public static void SetSecondnum()   
  9.  {   
  10.   //Your code here. Code inside this method will not be changed by the code generator.   
  11.  Report.Info("Key sequence '56'.");   
  12.   Keyboard.Press("56");   
  13.   } 

修改如上代碼吧 對應key值替換成自動生成屬性:

  
  
  
  
  1. public static void SetFirstnum()   
  2.  {   
  3.  //Your code here. Code inside this method will not be changed by the code generator.   
  4.  Keyboard.Press(Firstnum);   
  5.  }    
  6.  public static void SetSecondnum()   
  7.   {   
  8.  //Your code here. Code inside this method will not be changed by the code generator.   
  9.  Keyboard.Press(Secondnum);   
  10.   } 

ok.到這那麼錄像關於加法運算中運算的參數1和參數1 均可以經過屬性封裝在C#編碼中進行控制 測試中涉及到屢次循環測試 以不一樣數據錄入測試Bug 回頭看看Program.cs文件Main方法:

  
  
  
  
  1. ...  
  2. try  
  3. {  
  4. //動態設置兩個輸入計算的參數  
  5. Record1.FirstName = row["FirstNum"].ToString();  
  6. Record1.LastName = row["LastNum"].ToString();  
  7. //循環調用Start方法  
  8. Record1.Start();  
  9. }  
  10. catch (RanorexException e)  
  11. ...  

如上當咱們作好循環調用可執行測試程序.剩下就是須要根據測試案例製做測試數據錄入進行測試. ok。這裏利用SqlServer2005數據庫來製做一個數據測試表 存儲測試數據 創建測試表:

  
  
  
  
  1. USE master   
  2. go   
  3.  
  4. CREATE TABLE TestCodeDate   
  5. (   
  6. id INT NOT NULL PRIMARY KEY IDENTITY(1,1),   
  7. Firstnum VARCHAR(50) NOT NULL,--參數1   
  8. Secondnum VARCHAR(50) NOT NULL,--參數2   
  9. Resultnum VARCHAR(50) NOT NULL,--計算結果   
  10. TestDate DATETIME NOT NULL DEFAULT(GETDATE())--測試時間   
  11. )   
  12. go 

下一步就是在測試程序得到與本地Sql2005數據庫數據並循環自動化測試. 剩下工做就很簡單了 只需在Program.cs文件中獲取數據 並循環錄入    循環調用自動化測試程序自動執行 :

  
  
  
  
  1. ...............................   
  2. try   
  3. {   
  4. //TODO: Code here - for example:   
  5. //獲取數據方式 循環執行測試 [獲取數據方法]   
  6. System.Collections.Generic.List<DataDriverEntity.DataDriverModel> getdatalist=Program.GetTestDataList();   
  7. if(getdatalist.Count>0)   
  8. {   
  9. foreach(DataDriverEntity.DataDriverModel getmodel in getdatalist)   
  10. {   
  11. //設置DAtaDriver 屬性    
  12. Recording1.Firstnum=getmodel.Firstnum.ToString();   
  13. Recording1.Secondnum=getmodel.Secondnum.ToString();   
  14. //重複調用 [測試]   
  15. Recording1.Start();   
  16. }   
  17. }   
  18. }   
  19. catch (ImageNotFoundException e)    
  20. ................. 

源碼中DataDriverEntity.DataDriverModel是我新建一個實體類用來封裝測試數據 定義以下:

  
  
  
  
  1. /// <summary  
  2. /// 數據測試實體  
  3. /// </summary>  
  4. public class DataDriverModel  
  5. {  
  6. public int Id { get; set; }  
  7. public int Firstnum { get; set; }  
  8. public int Secondnum { get; set; }  
  9. public int Sumnum { get; set; }  
  10. public DateTime CreateDate { get; set; }  

由此一個簡單對Silverlight頁面實現DataDriver Test的程序基本完成了.

<3.2>編譯執行

當作了整個測試流程. 能夠操做菜單中進行編譯: Build Soluction 查看輸出:

編譯成功後. 咱們能夠直接在Ranorex工具點擊運行:

編譯成後也能夠Ranorex爲了保證整個流程重複執行. Ranorex工具把整個流程封裝EXE可執行文件. 很方便咱們調用執行. 很方便吧.

就此利用Ranorex工具完成實現 Silverlight Application Data Driver Test.

由於Ranorex工具退出相對較晚 因此目前基本上沒有相關的中文資料和文檔能夠參考. 這對一些.Net程序員更熟悉的是Visual Studio編碼工具操做. Ranorex也考慮到這點特別這這個2.3.4版本中對Visual Sutdio加以集成.雖然只是簡單集成 但這對咱們更熟悉Visal Studio.而言能夠說一個很大進步.

若是不喜歡Ranoex工具編譯環境 你能夠換成你熟悉的Visual Studio中照樣能夠作 Silverlight Test Driver工做.

首先在Silverlight Solution中創建一個獨立Test Applcation 項目類型是一個輸出Comsole Application:

項目創建成功後在新建的Comsole Application中添加對Ranorex工具DLL引用:

 從引用窗體中能看到Ranoex.Core.DLL:

進入Main方法 添加對Ranoex.Core.DLL的引用:

  
  
  
  
  1. //添加引用   
  2. using System.Drawing;   
  3. using Ranorex; 

修改Main方法用來返回執行狀態:

  
  
  
  
  1. [STAThread]    
  2. static int Main(string[] args)  

Main方法中調用系統附件的中計算器來進行計算. 下面是從Ranorex 複製過來的腳本代碼:L

  
  
  
  
  1. int error = 0;   
  2.  
  3.  try    
  4. {    
  5. //調用附件計算器   
  6. System.Diagnostics.Process.Start("calc.exe");    
  7. Form form = Host.Local.FindChild<Ranorex.Form>("Calculator");    
  8. form.Activate();    
  9. Button button = form.FindChild<Ranorex.Button>("2");    
  10. button.Click();    
  11.  
  12. button = form.FindChild<Ranorex.Button>("*");    
  13. button.Click();    
  14. button = form.FindChild<Ranorex.Button>("3");    
  15. button.Click();    
  16.  
  17. button = form.FindChild<Ranorex.Button>("=");    
  18. button.Click();    
  19. }    
  20. catch (RanorexException e)    
  21. {    
  22. Console.WriteLine(e.ToString());    
  23. error = -1;    
  24. }    
  25.  
  26. return error; 

you see!就這末簡單 只需經過Ranoex工具進行錄製把錄製後自動生成的測試腳本Copy到Visual Studio中. 便可方便調用運行.

參考資料:

Silverlight Unit Test Framework

Silverlight and Unit Test

UI Automation in Silverlight - Part II (The Easy Way)

Testing Silverlight Applications

Silverlight Unit Test Review

Plug-in to Silverlight UI Automation

Ranorex Use Guide Support Center

源碼和測試視頻見附件。

相關文章
相關標籤/搜索