測試驅(qū)動,每一個做自動化的人都應該了解的內(nèi)容。
- 數(shù)據(jù)驅(qū)動
在談數(shù)據(jù)驅(qū)動之前,先聊一聊錄制回訪。一直以來,錄制回訪都不那么被認可,原因不外乎以下幾個:1.應用程序必須達到一定的穩(wěn)定性,才能開始錄制測試腳本;2.錄制的測試腳本和測試數(shù)據(jù)耦合得太緊密;3.維護自動化測試腳本的成本非常高。
數(shù)據(jù)驅(qū)動的核心思想就是測試數(shù)據(jù)和測試代碼分離。
public void login(String[][] accounts){
for(int i = 0; i<accounts.length; i++){
//do login
}
}
public void test(){
String[][] accounts = {{"test1", "password"}, {"test2", "password"}};
login(accounts);
}
public void login(String userName, String password) {
//login
}
public void test(String[] account) {
login(account[0], account[1]);
}
public void executor(){
String[][] accounts = {{"test1", "password"}, {"test2", "password"}};
for (String[] account : accounts) {
test(account);
}
}
對比上述兩段代碼,后者比前者更像數(shù)據(jù)驅(qū)動。數(shù)據(jù)驅(qū)動,是以數(shù)據(jù)來控制測試的業(yè)務流,測試數(shù)據(jù)不同所得到的測試結(jié)果也是不同的。在自動化測試框架中,數(shù)據(jù)驅(qū)動的意思是測試用例或測試套件是由外部數(shù)據(jù)集合來驅(qū)動的框架。比如上例中,我們可以把login()看作是測試實現(xiàn),test()充作測試用例,而executor()則是用不同的測試數(shù)據(jù)來驅(qū)動不同的測試場景(假設test1、test2的登陸結(jié)果不同)。
優(yōu)點:1.在應用程序開發(fā)的同時就可以同步建立測試腳本,當應用變動時,只需要修改業(yè)務功能部分的腳本;2.利用模型化的設計,避免重復的腳本,減少建立和維護腳本的陳本;3.測試輸入數(shù)據(jù)、驗證數(shù)據(jù)、預期的測試結(jié)果與腳本分開,利于修改和維護;4.自動化測試開發(fā)人員創(chuàng)建數(shù)據(jù)驅(qū)動的測試過程,測試人員可以創(chuàng)建測試數(shù)據(jù)。
缺點:1.每個腳本對應多個數(shù)據(jù)文件,這些數(shù)據(jù)文件需要根據(jù)腳本的功能類別存放在各自的目錄中,增加了使用的復雜性;2.測試人員除了需要根據(jù)具體測試數(shù)據(jù)維護相應的測試計劃,還要將這些數(shù)據(jù)寫入各個需求不同的數(shù)據(jù)文件中;3.在編輯數(shù)據(jù)文件時,必須注意測試腳本所要求的傳輸格式。
在假設測試人員不懂開發(fā)代碼的年代,數(shù)據(jù)驅(qū)動將自動化人員和測試人員的工作分開,自動化人員只負責測試的實現(xiàn),而測試數(shù)據(jù)的設計準備工作是由測試人員完成的。在現(xiàn)在自動化測試中,自動化人員和測試人員不再進行區(qū)分,但是數(shù)據(jù)驅(qū)動的思想一直都在使用。
- 關鍵字驅(qū)動
關鍵字驅(qū)動,就是把代碼映射成關鍵字。
在對登陸功能進行測試的時候,你需要做如下幾件事情:
1) 準備相關數(shù)據(jù)
2) 發(fā)出登陸指令
3) 校驗登陸結(jié)果
上述每一步都對應一段代碼,它們都屬于關鍵字。在關鍵字驅(qū)動的自動化測試中,很多人包括我都傾向于“將一個流程作為一個指令,將流程中所涉及的所有可變因素作為指令的參數(shù)暴露”。登陸URL、用戶名、密碼都是登陸指令的參數(shù),流程封裝好了,就可以反復的進行使用。
- 行為驅(qū)動
行為驅(qū)動中的行為,就是在一段時間內(nèi)一直被炒熱的BDD種的B(ehaviour)。它講求的是根據(jù)用戶的行為來驅(qū)動測試的實現(xiàn),還是以登陸場景為例:用戶打開頁面,輸入賬號和密碼,提交,然后校驗登陸的結(jié)果。有了這些個場景(用例),測試人員就可以開始測試(手動測試或者實現(xiàn)測試代碼)。
始終要遵循的兩個準則:1.測試數(shù)據(jù)與測試實現(xiàn)分離;2.封裝流程,將流程中涉及的所有可變因素作為參數(shù)暴露
關鍵字驅(qū)動 vs 行為驅(qū)動:描述文件的定義先后順序問題。行為驅(qū)動是先定義描述文件,然后產(chǎn)品人員與測試人員審核,腳本開發(fā)人員根據(jù)描述文件實現(xiàn)代碼;關鍵字驅(qū)動,是腳本開發(fā)人員先去寫好代碼,然后把代碼方法的關鍵字給定義后,再給產(chǎn)品人員和測試人員審核。