qileilove

          blog已經轉移至github,大家請訪問 http://qaseven.github.io/

          Coded UI 自動化測試初步研究

          提到Windows的UI自動化,不得不能不說Coded UI測試。Coded UI測試是微軟在VS2010里面推出的一個新功能,概念其實也不是很新,就是通過錄制回放的功能來盡可能的簡化Windows的UI自動化。
            個人的理解,Coded UI的底層仍然是基于Windows TestAutomation SDK的Code,它的最大的作用就是把Code封裝了一層,使之能為可以調用的方法,大大簡化了測試人員對于編碼的硬需求,不懂C#或者VB的測試人員可以很容易的利用Coded UI開展自動化。
            Coded UI不僅可以測試Windows的應用程序(據說對WPF支持的特別好),它也可以對Web瀏覽器開展測試,VS2010支持微軟的IE和Firefox,我用的是VS2013,還沒有來得及用這個東西測網站,我一般都用Robotframework + Selenium2library進行測試。
            筆者最近在做一個和SCCM相關的項目,希望通過Coded UI能實施一些UI自動化的工作,嘗試了一下,感受如下
            怎么用Coded UI
            1. 先分析Windows應用程序是啥技術
            這個估計測試人員用肉眼看不出來,可以請教開發,或者用一些工具幫忙看。Coded UI據說對WPF支持的比價好,對MFC支持的一般。
            知道了這點,心里面可以有個數,對后面測試中可能的風險有個心理準備
            2. 錄制
            打開VS,建立一個Test Project,然后選Coded UI,VS2013的步驟大概就是這樣,VS2010會復雜一點, anyway,然后差不多就可以開始錄制了
            錄制的窗口很小,點擊紅色的按鈕就可以開始錄制了,錄制沒什么特別的,Coded UI會記錄你的鼠標和鍵盤的操作,并把他們變成一些可以用術語表現得事件。
            備注:錄制的時候可以加入Assertion,這是為了判斷測試結果的需要,否則錄下來的就是一步一步的UI操作,特別注意。加入Assertion需要對Windows的控件屬性有一點了解。
            3. 調整錄制結果
            錄制完了要點停止,之后點擊中間的階梯的按鈕,就會出現錄制的動作,這些動作都用很容易理解的步驟呈現在面板上。之后點擊最右邊的按鈕就可以生成代碼了。
            需要給生成的代碼取個名字,做為一個動作次序的標志
            4. 調整UI操作次序以及其他屬性
            雙擊右側Panel的UIMap.uitest,就可以打開UI操作的面板
           里面包括了以前錄制過的每一個動作次序,點開之后可以看到具體的動作,左邊是錄制的次序,右邊是控件的定位方法,定位的方法和一般的Windows Ui自動化定位元素相比,其實變化不大,從窗口開始,一層一層的找Windows的控件,直到能夠精確的定位。
            用右鍵點擊一個動作次序,可以發現也就幾個選項,注意,不能在這里把一個動作次序里面的動作移到別的動作次序里面去,除非你改后臺的代碼。(改后臺的代碼不是微軟推薦的最佳實踐)
            調整的另外一個目的是優化對控件的查找,右鍵點擊控件的樹形結構,你可以很容易的使用“Locate the UI Control"對控件進行定位,也就是看看Coded UI目前還能不能找到這個控件。
            如果找不到,大概有兩個原因
            a. 原來的Windows應用窗口已經關閉了,需要重現打開
            b. 控件的屬性發生的變化,需要再定義。
            如果真的屬于控件屬性變化,需要通過UIVerifier或者UI Spy重新查找該控件的屬性,這不屬于本文討論的范圍
            修改控件定位的方法是這樣,先選一個控件,然后點"Search Properties"之后會出現對于控件的定義,然后修改這些定義就可以了。
            5. 組合測試用例
            錄也錄了,改也改了,剩下來的工作就是把他們組合成測試用例,組合的方法就要動代碼了,這個我就不多說了,通過排列
            ”this.UIMap.次序的名字“,來把測試用例進行再組合
           6. 執行測試用例
            執行的方法有點繞人,一般用VS習慣的人會直接點Run按鈕,然后你就等著報錯吧,呵呵
            正確的方法,找到你在第5步里面的修改的那個代碼,點擊右鍵
            你可以選擇Run test或者是Debug test來執行或者是調試測試用例,當然你可以可以通過其他的辦法,這里VS2010和VS2013的方法不太一樣,就不仔細說了。
            7. 追加錄制
            任何人不可能第一次就把事情做完美,更何況是錄制測試用例,如果你發現少錄了一些步驟怎么辦?答案就是追加錄制
            追加錄制的方法如下,
            1. 找到你在第5步里面的修改的那個代碼
            2. 找到你要追加的地方,找到某一個動作的代碼那里,點鼠標右鍵
            按照上圖的方法來選,就可以打開錄制的UI,繼續錄制啦
            8. 一些注意事項
            1. 對于每個點擊事件里面鼠標坐標的理解
            如上圖,里面有一個坐標295,11,有人肯定會問,在這種情況下,如果我得屏幕分辨率改了,或者程序沒有最大化,那豈不就定位不到了?
            對這個的理解是這個坐標其實是對于一個控件里面的坐標,只要這個控件大小不變,坐標還是可以定位的。
            2. 不是每個控件都能識別
            就拿微軟的SCCM來說,Coded UI對于里面的一些控件也不能做的很好的識別,有些是自定義的控件,有些控件識別的很不穩定,這里我就不舉例子了。
            遇到這種控件怎么辦,我推薦的方法就是用能穩定識別的控件的相對坐標來定義這些不能識別的控件。
            例如,如果一個按鈕A不能穩定的被點擊,而在它附近的一個按鈕B每次都能點擊,那么我們可以先取B的坐標,然后加入B和A之間的相對距離,就可以定位到A了,提供一個自己寫的函數給大家參考
          public void offsetclick(UITestControl control, string button, int left, int top, int time)
          {
          int x = control.Left;
          int y = control.Top;
          x = x + left;
          y = y + top;
          if(button == "right")
          {
          Mouse.Click(MouseButtons.Right, ModifierKeys.None, new Point(x, y));
          }
          else
          {
          Mouse.Click(MouseButtons.Left, ModifierKeys.None, new Point(x, y));
          }
          Playback.Wait(time);
          }
            OK,就寫這么多,其實還有很多可以寫的,比如微軟推薦的調試步驟的實踐,使用數據源等等,希望本文對大家能有所幫助。

          posted on 2014-05-12 10:33 順其自然EVO 閱讀(1159) 評論(0)  編輯  收藏 所屬分類: selenium and watir webdrivers 自動化測試學習

          <2014年5月>
          27282930123
          45678910
          11121314151617
          18192021222324
          25262728293031
          1234567

          導航

          統計

          常用鏈接

          留言簿(55)

          隨筆分類

          隨筆檔案

          文章分類

          文章檔案

          搜索

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 墨江| 沂水县| 二连浩特市| 延津县| 儋州市| 寿光市| 离岛区| 长兴县| 班戈县| 侯马市| 济南市| 江津市| 合山市| 靖远县| 萨嘎县| 巫山县| 神农架林区| 重庆市| 镇坪县| 汕尾市| 鹤壁市| 黄骅市| 龙胜| 连州市| 灵丘县| 丹寨县| 安义县| 综艺| 新化县| 花莲县| 兴文县| 历史| 大安市| 大足县| 双柏县| 石楼县| 嘉兴市| 诸城市| 舒城县| 峡江县| 海林市|