qileilove

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

          使用ruby 1.9新特性進行自動化腳本的編寫

          昨天因為要裝watir-webdriver的原因將用了快一年的ruby1.8.6升級到了1.9。由于1.9是原生支持unicode編碼,所以我們可以使用中文進行自動化腳本的編寫工作

            做了簡單的封裝后,我們可以實現如下的自動化測試代碼。請注意,這些代碼是可以正確運行并作為正式的自動化測試用例的。這樣一來,自動化測試腳本跟手工測試用例就非常相似了,大言不慚的說相似程度可以達到60%。

            這樣做有什么好處呢?

            ■ 手工測試用例更加容易“翻譯”正自動化測試用例:

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

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

            ■ 手工測試人員編寫用例的門檻相對降低:

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

            ■ 用例維護成本降低:

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

            ■ webdriver的強大特性

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

            當然,測試腳本中文化,自然化口語化也會帶來一些列的問題,這點我們也必須清楚認識到。

            1.用例編寫會相對費時一些;中英文結合編碼在輸入速度上確實不如純英文;

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

            總結一下,個人的觀點如下:

            對于產品代碼來說,中英文混編的風格目前來說應該是不合時宜的。但對于測試腳本來說,中文越多,用例可讀性越高,自動化測試代碼越接近手動用例,這反而應該是一件不錯的事情。這在里先拋磚引玉,希望有志同道合者可以一起研究,讓自動化腳本更加的人性、自然、可讀、可維護。也許在不遠的將來,手動用例可以直接拿來當自動化用例執行也未嘗不可能。

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

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

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

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


          只有注冊用戶登錄后才能發表評論。


          網站導航:
           
          <2013年9月>
          25262728293031
          1234567
          891011121314
          15161718192021
          22232425262728
          293012345

          導航

          統計

          常用鏈接

          留言簿(55)

          隨筆分類

          隨筆檔案

          文章分類

          文章檔案

          搜索

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 吴川市| 贵州省| 永川市| 炉霍县| 栖霞市| 东丰县| 惠水县| 汽车| 驻马店市| 准格尔旗| 井研县| 浑源县| 龙海市| 应城市| 临高县| 成都市| 布拖县| 剑河县| 寻乌县| 南丰县| 汝州市| 辽阳市| 平定县| 嘉禾县| 衡山县| 扬中市| 彩票| 郯城县| 山东| 渑池县| 兴海县| 莒南县| 博罗县| 哈巴河县| 永兴县| 罗定市| 铜川市| 天台县| 万山特区| 景泰县| 宁武县|