」工欲善其事,必先利其器。「—孔子《論語.錄靈公》
首頁 > 程式設計 > 一起使用 AskUI 和 Cucumber

一起使用 AskUI 和 Cucumber

發佈於2024-07-31
瀏覽:155

一起使用 AskUI 和 Cucumber

透過以 Gherkin 等結構化格式定義系統的行為,行為驅動開發 (BDD) 使團隊能夠彌合利害關係人、測試人員和開發人員之間的差距,避免誤解並減少返工。作為一種協作方法,BDD 鼓勵各方從一開始就共同努力,確保每個人都參與
同一頁面並且準確地捕捉了需求。

在此過程中,Cucumber 是一種用於實現 BDD 的流行工具,使團隊能夠編寫清晰、可執行的測試,以確保系統按預期運作。

在這篇文章中,我們將向您展示如何將 Cucumber 與 AskUI 結合設置,以使用 BDD 原則定義 AskUI 工作流程。

Gif showing the whole workflow. Open new tab in Google Chrome browser, typing in the AskUI Practice Page URL and pressing enter. Then the practice page is opened

先決條件

  • 在您的系統(Windows、Linux、macOS)上安裝並設定了 AskUI

  • 初始化後刪除asgui_example/my-first-askui-test-suite.test.ts

準備設定

Cucumber 與 AskUI 的預設設定(版本 0.20.3)還無法很好地配合。為了讓 AskUI 與 Cucumber 良好配合,您需要做兩個小準備,因為 AskUI 使用 Jest 作為其運行器。

1.更改Jest的testEnvironmentOptions

在檔案asgui_example/helpers/jest.config.ts中,您必須停用執行報表中包含的程式碼。您可以透過新增 testEnvironmentOptions 屬性並將 addCodeInReport 屬性設為 false 來實現此目的。

const config: Config.InitialOptions = {
  ...
  testEnvironment: '@askui/jest-allure-circus',
  testEnvironmentOptions: {
    addCodeInReport: false
  },
};
...

2. 告訴 Jest 在哪裡可以找到步驟定義的實現

另外,在asgui_example/helpers/jest.config.ts中,您需要擴充預設的testMatch屬性。它必須包含以 step.ts 結尾的文件,因為我們將在那裡儲存實作。

...
const config: Config.InitialOptions = {
  ...
  testEnvironment: '@askui/jest-allure-circus',
  testEnvironmentOptions: {
    addCodeInReport: false
  },
  testMatch: [ "**/__tests__/**/*.[jt]s?(x)", "**/?(*.) (spec|test|step).[jt]s?(x)" ]
};
...
s?(x)", "**/?(*.) (spec|test|step).[jt]s?(x)" ] }; ……

安裝 jest-cucumber


將 Jest 與 Cucumber 一起使用的最簡單方法是 npm-package jest-cucumber。讓我們使用以下命令安裝它:

npm install --save-dev jest-cucumber
npm install --save-dev jest-cucumber

建立基本特徵文件

建立一個資料夾 features,並在其中建立一個 Feature
檔案 NavigateToWebsite.feature

npm install --save-dev jest-cucumber
project_root/ ├─asgui_example/ ├─ 特徵/ ├─ NavigateToWebsite.feature ├─ 節點模組/ ├─ ...

將以下基本功能
寫入此文件:

npm install --save-dev jest-cucumber
功能:導覽至網站 場景:在瀏覽器網址列中輸入正確的URL 鑑於我在 Google 搜尋頁面上 當我輸入 AskUI 練習頁面的 URL 時 然後我就會登陸網頁

建立步驟定義實施


建立步驟定義檔asgui_example/navigate-to-url.step.ts,其中每個測試映射到特定場景。

npm install --save-dev jest-cucumber
從'jest-cucumber'導入{defineFeature,loadFeature}; 從 './helpers/askui-helper' 導入 { aui } ; // 載入特徵文件 const feature = loadFeature('features/NavigateToWebsite.feature'); 定義功能(功能,測試=> { // 對應到功能檔案中的“場景” test('在瀏覽器網址列輸入正確的 URL', ({給定, 當, 然後 }) => { Give('我在 Google 搜尋頁面', async () => { 等待 aui.moveMouse(500, 500).exec(); 等待 aui.mouseLeftClick().exec(); 等 aui.pressTwoKeys('command', 't').exec(); }); when('我輸入 AskUI 練習頁面的 URL', async () => { 等 aui.typeIn('https://askui.github.io/askui-practice-page/').textfield().exec(); 等 aui.pressKey('enter').exec(); }); then('我將登陸網頁', async () => { wait aui.expect().text('歡迎來到AskUI練習頁').exists().exec(); }); }); });

