測試工程師應(yīng)知應(yīng)會之行為驅(qū)動測試BDD
很多工程師都了解測試驅(qū)動開發(fā)(Test Driven Development,TDD),但是了解行為驅(qū)動開發(fā)的人卻不是很多。
行為驅(qū)動開發(fā)(Behavior Driven Development,BDD),是測試驅(qū)動開發(fā)的延伸,旨在使用簡單的,特定于領(lǐng)域的腳本語言(軟件外包行業(yè)的最大問題?從領(lǐng)域驅(qū)動設(shè)計說起),通過結(jié)構(gòu)化的方法,將自然語言文本轉(zhuǎn)換為可執(zhí)行的測試用例。從而在技術(shù)與實際的業(yè)務(wù)需求者之間,建立起一條易于理解的道路。這樣,不理解程序員們正在做什么的業(yè)務(wù)方,就可以更容易的理解他們的工作。
在行為驅(qū)動開發(fā)中,最關(guān)注的核心是業(yè)務(wù)的設(shè)計。而測試驅(qū)動開發(fā),則更關(guān)心是的使用代碼來描述測試用例。因此,在行為驅(qū)動開發(fā)相關(guān)的框架中,采用了多種技術(shù)手段,構(gòu)造自然語言與代碼之間的連接關(guān)系,使得關(guān)注于業(yè)務(wù)邏輯的使用者,能夠使用更容易理解的語言,向測試代碼下達他們的指令。
下面我們通過當(dāng)前最為流行的BDD 框架JBehave來介紹一下BDD對于這種設(shè)計的實現(xiàn)。
在JBehave中,完全一個測試用例需要5個步驟。
一、編寫測試用例
在JBehave中,一個測試用例由一系列場景(Scenario)組成。而一個場景的編寫,需要符合JBehave定義的語法格式。主要格式內(nèi)容如下:
在語法格式中,規(guī)定了一個測試用例的寫法,以及其中特定的關(guān)鍵字,而這種寫法力圖貼近于自然語言,并且能夠被框架所解析。
二、將測試用例映射到Java
編寫好測試用例之后,JBehave會將測試用例映射成Java。這種映射主要通過RegexStoryParser(正則表達式)或者是GherkinStoryParser這兩種解析器來實現(xiàn)。
通過類似于
@Given("a stock of symbol $symbol and a threshold of $threshold")
public void stock(String symbol, double threshold) {
stock = new Stock(symbol, threshold);
}
的方式,可以將測試用例中的輸入映射進Java函數(shù)的輸入?yún)?shù)中,盡管保持入?yún)⒌拿趾虭Given語句中的參數(shù)名字一致是一種好的習(xí)慣,但是JBehave是按照參數(shù)的順序來賦值的,并不要求名稱完全一致。
三、配置測試用例
JBehave的核心是配置的嵌入類,這是提供給IDE的可執(zhí)行入口,通過執(zhí)行該嵌入類,系統(tǒng)可以調(diào)用框架的相關(guān)方法,從而能夠完成JBehave提供的相關(guān)功能。
JBehave提供的可嵌入類主要有ConfigurableEmbedder和InjectableEmbedder兩種。
四、運行測試用例
配置好嵌入類之后,就可以通過JUnit在IDE或者是命令行中運行測試用例了。
五、查看報告
測試用例執(zhí)行完畢之后會給出測試報告,JBehave提供了多種測試報告可供使用,包括控制臺、文本文件、XML文件、HTML頁面等。