qileilove

          blog已經(jīng)轉(zhuǎn)移至github,大家請訪問 http://qaseven.github.io/

          Coded UI 自動化測試初步研究

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

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

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

          導(dǎo)航

          統(tǒng)計

          常用鏈接

          留言簿(55)

          隨筆分類

          隨筆檔案

          文章分類

          文章檔案

          搜索

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 德化县| 扶沟县| 神农架林区| 洛阳市| 仁怀市| 崇义县| 简阳市| 桐乡市| 年辖:市辖区| 张家港市| 阿克| 仪征市| 六安市| 仁化县| 灵寿县| 邵阳县| 武胜县| 江油市| 凤山县| 十堰市| 崇左市| 平潭县| 霍林郭勒市| 平阳县| 长乐市| 曲阳县| 巴青县| 莒南县| SHOW| 天全县| 庆安县| 连平县| 城步| 寻乌县| 兴业县| 大同县| 商丘市| 宝鸡市| 曲阳县| 新郑市| 江川县|