運行工作流程


全螢幕開啟瀏覽器並啟動工作流程:

npm install --save-dev jest-cucumber
npm run asgui

您應該看到工作流程運行將開啟一個新分頁並導航到 AskUI 的練習頁面。

結論

將 AskUI 與 Cucumber 結合可讓您以 BDD 風格編寫 AskUI 工作流程。像真正的人類用戶一樣執行測試將使測試對於每個利害關係人來說更加現實。

版本聲明 本文轉載於:https://dev.to/askui/use-askui-and-cucumber-together-2803?1如有侵犯,請聯絡[email protected]刪除
最新教學 更多>
  • 大批
    大批
    方法是可以在物件上呼叫的 fns 數組是對象,因此它們在 JS 中也有方法。 slice(begin):將陣列的一部分提取到新數組中,而不改變原始數組。 let arr = ['a','b','c','d','e']; // Usecase: Extract till index ...
    程式設計 發佈於2024-12-21
  • 如何創建 100% 高度並隱藏滾動條的全螢幕 Iframe?
    如何創建 100% 高度並隱藏滾動條的全螢幕 Iframe?
    全螢幕iframe高度為100%查詢:是否普遍支援iframe height=100%跨瀏覽器?當使用XHTML1作為doctype時,高度為100%的iframe是否會佔據頁面剩餘高度(不包括頂部的50px固定高度框架)?另外,如何在自動設定 iframe 高度的同時完全隱藏捲軸? 回應:雖然可以...
    程式設計 發佈於2024-12-21
  • 如何在 PHP 中組合兩個關聯數組,同時保留唯一 ID 並處理重複名稱?
    如何在 PHP 中組合兩個關聯數組,同時保留唯一 ID 並處理重複名稱?
    在 PHP 中組合關聯數組在 PHP 中,將兩個關聯數組組合成一個數組是常見任務。考慮以下請求:問題描述:提供的代碼定義了兩個關聯數組,$array1 和 $array2。目標是建立一個新陣列 $array3,它合併兩個陣列中的所有鍵值對。 此外,提供的陣列具有唯一的 ID,而名稱可能重疊。要求是建...
    程式設計 發佈於2024-12-21
  • 如何解決 VS2010 中混合 C 和 C++ 專案中的 LNK2001 連結器錯誤?
    如何解決 VS2010 中混合 C 和 C++ 專案中的 LNK2001 連結器錯誤?
    解決VS2010 中混合C 和C 專案中的連結器錯誤問題描述將C 程式碼整合到不同VS2010 專案中的C專案中導致從C 程式碼呼叫C 函數時出現連結錯誤。此錯誤標識為 LNK2001,與未解析的外部符號有關。 解決方案要修正此問題,請遵循特定準則來確保程式碼庫的正確組織: 模組化程式碼: 每個C模...
    程式設計 發佈於2024-12-21
  • 如何在.NET MySqlCommand中啟用MySQL使用者定義變數?
    如何在.NET MySqlCommand中啟用MySQL使用者定義變數?
    在.NET MySqlCommand中使用MySql使用者定義變數在.NET MySqlCommand中執行涉及使用者定義變數的MySQL語句時,您可能會遇到致命錯誤。要解決此問題,請按照下列步驟操作:在您的程式碼中,您有一條 MySQL 語句,用於設定使用者定義的變數“@a”,然後選擇其值。但是,...
    程式設計 發佈於2024-12-21
  • 如何在 Windows 版 XAMPP 升級 PHP:逐步指南
    如何在 Windows 版 XAMPP 升級 PHP:逐步指南
    在XAMPP for Windows 中升級PHP:綜合指南在XAMPP for Windows 中升級PHP 對於維護安全性、功能和效能至關重要您的網頁應用程式的相容性。本指南將提供成功升級 PHP 的逐步流程。 從 PHP 官方網站降級您可能嘗試過直接下載最新的 PHP來自 PHP 官方網站的版...
    程式設計 發佈於2024-12-21
  • 如何可靠地確定我的 PHP 腳本是從命令列運行還是透過 HTTP 運行?
    如何可靠地確定我的 PHP 腳本是從命令列運行還是透過 HTTP 運行?
    確定PHP 中的命令列執行或HTTP 執行PHP 腳本開發中的一個常見任務是確定執行環境的類型,無論是該腳本透過命令列或透過HTTP 運行。這些知識對於制定輸出格式決策和相應地自訂行為至關重要。 檢查 SERVER['argc'] 是否存在的傳統方法並不可靠,因為即使使用“Apach...
    程式設計 發佈於2024-12-21
  • 如何增加 Web 表單的最大 POST 資料大小?
    如何增加 Web 表單的最大 POST 資料大小?
    最大化後期資料處理以增強表單提交在Web 開發中,經常會遇到需要處理大量資料(例如使用者輸入或檔案上傳)的情況。透過表單元素提交。處理大量發布資料對於確保網站的無縫運作至關重要。但是,可能存在限制最大貼文大小的限制,從而導致意外錯誤並阻礙資料提交。 為了應對這項挑戰,必須探索增加 Web 應用程式中...
    程式設計 發佈於2024-12-21
  • 如何在 C++ 中定義靜態 const std::string 成員?
    如何在 C++ 中定義靜態 const std::string 成員?
    定義const std::string 類型的靜態資料成員在C 中,定義std::string 類型的私有靜態const 成員在類別內使用類別內初始化,如下所示,不符合C標準:class A { private: static const string RECTANGLE = &q...
    程式設計 發佈於2024-12-21
  • 使用 Uvicorn 在 FastAPI 中發出並發 HTTP 請求時如何避免「ConnectionClosed」錯誤?
    使用 Uvicorn 在 FastAPI 中發出並發 HTTP 請求時如何避免「ConnectionClosed」錯誤?
    在Uvicorn/FastAPI 中發出HTTP 請求處理使用FastAPI 和Uvicorn 建構的HTTP 端點時,通常會從外部要求資料。但是,在處理多個並發請求時,可能會出現「can't handle event type ConnectionClosed when role=SERV...
    程式設計 發佈於2024-12-21
  • 如何使用非標準憑證檔案在Go Web伺服器上建立HTTPS?
    如何使用非標準憑證檔案在Go Web伺服器上建立HTTPS?
    如何使用非標準憑證檔案在 Go Web 伺服器上建立 HTTPS提供的文件建議連接三個 .pem 檔案。但是,如果您沒有這些文件,以下是如何使用您擁有的證書文件設定HTTPS:組合中間證書:雖然Go 通常需要一個串聯的證書文件,其他平台僅儲存根憑證。為了確保相容性,請連接中間憑證:cat websi...
    程式設計 發佈於2024-12-21
  • 如何可靠地處理帶有子元素的絕對定位 div 上的滑鼠移出事件?
    如何可靠地處理帶有子元素的絕對定位 div 上的滑鼠移出事件?
    在沒有jQuery 的情況下處理帶有子元素的絕對Div 中的Mouseout 事件處理絕對定位的div 時,處理mouseout 事件可能具有挑戰性。預設情況下,如果滑鼠懸停在父 div 內的子元素上,則在滑鼠退出外部 div 之前,mouseout 事件會提前觸發。 要解決此問題,請考慮使用 on...
    程式設計 發佈於2024-12-21
  • PHP 的 `==` 和 `===` 運算子有什麼不同?
    PHP 的 `==` 和 `===` 運算子有什麼不同?
    PHP Double (==) 和 Triple (===) 相等比較有何不同? 在 PHP 中比較值時,兩個可以使用不同的運算子:鬆散相等 (==) 運算子和嚴格相同 (===) 運算子。了解它們的細微差別對於確保可靠的比較至關重要。 鬆散相等 (==) 比較鬆散相等運算子在比較值之前執行型別雜亂...
    程式設計 發佈於2024-12-21
  • 如何在 JavaScript 中對字串執行數學運算?
    如何在 JavaScript 中對字串執行數學運算?
    將字串轉換為數字進行數學運算儘管包含數字字符,但字串不能直接作為數字進行操作。要執行算術運算,必須先將它們轉換為數字形式。 考慮給出的例子:var num1 = '20', num2 = '30.5';直接添加這些字串會導致串聯:num1 num2; // '2030.5'要強制將它們視...
    程式設計 發佈於2024-12-21
  • 儘管程式碼有效,為什麼 POST 請求無法擷取 PHP 中的輸入?
    儘管程式碼有效,為什麼 POST 請求無法擷取 PHP 中的輸入?
    解決PHP 中的POST 請求故障在提供的程式碼片段中:action=''而非:action="<?php echo $_SERVER['PHP_SELF'];?>";?>"檢查$_POST陣列:表單提交後使用 var_dump 檢查 $_POST 陣列的內...
    程式設計 發佈於2024-12-21

免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。

Copyright© 2022 湘ICP备2022001581号-3