Ruby測試框架Rspec初探
樹狀的用例組織結構
我們知道很多測試用例工具,例如: 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
再看一下運行結果報表,兩相對照,用例的樹狀結構一目了然 用例命名簡單化,且有實際含義 之前寫用例,用例命名是一個十分關鍵但也很頭疼的工作,大家懂得 而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
|