qileilove

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

          使用ruby 1.9新特性進(jìn)行自動(dòng)化腳本的編寫

          昨天因?yàn)橐bwatir-webdriver的原因?qū)⒂昧丝煲荒甑膔uby1.8.6升級(jí)到了1.9。由于1.9是原生支持unicode編碼,所以我們可以使用中文進(jìn)行自動(dòng)化腳本的編寫工作

            做了簡單的封裝后,我們可以實(shí)現(xiàn)如下的自動(dòng)化測(cè)試代碼。請(qǐng)注意,這些代碼是可以正確運(yùn)行并作為正式的自動(dòng)化測(cè)試用例的。這樣一來,自動(dòng)化測(cè)試腳本跟手工測(cè)試用例就非常相似了,大言不慚的說相似程度可以達(dá)到60%。

            這樣做有什么好處呢?

            ■ 手工測(cè)試用例更加容易“翻譯”正自動(dòng)化測(cè)試用例:

          測(cè)試瀏覽器 = Watir::Browser.new :firefox
          測(cè)試瀏覽器.轉(zhuǎn)到 'www.google.com'
          在(測(cè)試瀏覽器.的.text_field(:name, "q")).中.輸入 "qq"
          點(diǎn)擊 測(cè)試瀏覽器.的.button(:name, "btnG")
          等待(測(cè)試瀏覽器.的.div(:id, "resultStats"))
          斷言 '測(cè)試通過' if 測(cè)試瀏覽器.的.text.包含('騰訊QQ')
          關(guān)閉 測(cè)試瀏覽器

            由于加入了符合自然語義的”的”及“在”函數(shù),整個(gè)測(cè)試用例的自然度得到大大提升,基本可以做到不熟悉自動(dòng)化代碼的人員可以大致猜測(cè)到用例的真實(shí)用例。讓用例自己說話,這比反復(fù)釋疑和解惑要好上一些;

            ■ 手工測(cè)試人員編寫用例的門檻相對(duì)降低:

            由于代碼的靈活度及兼容性相對(duì)較大(ruby語言的特性)及測(cè)試api相對(duì)簡單(watir的特性),手工測(cè)試人員應(yīng)該可以更加方便的理解和編寫代碼,這樣用例編寫的門檻降低;

            ■ 用例維護(hù)成本降低:

            中文化的用例代碼可以很容易的進(jìn)行review。大家應(yīng)該有這樣的經(jīng)驗(yàn),在有些代碼中會(huì)出現(xiàn)一些隨意的ab, zb之類難以理解的變量或方法名。糾其原因無非是不好的編程習(xí)慣或詞窮的英文積淀。用上中文之后這些情況會(huì)有很大好轉(zhuǎn)。代碼本地化這項(xiàng)工作日本這些年一直在做,而且成果豐碩。我們完全可以通過ruby借鑒這一點(diǎn);

            ■ webdriver的強(qiáng)大特性

            上面的測(cè)試代碼是基于watir-webdriver編寫的。由于webdriver支持多種瀏覽器,如ff,chrome,safiri,ie等,代碼的擴(kuò)展性非常強(qiáng)。在配置合理及框架支撐的前提下,基本可以做到一套腳本多瀏覽器運(yùn)行,這對(duì)回歸測(cè)試來說應(yīng)該是一個(gè)利好消息;

            當(dāng)然,測(cè)試腳本中文化,自然化口語化也會(huì)帶來一些列的問題,這點(diǎn)我們也必須清楚認(rèn)識(shí)到。

            1.用例編寫會(huì)相對(duì)費(fèi)時(shí)一些;中英文結(jié)合編碼在輸入速度上確實(shí)不如純英文;

            2.對(duì)程序員來說上面的代碼會(huì)有些怪異或者是令人難以忍受的;對(duì)于完美主義者來說,上面的代碼是“不純粹”且有些難看的;

            總結(jié)一下,個(gè)人的觀點(diǎn)如下:

            對(duì)于產(chǎn)品代碼來說,中英文混編的風(fēng)格目前來說應(yīng)該是不合時(shí)宜的。但對(duì)于測(cè)試腳本來說,中文越多,用例可讀性越高,自動(dòng)化測(cè)試代碼越接近手動(dòng)用例,這反而應(yīng)該是一件不錯(cuò)的事情。這在里先拋磚引玉,希望有志同道合者可以一起研究,讓自動(dòng)化腳本更加的人性、自然、可讀、可維護(hù)。也許在不遠(yuǎn)的將來,手動(dòng)用例可以直接拿來當(dāng)自動(dòng)化用例執(zhí)行也未嘗不可能。

            下面是用例的完整代碼,由于只是演示興致,因此只是隨意在Module層進(jìn)行了簡單的可視化封裝,過于簡陋和demo,還望磚家手下留情。

          # encoding: utf-8
          require 'rubygems'
          require 'watir-webdriver'
          module CWrap
              def 點(diǎn)擊(obj)
                  obj.click rescue obj.class.to_s + '對(duì)象無法進(jìn)行點(diǎn)擊'
              end
              def 加載完畢()
                  self
              end
              alias :中 :加載完畢
              alias :的 :中
              alias :應(yīng)該 :的
              def 在(obj)
                  obj
              end
              def 等待(obj)
                  obj.wait_until_present rescue puts('該' + obj.class.to_s + '對(duì)象無法進(jìn)行等待操作')
              end
              def 關(guān)閉(obj)
                  obj.close rescue puts('無法關(guān)閉這個(gè)' + obj.class.to_s + '對(duì)象')
              end
              def 輸入(text)
                  self.set text rescue puts('這個(gè)' + self.class.to_s + '對(duì)象無法進(jìn)行輸入')
              end
              def 轉(zhuǎn)到(url)
                  self.goto url rescue puts(self.class.to_s + '對(duì)象不是一個(gè)瀏覽器對(duì)象')
              end
              def 包含(text)
                  self.include? text rescue puts self.class.to_s + '對(duì)象無法進(jìn)行包含操作'
              end
              def 斷言(text)
                  puts text
              end
          end
          include CWrap

          測(cè)試瀏覽器 = Watir::Browser.new :firefox
          測(cè)試瀏覽器.轉(zhuǎn)到 'www.google.com'
          在(測(cè)試瀏覽器.的.text_field(:name, "q")).中.輸入 "qq"
          點(diǎn)擊 測(cè)試瀏覽器.的.button(:name, "btnG")
          等待(測(cè)試瀏覽器.的.div(:id, "resultStats"))
          斷言 '測(cè)試通過' if 測(cè)試瀏覽器.的.text.包含('騰訊QQ')
          關(guān)閉 測(cè)試瀏覽器

          posted on 2013-09-18 11:23 順其自然EVO 閱讀(383) 評(píng)論(0)  編輯  收藏 所屬分類: ruby languages


          只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。


          網(wǎng)站導(dǎo)航:
           
          <2013年9月>
          25262728293031
          1234567
          891011121314
          15161718192021
          22232425262728
          293012345

          導(dǎo)航

          統(tǒng)計(jì)

          常用鏈接

          留言簿(55)

          隨筆分類

          隨筆檔案

          文章分類

          文章檔案

          搜索

          最新評(píng)論

          閱讀排行榜

          評(píng)論排行榜

          主站蜘蛛池模板: 准格尔旗| 东乌珠穆沁旗| 若尔盖县| 康保县| 英吉沙县| 广南县| 定州市| 渝北区| 鄂伦春自治旗| 彭州市| 青龙| 洪泽县| 吉安县| 诸暨市| 临海市| 嵊泗县| 南阳市| 天峨县| 东安县| 阜宁县| 府谷县| 太白县| 商河县| 固安县| 龙胜| 唐河县| 西安市| 云霄县| 乃东县| 平定县| 夹江县| 巴林左旗| 河源市| 松江区| 桂阳县| 犍为县| 甘泉县| 泾阳县| 浪卡子县| 镇巴县| 渭源县|