系列內容
- web自動化測試框架-01 搭建基礎架構並執行一個樣例
- web自動化測試框架-02 快速開發用例文件指令碼
- web自動化測試框架-03 介紹標籤,背景,場景,場景大綱
- web自動化系列教程- 04 Hooks與TimeOut介紹
- web自動化測試框架-05 建立資料驅動的測試用例,Doc String與Data Table
- web自動化測試框架-06 如何快速編寫自動化指令碼
備註:配合免費視訊教程,獲取更佳的學習效果!課程連結: ke.qq.com/course/2815…
主要內容
- Cucumber 文件規範
- 使用CukeTest 快速進行feature檔案編輯
Cucumber 文件規範
Cucumber 是 BDD 模式下實現可執行規範(Executable Specifications)的開源工具,但是它的使命並不侷限於做自動化驗收測試,更加重要的在於其能夠在團隊成員之間構建統一的交流基礎(feature 檔案)、規範交流用語(Domain Specific Language)、提高各個利益相關方(Business Stakeholders)溝通效率和效果,從而達到提升產品質量、做成客戶期望得到的產品這一最終目標。
Cucumber文件檔案使用 .feature 作為字尾名,遵循的為gherkin的語法規範。以下面簡單的例子為例:
# language: zh-CN
功能: 百度搜尋功能
測試功能
場景: 百度搜尋
假如瀏覽到搜尋網站 "http://www.baidu.com"
當輸入關鍵字"CukeTest",並的點選搜尋按鈕的時候
那麼搜尋結果中應該可以包含"CukeTest"
複製程式碼
# language:zh-CN
表明 feature 檔案中所使用的描述語言是中文簡體,Cucumber 本身支援超過 30 種語言(此處語言是 Spoken Language 而非 Programming Language)
採用中文描述 feature 檔案,首先得益於 Cucumber 本身的支援,但是另外一個最重要的原因是我期望所描述的功能可以被利益相關方清楚地讀懂,使用利益相關方的 Spoken Language 來撰寫規範可以使溝通更加方便,是 Cucumber 的又一大優點;
如果不使用# language: zh-CN這個 header,預設情況下,Cucumber 會以英語解析 feature 檔案尋找場景和 Steps,此時,Gherkin 的關鍵詞必須使用英文。對應的英文語法應該如下
Feature: 百度搜尋功能
測試功能
Scenario: 百度搜尋
Given 瀏覽到搜尋網站 "http://www.baidu.com"
When 輸入關鍵字"CukeTest",並的點選搜尋按鈕的時候
Then 搜尋結果中應該可以包含"CukeTest"
複製程式碼
通過閱讀上面feature檔案的描述,可以很清楚的瞭解到我們測試了哪些內容。下面介紹下feature檔案的組成部分,總的來說可以劃為劇本,場景,操作步驟 這三個部分。
-
劇本:feature檔案中描述整個檔案的功能概覽
-
場景:某個功能操作集合。比如在做web自動化過程中常有的登入操作,就可以把登入這一部分定義為登入場景。
-
操作步驟:具體操作的步驟,場景的重要組成部分。類似我們寫測試用例中的每個操作。
一個feature檔案中,我們可以宣告feature檔案的語言:如果不宣告,預設為英文。這裡跟大家解釋下:比如對於漢語,開頭應宣告# language: zh-CN
,即下面的關鍵字要使用漢語。之後緊跟著 Feature: 關鍵字,(對於中文,要寫成 功能: )後面是feature檔案的標題。比如下面feature檔案書寫:
Feature: 測試登入頁面
xxxxx
複製程式碼
預設使用英語, 所以必須使用 Feature: 英文關鍵字。
如果按照如下的寫法,執行Cucumber的時候就會報錯:
功能: 測試登入介面(會出錯)
複製程式碼
因為使用功能:
漢語的關鍵字,但沒有宣告漢語。下面為方便描述,使用預設的英文關鍵字來解釋說明。
一個feature包含多個場景,一個場景以 Scenario 或者 Scenario Outline 或者 Background 開始,它定義3種不同的場景型別,後面會有專門的篇章來講解。
在場景中,我們需要定義操作步驟,操作步驟的起始關鍵字有 Given Then When And * 等來修飾。對應於中文的 假如 當 那麼
一個feature檔案中可以有多個場景檔案描述。例如可以這樣來寫:
Feature: 刪除、收藏話題
釋出話題後刪除這個帖子
收藏話題
Scenario: 使用者登入釋出一個話題
Given 導航到使用者登入頁面
When 使用者名稱輸入"testuser3"
When 密碼輸入"123456"
Then 登入系統並顯示使用者名稱"testuser3"
Then 開啟發布話題按鈕
When 選擇板塊"分享"
Then 輸入標題"helloworld123"
Then 輸入正文"12312312312312312"
Then 點選提交,"成功"校驗點"helloworld123"
Scenario: 刪除話題
Given 導航到使用者登入頁面
When 使用者名稱輸入"testuser3"
When 密碼輸入"123456"
Then 登入系統並顯示使用者名稱"testuser3"
When 點選使用者頭像進入使用者中心
And 點選其中的一個話題
And 點選刪除按鈕,彈出alert視窗
And 點選確定按鈕,刪除話題成功
Scenario: 使用者A建立一個話題
Given 導航到使用者登入頁面
When 使用者名稱輸入"testuser4"
When 密碼輸入"123456"
Then 登入系統並顯示使用者名稱"testuser4"
Then 開啟發布話題按鈕
When 選擇板塊"分享"
Then 輸入標題"helloworld123"
Then 輸入正文"12312312312312312"
Then 點選提交,"成功"校驗點"helloworld123"
Scenario: 使用者B收藏使用者A話題
Given 導航到使用者登入頁面
When 使用者名稱輸入"testuser3"
When 密碼輸入"123456"
Then 登入系統並顯示使用者名稱"testuser3"
When 開啟話題使用者建立話題"helloworld123"
When 點選收藏按鈕
And 導航到使用者"testuser3"個人中心頁面
Then 使用者收藏列表裡包含收藏的話題"helloworld123"
在操作步驟中,使用 " " 引起來的部分,可以作為引數傳遞給程式碼。這個會在後面如何自動生成自動化程式碼樣例文件中詳細說明。
複製程式碼
Gherkin 語法
通過以上例子,我們大致瞭解feature檔案規範,這套規範被稱為Gherkin語法。Gherkin中定義的關鍵字主要幫助我們在描述業務的時候能更好的理解業務場景,對於程式碼的執行沒有特別的意義。
下面表格使用預設英文為大家整理說明Gherkin語法中的關鍵字:
關鍵字 | 說明 |
---|---|
Feature | 功能,劇本,用來定義此feature檔案標題 |
Background | 背景,用來定義場景執行的前提條件 |
Scenario | 場景,定義執行場景 |
Scenario Outline | 場景大綱 當場景有多種情況可以通過定義不同引數來實現,使用場景大綱,下面必須配合使用Examples。 |
Examples | 只對 Scenario Outline 有效,定義資料。 |
Given | 操作步驟關鍵字,用來描述操作條件 |
When | 操作步驟關鍵字,用來描述操作步驟 |
And | 操作步驟關鍵字,用來描述並且條件 |
Then | 操作步驟關鍵字,用來描述操作結果 |
* | 操作步驟關鍵字,泛指一切操作 |
使用CukeTest 快速進行feature檔案編輯
可以使用文字編輯器的情況下進行Cucunber文件的編寫。因為必須要遵守相應的Gherkin語法來寫,如果不注意,會寫錯語法就並執行失敗。
為避免以上錯誤,一個訣竅是使用CukeTest (http://cuketest.com/)工具來進行Cucumber文件的視覺化開發。首先,看下CukeTest中 .feature 檔案的視覺化介面。
視覺化介面中,CukeTest能有下拉選項幫助選擇對應語言版本的關鍵字,使用者只需要編輯主要說明部分即可。同時,也提供文字編輯,點選 文字 按鈕切換到文字檢視。
現在舉例介紹CukeTest 視覺化介面中建立feature檔案的快捷操作:
-
雙擊編輯
在視覺化介面的任何文字位置,如果要更改為可編輯狀態,只需要在相應位置雙擊滑鼠即可。
-
Tab 快捷鍵導航
在編輯step的時候,Tab 鍵可以快速的切換到下一個step中進行編輯。
-
Shfit + Tab 快捷鍵導航
在編輯step的時候 ,Shift + Tab 鍵可以快速的切換到上一個step進行編輯。 -
更改場景型別
點選場景圖示,彈出對話方塊,可以將場景型別轉換為不同的型別 -
滑鼠右鍵
在場景欄,滑鼠右鍵可以彈出場景相關的操作,
在操作步驟上,滑鼠右鍵可以彈出 新增表 新增文字字串 刪除 編輯 追加 功能欄 -
拖拽操作
在每個操作步驟和場景的前部,當滑鼠移動過去之後會變成 手狀,表示是可以進行拖拽操作的。當進行場景位置或者操作步驟位置更換的時候,使用拖拽操作可以進行快速位置更換。 -
場景文字內容摺疊
每個場景的最右邊都有 向上或向下的箭頭, 單擊可以摺疊或者展開當前場景的文字內容。
同樣也可以通過拖拽導航欄中的滑動導航欄進行摺疊或展開所有的場景內容。
獲取更多資訊,可以關注公眾號,也可以加QQ群:707467292 進行node.js自動化相關技術交流。