qileilove

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

          Ruby測試框架Rspec初探

            Rspec 是Ruby社區的主流測試框架,今天簡單玩了一下,覺得有幾個特性是十分值得借鑒的
            樹狀的用例組織結構
            我們知道很多測試用例工具,例如: testlink ,其測試用例組織是樹狀的,但是,我之前接觸到的測試框架,例如: TestNg ,它是無法支持這種用例組織結構的
            Rspec卻可以!
            簡單的講,Rspec可以僅由 describe與it 兩種語句塊構成
            首先聲明,Rspec是基于 BDD 測試思想的,并沒有傳統意義上的 測試用例(testcase) 的概念
            describe可以層層嵌套describe及it,從而構成樹狀結構
            it語句塊是這棵樹的葉子節點,功能上接近于測試用例這個概念,用例斷言(Assertion)一般就在這里面
            還是看示例吧
            先看代碼,描述的是一盞飛利浦臺燈在出廠之路上所經歷的種種測試
          # encoding: utf-8
          describe 'PHILIPS臺燈 - 出廠質檢' do
          # Rspec是一門測試DSL 但其中可以夾雜原生Ruby代碼 比如這個echo()函數
          def echo(input)
          puts input
          end
          # Rspec與TestNG/JUnit一樣 也有類似before/after的hook
          # 其作用范圍為其所在的describe
          # before在it語句塊之前執行
          before(:each) do
          echo '--- 開始本次測試 ---'
          end
          # after在it語句塊之后執行
          after(:each) do
          echo "--- 結束本次測試 ---\n\n"
          end
          it "冒煙測試(插電源 - 開開關 - 燈亮了)" do
          echo '插電源 - 開開關 - 燈亮了'
          end
          # describe可以與it語句塊并列 例如 "冒煙測試" 與 "正向測試"
          # describe可以層層嵌套 從測試用例組織的角度講 就是構成了一個樹狀結構
          describe '正向測試' do
          describe '發光性' do
          # it語句塊接近于傳統意義上的testcase
          it '亮度可以調節' do
          echo 'min-1-2-3-4-5-max'
          end
          it '最大亮度不得超過10000' do
          echo 'no more than 1w'
          end
          it "只能發射白色光" do
          echo 'white light'
          end
          end
          describe '節能性' do
          it "符合國家節能標準" do
          echo '符合國標'
          end
          it "每小時耗電不多于0.000001度" do
          echo '0.000001kwh'
          end
          end
          end   describe '異常測試' do
          # 這里的before hook就只能作用在'異常測試'describe之內了
          before(:each) do
          echo '--- 準備一盞全新臺燈 ---'
          end
          describe '破壞性測試' do
          it '榔頭砸不壞' do
          echo '榔頭砸不壞'
          end
          it '泡水里不短路' do
          echo '泡水里不短路'
          end
          end
          describe '耐久性測試' do
          it '連續使用七天七夜不滅' do
          echo '連續使用七天七夜不滅'
          end
          it '風吹雨打也不能阻止我發光' do
          # 對于未完成的用例 可以先把描述寫下來 具體的用例里面使用pending關鍵字占位
          pending '這個用例待完成'
          end
          end
          end
          end
            再看一下運行結果報表,兩相對照,用例的樹狀結構一目了然
            用例命名簡單化,且有實際含義
            之前寫用例,用例命名是一個十分關鍵但也很頭疼的工作,大家懂得
            而Rspec本質上是一門 DSL (Domain Specific Language),實際上,從上面的示例代碼和運行結果截屏中大家已經可以看到,在Rspec中是無須給測試用例命名的,或者說,用例的命名可以非常書面化,一般就是用例意圖的簡單描述(即:describe及it關鍵字后面跟著的描述性語句)
            支持未完成的用例先占位
            不解釋,還是看圖
            對于未完成的用例,可以先把描述寫下來,具體的用例步驟里面使用pending關鍵字占位
            it '風吹雨打也不能阻止我發光' do
            # 對于未完成的用例 可以先把描述寫下來 具體的用例里面使用pending關鍵字占位
            pending '這個用例待完成'
            end
            反映在用例報表中,這個用例就被標志為黃色了 樹狀的用例組織結構/用例命名簡單化/支持未完成的用例先占位,這三個特性使得使用Rspec編寫測試用例時,思路可以非常自由,開闊,很像是在寫 markdown ,來不及的地方,也可以先使用 pending 占位
            寫完以后,跑一遍用例,生成的html報表可讀性很強,可以直接用于策劃,開發,測試之間的溝通(必殺技,有木有!)
            其它不錯的特性
            Rspec是一門DSL,但它仍舊支持在用例中參雜原生Ruby代碼,如下所示
            Rspec與TestNG/JUnit一樣,也有類似before/after的hook(如下所示),其作用范圍是當前的describe
            由于describe允許層層嵌套,因此,Rspec中的before/after的作用域也是層層嵌套的,比之TestNG的Before/After,靈活性大大超過
            describe 'PHILIPS臺燈 - 出廠質檢' do
          # Rspec是一門測試DSL 但其中可以夾雜原生Ruby代碼 比如這個echo()函數
          def echo(input)
          puts input
          end
          # Rspec與TestNG/JUnit一樣 也有類似before/after的hook
          # 其作用范圍為其所在的describe
          # before在it語句塊之前執行
          before(:each) do
          echo '--- 開始本次測試 ---'
          end
          # after在it語句塊之后執行
          after(:each) do
          echo "--- 結束本次測試 ---\n\n"
          end

          posted on 2013-12-17 09:10 順其自然EVO 閱讀(604) 評論(0)  編輯  收藏


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


          網站導航:
           
          <2013年12月>
          24252627282930
          1234567
          891011121314
          15161718192021
          22232425262728
          2930311234

          導航

          統計

          常用鏈接

          留言簿(55)

          隨筆分類

          隨筆檔案

          文章分類

          文章檔案

          搜索

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 上犹县| 醴陵市| 珠海市| 孟州市| 晋江市| 隆尧县| 保亭| 万安县| 东乡| 铜陵市| 永安市| 潢川县| 偃师市| 金堂县| 泽库县| 华蓥市| 肥乡县| 改则县| 太康县| 玉环县| 天镇县| 名山县| 泰来县| 阜城县| 卓尼县| 英德市| 肃宁县| 都江堰市| 临泉县| 马公市| 涟源市| 莒南县| 屏东市| 永泰县| 曲阜市| 龙里县| 绿春县| 左贡县| 三都| 山丹县| 邵东县|