自动化测试框架cucumber_自动化测试框架cucumber-java操作手册_从配置到生成测报...
一、cucumber簡介
cucumber是BDD(Behavior-driven development,行為驅動開發)的一個自動化測試框架產品。cucumber使用自然語言來描述測試,通過設置中文描述可以連通業務人員和開發人員,使得需求清晰明了,實現需求的實例化。Gherkin是這種自然語言測試的簡單語法,Cucumber是可以執行它們的工具。
本文主要從實際的項目角度,將cucumber應用于自動化業務驗收測試,結合圖例介紹java對應的cucumber配置搭建至生成業務驗收測試報告的操作步驟。具體BDD及cucumber的語法及介紹可參考cucumber官網鏈接或其他文檔,如自動化測試之cucumber(一)。
二、實現cucumber業務驗收測試
2.1 配置IDEA插件
本項目為maven項目,開發的IDE為idea。
首先,在idea中加入Gherkin、Cucumber for Groovy、Cucumber for java三個插件。
idea中cucumber插件
2.2 配置pom文件
本項目java版本是1.8,使用的cucumber版本是6.8.1(此處說明:不同版本的cucumber對于代碼生成、配置文件格式等差異較大,需提前關注好cucumber的版本,筆者在此處踩過許多坑)。
pom.xml中加入cucumber依賴,如下:
1.8
6.8.1
io.cucumber
cucumber-java
${cucumber.version}
test
io.cucumber
cucumber-junit
${cucumber.version}
test
io.cucumber
cucumber-spring
${cucumber.version}
test
junit
junit
4.12
test
2.3 編輯feature和步驟定義文件
根據業務需求,在src/test/resources目錄下編輯.feature文件,在src/test/java目錄下撰寫每一個step對應的步驟定義java文件。
需要注意的是,cucumber可以支持多種語言,包括中文。本文僅介紹中文實現方式,具體關鍵字及其他語言的使用見官方文檔。
中文實現方式:在feature文件中加入:# language:zh-CN
在對應的步驟定義文件中加入:(tips:不同的cucumber版本,import的方式不同)import io.cucumber.java.zh_cn.*;
feature文件中文的關鍵字對照表如下:
feature文件中文對應的關鍵字
2.3.1 編輯feature文件
feature可以使用自然語言描述業務需求,實現業務需求的實例化,便于業務人員與開發人員的溝通與理解。
feature文件編輯示例
一個feature文件中可以有多個功能(Feature),一個功能(Feature)下可包含多個場景(Scenario)。但每個場景(Scenario)都是獨立存在的,不依賴于其他場景(Scenario),即放在任何feature文件中都可以獨立運行成功。
feature文件中功能(Feature)及場景(Scenario)示例
feature文件中可以通過標點區分step中的string、int等基礎參數字段類型(如上圖雙引號內的"張三"默認為string類型),并在生成步驟定義時自動識別為到方法的輸入參數。
當場景(Scenario)中具有多個參數,且參數的不同會導致不同的測試結果,這時可以使用場景大綱(Scenario outline)將所有參數排列組合的測試結果全部羅列下來,形成實例化需求。
Tips:Scenario Outline(場景輪廓)中可以使用多個Examples(例子),但是盡量不要將表格寫得太長,因為應把實例的說明性和代表性作為目標,而不是詳盡。在cucumber的驗收測試中,可讀性是最重要的。
場景大綱(Scenario outline)? 示例
上圖示例中使用到了數據表(step:假如 準入名單內已有下列的客戶),Gherkin可以傳遞List、Map,稱為DataTable,具體例子查看該github上的文檔。
2.3.2 撰寫步驟定義文件
步驟定義文件即StepDefine文件,又稱為膠水代碼,是連接feature文件和后端服務的橋梁,實現了將feature文件中業務需求的自然語言轉化為java代碼,通過發送請求對后端邏輯進行測試。
步驟定義中的方法通過@關鍵字與feature文件的step語句進行唯一匹配。也就是說,如果多個step描述相同,在步驟定義中是共用一個方法的,而如果我們想實現step與方法一一對應,需要在編寫feature文件時,對每一個step的描述仔細斟酌。
對應的步驟定義文件
在步驟定義java文件中,部分低版本的cucumber是通過正則表達式匹配feature文件中的step,但在本項目中6.8.1版本的cucumber可以直接使用雙引號及{string}的方式匹配step,更加便于理解了。
2.3.2.1 安全認證
在本項目中,由于加入了Security,在向后端發送請求時需要先進行安全認證,所以在驗收測試案例執行前需要先定義好登錄用戶。
"username"為"zhoutr"
"password"為"123456"
安全認證
2.3.2.2?清空數據表
在鋪數前,需要先清空數據表,防止已有數據的干擾對測試結果產生影響。//清除數據表
this.deleteAll("customer_info");
void deleteAll(final String tableName) {
this.apply(deleteAllFrom(tableName));
}
//執行數據庫操作
void apply(final Operation operation) {
new DbSetup(databaseDestianton, operation).launch();
}
2.3.2.3?鋪數
在某個測試案例的所有數據獲取完成后,發送請求前的最后一步是集中鋪數,即向數據庫中插入測試案例中的數據。下圖中這個場景下有5個字段,即客戶名稱、證件類型、證件號碼、客戶類型、客戶狀態。
鋪數代碼
Tips:本項目中使用了DbSetup for Ningjia實現數據庫操作。
2.3.2.4 發送請求至后端
在鋪好數據后,就可以向數據庫發送post請求了。
在發送前需要先確認后端對于返回碼的定義,例如本項目中返回碼code為0,msg為“成功”時,代表發送請求成功,返回該客戶允許準入。若返回碼code為1,msg為“失敗”時,代表發送請求成功,返回該客戶由于命中黑名單而不允許準入。
發送請求至后端
Tips:
1、判斷成功與否應使用唯一標識返回碼,如本項目中的code取值0、1、2、3等,不可以使用msg取值“成功”、“失敗”,因為失敗的情況有很多種,msg的返回并不唯一。
2、如果想對比校驗接口是否成功以及成功的返回信息,可以使用postman對比測試。
2.4 cucumber測試運行
2.4.1 運行前提
在運行前,需要有兩個先決條件,如果有一個條件未滿足,測試就無法運行:
1、服務器已處于成功運行狀態
2、用于測試的數據庫已連接
建議新建一個單獨用于cucumber業務驗收測試的數據庫(本項目使用的是本地MySQL數據庫),因為在測試前會先清空數據表,然后鋪數、最后再測試。如果與開發或生產共用同一個數據庫,數據刪除后可能會導致不可預估的后果。
在src/test/java目錄下,一般會有一個主運行函數CucumberTest.java,其中@CucumberOptions是對測試運行方式進行配置,具體介紹見Cucumber之五Cucumber Options詳解,本項目中僅設置了feature文件所在位置(features)和生成基礎測報的格式(plugin)。測報的生成會在下文中具體介紹。
CucumberTest.java
此處需要注意的是,不同版本的cucumber對@CucumberOptions內參數的編寫格式不同,如果寫錯了,運行時會報錯(筆者在此處踩過坑 QAQ)。
2.4.2 cucumber測試運行
一切準備就緒后,測試的運行就變得很簡單啦~
可以整體運行,也可以單獨運行:
1、整個項目的測試案例運行:點擊CucumberTest中的運行按鈕,或者右鍵Run CucumberTest.java,即可運行。
2、某個feature文件或某個場景(Scenario)單獨運行:點擊feature文件中功能(Feature)或場景(Scenario)前面的運行箭頭,即可運行。
遇到的問題及解決方法
1、無法通過點擊feature文件中的運行箭頭直接運行。即,明明是passd的steps,但通過該方式點擊運行顯示都是undefined。
解決方法:在IDEA的Run Configuration中,對于該場景的運行設置Glue路徑,即該feature文件匹配的步驟定義文件路徑。
Run Configuration配置
三、生成cucumber測試報告
3.1 本地官方測報
在CucumberTest.java文件的@CucumberOptions中,寫入生成json及html報告。plugin = {"pretty",
"json:target/cucumber-report/json-files/cucumber.json",
"html:target/cucumber-report/cucumber.html"},????//生成本地json和html測試報告
注意:不同的cucumber版本寫入格式不同。
本地官方測報配置
運行后,根據配置好的路徑,在target文件下可看到生成的本地官方測報。
本地官方測報生成路徑
HTML格式測試報告:
本地官方html測試報告樣式
JSON格式測試報告:
本地官方json測試報告樣式
3.2 遠程官方測報
在src/test/resources目錄下新建cucumber.properties文件,文件中寫入#生成遠程官方測試報告
cucumber.publish.enabled=true
運行測試后,即可在官網上生成遠程測試報告:
生成遠程官方測試報告
測報樣式如下圖,但該測報生成必須聯網,且該測報生成后只能保留24小時。
遠程官方測試報告樣式
3.3 cluecumber測試報告
cluecumber為生成測試報告的第三方插件,可以生成html測報,該測報生成需以本地json測報的生成為基礎(見本文3.1章節),官方介紹連接cluecumber-reporting。
pom.xml中加入依賴:
com.trivago.rta
cluecumber-report-plugin
2.5.0
com.trivago.rta
cluecumber-report-plugin
2.5.0
report
post-integration-test
reporting
d:/CMIS/Legend/target/cucumber-report/json-files
d:/CMIS/Legend/target/cluecumber-generated-report
Cmis-Server Report
添加依賴后,執行mvn cluecumber-report:reporting
然后再Run CucumberTest.java,就可以在指定目錄下(target/cluecumber-generated-report)看到生成的html報告。
生成測報
打開index.html就可以看到cluecumber的測報,該測報可以從Scenarios、Scenario Sequence、Tags、Steps、Features等多種維度分析測試結果。
Scenarios
Steps
Features
cluecumber生成的測報更關注用圖形化表示整體結果,而本地測報能夠從細節看出每一個step的內容和執行情況,在具體的項目中,可以將兩種測報結合使用。
Tips:更多的測試報告可參考官方測試報告。
后續計劃研究下cucumber的標簽功能(Tags),嘗試結合selenium進行前端頁面的測試,并完善驗收測試報告的優化,本文將持續更新。
總結
以上是生活随笔為你收集整理的自动化测试框架cucumber_自动化测试框架cucumber-java操作手册_从配置到生成测报...的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: centos7 文件名中文乱码_解决Ce
- 下一篇: putty 连接虚拟机_使用Putty连