自動化測試工具Cucumber的簡單介紹,入門篇!
背景介紹
隨著測試的發展,測試自動化越來越成為人們的關注點。加我VX:atstudy-js 回覆“測試”,進入 自動化測試學習交流群,內含直播課+實戰+面試資料~~
現在我們公司也在進行介面自動化的推廣,在我看來介面自動化的價值就在於整體專案的迴歸,完成一些沒法通過人力進行的測試,比如壓力測試。
為了解決測試開發人員和功能測試人員的同步問題,選擇了Cucumber框架。
Cucumber是一個能夠理解用普通語言描述測試用例的行為驅動開發(BDD)的自動化測試工具。
換句話說就是學習成本比較低,並且可以方便測試開發人員和功能測試人員協同合作、開發人員進行公共方法的封裝、功能測試人員進行測試用例的編寫。
Cucumber組成
由Features、Step_definitions、Cucumber command組成。
Features
·基於Gherkin,支援語言:# language: en (zh-CN)等;
·Features檔案必須以.features命名;
·包含title,多個scenarios,每個scenario包含多個step。
示例如下:多組引數傳參。
```
Features: test //Features關鍵字,測試用例集
Scenario Outline: eating //Scenario Outline關鍵字,測數用例
Given there are <start> cucumbers //Given關鍵字,進行介面請求
When I eat <eat> cucumbers //When關鍵字,資料準備
Then I should have <left> cucumbers //Then關鍵字
Examples:
| start | eat | left |
| 12 | 5 | 7 |
| 20 | 5 | 15 |
```
關鍵字詳解:
Feature (功能):test suite (測試用例集)。
Scenario(情景):test case (測試用例)。
Scenario Outline (or Scenario Template):和examples更配。
Given(給定:setup(建立測試所需環境)。
When(當):test(觸發被測事件)。
Then(則):assert(斷言,驗證結果)。
Background(背景):您會發現自己在一個功能的所有場景中重複相同的給定步驟,因為它在每個場景中都是重複的。
這表明這些步驟對於描述場景不是必需的,它們是附帶的細節。您可以通過將這些給定的步驟分組到background部分,將它們移動到後臺。
And(or But):如果你有連續的“給定”、“何時”或“然後”。
"""(定義多行字串):方便地將較大的文字段傳遞給步驟定義。
|(用來定義表格):資料表便於將值列表傳遞給步驟定義。
Step_definitions
Step定義必須以關鍵字Given、When、Then、And開始,根據正則匹配對應的關鍵字。
根據feature檔案中定義的step編寫對應的測試程式碼。
示例如下:
```java
public class StepDefinition {
private String today;
private String actualAnswer;
@Given("^today is Sunday$") //和features中的Given對應
public void today_is_Sunday() {
today = "Sunday";
}
@When("^I ask whether it's Friday yet$") //和features中的When對應
public void i_ask_whether_is_s_Friday_yet() {
actualAnswer = IsItFriday.isItFriday(today);
}
@Then("^I should be told \"([^\"]*)\"$") //和features中的Then對應
public void i_should_be_told(String expectedAnswer) {
assertEquals(expectedAnswer, actualAnswer);
}
}
```
Cucumber command
執行*.feature檔案,Cucumber會分析feature檔案中定義的step,然後去step -definitions尋找相匹配的step,執行step中的程式碼。
執行結果以html的形式儲存,fail的情況檢視對應log日誌。
Cucumber開發過程
1.首先使用Cucumber原型Maven外掛建立一個新的專案目錄。
```powershell
mvn archetype:generate -DarchetypeGroupId=io.cucumber -DarchetypeArtifactId=cucumber-archetype -DarchetypeVersion=6.10.4 -DgroupId=hellocucumber -DartifactId=hellocucumber -Dpackage=hellocucumber -Dversion=1.0.0-SNAPSHOT -DinteractiveMode=false
```
專案目錄如下:
2、在reources資料夾下,建立feature檔案,包括feature、scenarios和step。
```
Feature: Is it Friday yet? //Features關鍵字,測試用例集
Scenario: Sunday isn't Friday //Scenario Outline關鍵字,測試用例
Given today is Sunday //Given關鍵字,進行介面請求
When I ask whether it's Friday yet //When關鍵字,資料準備
Then I should be told "Nope" //Then關鍵字
```
3、在hellocucumber檔案下建立step_definitions。
```java
package hellocucumber;
import io.cucumber.java.en.Given;
import io.cucumber.java.en.Then;
import io.cucumber.java.en.When;
import static org.junit.Assert.*;
class IsItFriday {
static String isItFriday(String today) {
return "Nope";
}
}
public class StepDefinition {
private String today;
private String actualAnswer;
@Given("^today is Sunday$") //和features中的Given對應
public void today_is_Sunday() {
today = "Sunday";
}
@When("^I ask whether it's Friday yet$") //和features中的When對應
public void i_ask_whether_is_s_Friday_yet() {
actualAnswer = IsItFriday.isItFriday(today);
}
@Then("^I should be told \"([^\"]*)\"$") //和features中的Then對應
public void i_should_be_told(String expectedAnswer) {
assertEquals(expectedAnswer, actualAnswer);
}
}
```
4、專案執行,在idea中直接執行hellocucumber資料夾下的Runcucumber.java檔案即可。
```java
import io.cucumber.junit.Cucumber;
import io.cucumber.junit.CucumberOptions;
import org.junit.runner.RunWith;
@RunWith(Cucumber.class)
@CucumberOptions(plugin = {"pretty"})
public class RunCucumberTest {
}
```
測試用例設計
測試用例設計時按介面文件給的標準生成資料,然後填充到如下圖的examples中即可,框架會迴圈進行執行測試用例,生成測試結果。
```
Features: test //Features關鍵字,測試用例集
Scenario Outline: eating //Scenario Outline關鍵字,測試用例
Given there are <start> cucumbers //Given關鍵字,進行介面請求
When I eat <eat> cucumbers //When關鍵字,資料準備
Then I should have <left> cucumbers //Then關鍵字
Examples: //Examples關鍵字
| start | eat | left |
| 12 | 5 | 7 |
| 20 | 5 | 15 |
```
後期維護
後續迭代版本功能測試人員和測試開發人員分工進行,功能測試人員維護Features,也就是測試用例。
測試開發人員進行step_definitions的維護,就是一些程式碼邏輯和公共方法,最重要的也就是斷言方法的改動比較大,介面請求就幾乎是格式化的東西。
專案框架定製思路
1.測試前資料準備:類似於登入後獲取請求頭這種在裡面進行實現。
2.測試用例資料:Features檔案中存放。
3.邏輯處理,介面請求:封裝到Step_definitions。
4.公共工具封裝:一些資料庫連線,yaml檔案讀取或者一些其他工具的存放地點。
5.框架配置資訊:環境相關資訊放置位置,不同城市、不同資料庫、不同賬號的切換在裡面進行設定。
6.測試報告存放位置:用於測試報告的存放,介面文件的存放。加我VX:atstudy-js 回覆“測試”,進入 自動化測試學習交流群,內含直播課+實戰+面試資料~~
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/31407649/viewspace-2793067/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- UI自動化測試介紹及入門UI
- loadrunner 新手必看《自動化測試工具介紹LR篇》
- airtest自動化測試工具快速入門AI
- 自動化測試框架介紹框架
- 【自動化測試入門】自動化測試思維
- Android自動化測試入門(四)單元測試Android
- Python自動化測試框架介紹Python框架
- T框架介紹(自動化測試框架)框架
- Python Appium介紹以及移動端自動化測試工具PythonAPP
- Jest前端自動化測試入門前端
- 效能自動化測試工具Loadrunner篇
- Android測試工具 UIAutomator入門與介紹AndroidUI
- 自動化整合:Docker容器入門簡介Docker
- 運維自動化工具Ansible的簡單介紹運維
- DevOps,CI,CD,自動化簡單介紹dev
- QAliber - 介紹一款開源的GUI自動化測試工具GUI
- ARouter簡單入門和介紹
- 自動化測試框架Selenium入門框架
- [opendx] 基於 appium 的移動端 UI 自動化測試平臺-介紹篇APPUI
- 如何寫好測試用例以及go單元測試工具testify簡單介紹Go
- 四款常見IT自動化運維工具簡單介紹-行雲管家運維
- EVE-NG簡單入門介紹
- 以 TypeScript Cypress 為例,介紹 14 個測試自動化中簡單實用的實踐技巧TypeScript
- 國產自動化測試工具
- 自動化測試工具QTPQT
- 前端單元測試總結及測試工具介紹前端
- 簡單介紹python自動化運維常用庫Python運維
- 介面自動化測試世界裡的“身份證”—測試工具Jmeter實踐篇JMeter
- Android自動化測試工具實現簡述Android
- 測試開發之自動化篇-自動化測試框架設計框架
- WebUI 自動化測試-PO 設計模式入門WebUI設計模式
- Python實現自動化測試入門指南Python
- 簡單介紹自動化在各個行業的發展!行業
- seldom 2.0 讓介面自動化測試更簡單
- 新手入門Java自動化測試的利器:Selenium WebDriverJavaWeb
- 自動化運維工具Ansible介紹運維
- PHP 開發入門自動化測試歷程(一)PHP
- PHP 開發入門自動化測試歷程(二)PHP