當前位置:
首頁 > 最新 > 一個創建Cucumber.js 測試腳本的快速方法

一個創建Cucumber.js 測試腳本的快速方法

如果您知道Node.js,想開發行為驅動(BDD)的測試自動化,您應該選用Cucumber.js。行為驅動的自動化腳本優勢是測試用例用自然語言編寫,團隊所有人都能看懂,因此測試腳本更容易維護。

我們知道Node.js + Cucumber.js 可以創建一個測試腳本。為創建與Cucumber中的Feature文件,自動化工程師需要知道Cucumber的語法格式Gherkin的詳細信息,還得掌握生成匹配步驟定義的技巧,而且得在場景修改時更新步驟並同步更新代碼中的步驟定義以維護這些匹配。

在這裡,我想介紹一個Cucumber. js 開發者喜聞樂見的開發工具,CukeTest。它是專門為Cucumber. js設計的在Windows上的腳本開發工具,你會發現它可以為你節省很多時間,CukeTest 可以為您創建的步驟生成代碼,並使用一個步驟定義定位該步驟。

如果沒有安裝CukeTest可以選擇從 CukeTest 網站(http://cuketest.com)安裝。您可以選擇從該網站下載和安裝桌面版,或者在使用 Windows 10 時從 Microsoft Store中安裝CukeTest應用商店版。

下面是一個簡單的 Web UI 測試示例,以說明如何進行操作。創建腳本有6個步驟:

然後單擊 "新建項目 " 以創建項目,給它命名為 "bing 搜索",選擇 "Web " 模板以及將此項目放入的文件夾,如下面的對話框:

"Web" 模板提供了Web界面測試相關的Feature文件、代碼和 npm 包。例如,默認的Cucumber. js 超時值為5秒,某些網頁載入可以很容易地超過5秒。因此,在這個 Web 模板中,它將超時值配置為60秒 (在hook. js):

//set default step timeout

setDefaultTimeout(60*1000);

CukeTest 有兩種編輯模式、視覺模式和文本模式。使用可視模式時,可以雙擊任意欄位開始編輯,例如,Feature文件的標題、說明、步驟文本等。在編輯步驟時,還可以從下拉列表中選擇任何關鍵字,使語句語義符合場景。有了這些可視化編輯功能,你不必記住所有可用的關鍵字。編輯完一個欄位後,可以按 tab 或 shift-tab 鍵以向前或向後移動到其他欄位。下圖顯示了編輯用戶界面:


接下來的第2步是創建要測試的場景。請編輯你的Feature文件使之與上面的圖片相同的內容。也可以將下面的文本複製到Feature文件中。

# language: zh-CN

功能:Bing搜索這是一個測試搜索引擎的示例功能

場景:從 bing 搜索東西

假如瀏覽到網站 "https://www.bing.com"

輸入關鍵字"Mars"

那麼單擊「搜索」按鈕

而且搜索結果應包含"NASA"

要將上述內容複製到Feature文件中,可以打開Feature文件,單擊工具欄上的 "文本" 按鈕切換到文本模式,然後用上面的文本替換整個內容。然後,您可以通過單擊 "可視" 按鈕切換回可視模式。在 CukeTest 中,您可以任選兩種模式之一中編輯內容,並在它們之間進行切換,這使您在Cucumber文件編輯方面具有極大的靈活性。


現在,您可以為這兩個步驟生成代碼:請處於可視模式下,單擊每個步驟文本右側的每個灰色按鈕。您可以看到為每個步驟生成了代碼,並且按鈕顏色從灰色變為橙色。

GIF

在 CukeTest 中,此按鈕將以灰色顯示,表示不匹配步驟定義。一旦有了匹配的步驟定義,該按鈕將變顏色,標識新的狀態,如果有匹配的步驟定義且定義未實現,會顯示橙色。如果匹配的步驟定義已經實現,則為綠色。我們知道,在Cucumber. js 默認生成的尚未實現的代碼返回一個字元串 "pending",這就是未實現的代碼。

在 CukeTest 中,您不僅可以生成代碼並跳轉到它,而且還可從步驟定義代碼跳轉到相應的步驟:

GIF


下一步是實現這些步驟中的每個步驟定義。這裡我們假設你已經有了web UI自動化的基礎知識。知道如何用selenium-webdriver 來實現瀏覽器的自動化。您可以輸入類似於以下內容的代碼:

const{Given,When,Then}=require("cucumber");

constassert=require("assert");

const{driver}=require("../support/web_driver");

Given(/^瀏覽到網站 "([^"]*)"$/,asyncfunction(url){

returndriver.get(url);

});

When(/^輸入關鍵字 "([^"]*)"$/,asyncfunction(keyword){

returndriver.findElement({id:"sb_form_q"}).sendKeys(keyword);

});

