qileilove

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

          Ruby測(cè)試框架Rspec初探

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

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


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


          網(wǎng)站導(dǎo)航:
           
          <2013年12月>
          24252627282930
          1234567
          891011121314
          15161718192021
          22232425262728
          2930311234

          導(dǎo)航

          統(tǒng)計(jì)

          常用鏈接

          留言簿(55)

          隨筆分類

          隨筆檔案

          文章分類

          文章檔案

          搜索

          最新評(píng)論

          閱讀排行榜

          評(píng)論排行榜

          主站蜘蛛池模板: 义马市| 罗田县| 赫章县| 铅山县| 县级市| 弥勒县| 襄汾县| 惠州市| 安图县| 荣昌县| 江安县| 左贡县| 利津县| 五大连池市| 五台县| 武威市| 囊谦县| 天柱县| 舞钢市| 孙吴县| 旅游| 隆林| 札达县| 贵德县| 新宁县| 商南县| 义乌市| 丽江市| 农安县| 威远县| 上杭县| 剑川县| 麻阳| 北安市| 淮滨县| 崇左市| 高陵县| 青海省| 板桥市| 宣化县| 手机|