qileilove

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

          Coded UI 自動(dòng)化測試初步研究

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

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

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

          導(dǎo)航

          統(tǒng)計(jì)

          常用鏈接

          留言簿(55)

          隨筆分類

          隨筆檔案

          文章分類

          文章檔案

          搜索

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 金寨县| 若羌县| 海城市| 美姑县| 隆安县| 车致| 玉溪市| 克山县| 潜江市| 滦南县| 建湖县| 云和县| 益阳市| 清新县| 汝南县| 石阡县| 应城市| 黄浦区| 武宁县| 黑河市| 定州市| 保亭| 六枝特区| 永州市| 东山县| 黄骅市| 松潘县| 拜泉县| 古蔺县| 巨鹿县| 荆州市| 循化| 清丰县| 治多县| 揭东县| 肃北| 克什克腾旗| 都安| 辽宁省| 平和县| 莒南县|