Then(/^單擊 「搜索」 按鈕$/,asyncfunction(){

returndriver.findElement({id:"sb_form_go"}).click();

});

Then(/^搜索結果應包含 "([^"]*)"$/,asyncfunction(keyword){

awaitdriver.sleep(1000);

letresult=awaitdriver.findElement({id:"b_results"}).getText();

returnassert.ok(result.includes(keyword));

});

與自動生成的代碼相比,更改的部分是 "Given"、"When" 和 "Then" 函數內的代碼。

您可能會注意到,在實現代碼後,步驟文本旁邊的按鈕顯示綠色而不是橙色,這表明步驟有匹配步驟定義代碼且已實現。

現在,您完成了測試腳本的創建。還要做什麼才能讓這個腳本運行...?

您可能已經想到了正確的答案:下載依賴的 npm 包。要運行此腳本,需要安裝selenium-webdriver 包以及其他一些瀏覽器驅動程序包。當從 "Web" 模板創建項目時,您的npm包已預先填充了常用的軟體包,如下所示:

如果不需要所有這些瀏覽器驅動程序,則可以通過從包中移除相應的項來更新package. json。例如,如果您只想運行測試 Chrome 瀏覽器,您可以刪除FireFox的驅動"geckodriver",或 IE瀏覽器的驅動"iedriver"。注意如果刪除了這兩個包,還應該更新項目中的 web_driver 文件,並刪除相應的 "要求" 語句以避免運行時錯誤。

要安裝軟體包,只需打開命令提示符,將目錄更改為該文件夾 (即 "bing 搜索"),然後從命令行運行 ""。

在 CukeTest 中,您可以做的另一件事是在運行前驗證腳本。它將驗證Cucumber.js 腳本的各個方面,包括 JavaScript語法錯誤、未實現的步驟、步驟和步驟定義不匹配等。與只有等到運行腳本時才發現錯誤相比,它將節省開發人員的時間。例如,在下面的圖片中,我故意在腳本中留了一個錯誤,在單擊 "驗證項目 " 之後顯示下面的屏幕。它顯示一條警告信息,單擊警告將為您打開相應的文件有問題的位置。


現在,您可以真正運行您的腳本了。這其實是最簡單的一步: 只需單擊工具欄上的 "運行項目" 按鈕就可以了。"運行項目" 是帶有雙箭頭的按鈕。它將啟動瀏覽器,搜索關鍵詞 "Mars",並驗證搜索結果是否包含關鍵詞 "NASA"。如果不這樣做,它將在輸出窗口和報告中顯示錯誤。

運行項目可以獲取 html 報告,該報表顯示這次運行執行了多少Feature或Scenario,其中成功和失敗多少:

此外,在報告中的詳細說明部分中,您可以看到每個步驟是否成功或失敗。並且它將在每個場景結束前捕獲一個截圖,如下圖所示。

屏幕截圖對 UI 測試很有幫助,這使測試人員確信自動化確實在做期望的工作。

抓取瀏覽器截圖是一種 webdriver 的功能。在Web模板提供的代碼里預設為每個Scenario抓取一個截圖,您可以在代碼中自定義此行為。例如,您可以保存每個步驟的一個截圖,或者為每個失敗的步驟錄一個屏幕截圖。此報告是 html 格式的,因此可以郵寄給任何想查看報告的人,或者將其作為 PDF 文件從 CuteTest 中導出。

在 CukeTest 中,您還可以在測試運行期間錄製視頻 (參考:http://cuketest.com/zh-cn/execution/profiles)。

您可能注意到有多種方法可以運行測試,包括運行項目、運行Feature文件、運行單個Scenario或配置要運行的項目配置文件,您可以自定義Scenario過濾器或報表格式。在這些方式中只有運行項目這種方式才會顯示 html 報表。對於其他方式,CukeTest 將在 "輸出" 面板中顯示結果。


Node.js + Cucumber. js 是一個方便易用的測試框架,因為它可以充分利用Node.js現有豐富的測試自動化庫。例如,對於 Web 有 "selenium-webdriver"、"webdriverio"、"wdio"、"puppeteer" 等,對於RESTful的 API,有 "got"、"request"、"axios" 等,對於移動端,有 "appium"、"Macaca" 等。在這基礎上,使用CukeTest創建 BDD 測試腳本可以很簡單、直觀和高效。你不必記住關於Cucumber語法的細節來創建一個自動化腳本。而且它創建的腳本可以在Node. js + Cucumber上運行。例如你可以在 Windows 平台上用CukeTest開發腳本,再將腳本放到其它平台如 Linux 或 Mac上運行,甚至在Docker上運行。

另外最重要的是,CukeTest 對所有個人和社區使用都是免費的!:)

喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 聆播微布 的精彩文章:

行為驅動測試歷史發展與現狀

TAG:聆播微布 |