Ruby測(cè)試框架Rspec初探
樹狀的用例組織結(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
再看一下運(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
|
posted on 2013-12-17 09:10 順其自然EVO 閱讀(604) 評(píng)論(0) 編輯 收藏