Web 自動化神器 TestCafe(三)—用例編寫篇

一、用例編寫基本規范

1、 fixture 測試夾具

使用 TestCafe 編寫測試用例,必須要先使用 fixture 聲明一個測試夾具,然后在這個測試夾具下編寫測試用例,在一個編寫測試用例的 js 或 ts 文件中,可以聲明多個測試夾具

  • fixture(測試夾具)的聲明 import 'testcafe' // 聲明一個測試夾具 百度測試 fixture `登錄功能測試` 上面是官方文檔中的 demo,調用 fixture 方法聲明測試夾具的時候,使用的是模板字符串傳參的形式,對于沒用過這種語法的小伙伴來說看起來不太好理解,可以按下面這個使用括號調用函數的形式來寫。 import 'testcafe' // 聲明一個測試夾具 新浪測試 fixture('注冊功能測試')
  • fixture.page 方法: 通過 fixture.page 方法,我們可以在測試夾具打開一個要進行測試的頁面 fixture('百度登錄測試').page('https://www.baidu.com');

2、test 測試函數

2.1、測試用例編寫

  聲明了測試夾具之后,就可以定義測試用例了,在testcafe中寫測試用例,直接調用測試函數test, 并傳遞一個內部帶有測試代碼的函數即可 。
  import 'testcafe'
// 在測試夾具中打開百度頁面
fixture('百度案例').page('https://www.baidu.com');// 第一條用例:百度輸入 學習點擊搜索
test('用例1', async t => {await t.typeText('#kw', "學習").click('#su');
});// 第二條用例:百度輸入 python 點擊搜索
test('用例2', async t => {await t.typeText('#kw', "python").click('#su');
});
  • 關于上面測試函數 test 調用的說明 test 方法的第一個參數為測試用例的名稱,第二個參數是寫測試代碼的函數 關于參數 t: 在 testcafe 中 所有測試動作都需要使用 測試控制器對象的異步功能來實現。箭頭函數定義的參數 t 就是用來接收測試控制器對象的。 上面寫測試代碼的函數是使用 async/await 語法定義的函數,這也是 testcafe 的推薦寫法,在執行相關測試動作時,如果要等待前一個動作執行完成,再調用下一個動作或動作鏈,只需要進行等待的動作前面加上關鍵字 await 即可。

2.2、指定測試開始頁面

在 fixture 中可以通過 page 方法去打開一個測試的初始頁面,當然在 test 方法中如果不用 fixture 打開的初始頁面,也可以使用 tes.page 自定義一個測試初始打開頁面,如下:

  fixture(`百度案例`).page `https://www.taobao.com`;test.page('https://www.baidu.com')('百度搜索功能', async t => {await t.typeText('#kw', "hao123").click('#su');
});

二、測試前后置處理

在工作中執行測試時,大多數的用例執行,都會有一些用例前置準備或者后置清理工作要去做。關于前后置處理的方法,我們稱之為鉤子函數,testcafe 提供了兩種鉤子,一種叫測試鉤子,一定叫固定鉤子。

1、測試鉤子

測試鉤子指的是每一條測試用例執行之前和執行之后,會執行的鉤子函數,我們稱之為測試鉤子,關于測試鉤子 Testcafe 提供了如下四個方法。

  • fixture.beforeEach 方法

測試夾具 fixture 提供了一個 beforeEach 方法,可以給該 fixture 中的每一條測試用例設置前置執行的操作。案例代碼如下:

  import 'testcafe'fixture(`百度案例`).page('https://www.baidu.com')// 設置每條用例執行的前置操作.beforeEach(async t => {await t.typeText('#kw', "前置步驟").click('#su')});
  • fixture.afterEach 方法
  fixture(`百度案例`).page('https://www.baidu.com')// 設置每條用例執行的前置操作.beforeEach(async t => {await t.typeText('#kw', "前置步驟")}).afterEach(async t => {await t.typeText('#kw', "后置步驟").click('#su')});

上面這兩種方法可以給通過測試夾具 fixture 給該夾具下的每條用例設置前后置操作。如果某一條用例需要單獨的設置前后置,則需要使用 test.before 方法和 test.after 方法。

  • test.before 方法

給單獨的用例設置前置操作

  test.before(async t => {await t.typeText('#kw', "test設置的前置")})('百度搜索功能', async t => {await t.typeText('#kw', "python").click('#su');})
  • test.after 方法

給單獨的用例設置后置操作

  test.before(async t => {await t.typeText('#kw', "test設置的前置")})('百度搜索功能', async t => {await t.typeText('#kw', "python").click('#su');}).after(async t => {await t.typeText('#kw', "后置方法中輸入的內容").click('#su');})   
  • 測試鉤子和測試代碼之間共享數據 如果需要在測試鉤子和測試代碼直接共享數據的話,我們可以通過測試上下文(t.ctx 屬性)來進行傳遞。在測試鉤子中將數據保存到測試上下文中,在測試方法中再去測試上下文中獲取數據。具體案例如下: test.before(async t => { // 在測試鉤子中通過t.ctx保存數據 t.ctx.token = 'musen123' }) ('百度搜索功能', async t => { // 測試鉤子中通過t.ctx獲取數據 console.log(t.ctx.token) })

2、夾具鉤子

  夾具鉤子和測試鉤子不同,夾具鉤子只會在夾具中的第一個測試開始之前和最后一個測試完成之后運行。要添加夾具鉤子,可以使用fixture.before和fixture.after方法來定義定義。另外在夾具鉤子中無法訪問測試頁面,也無法對測試頁面進行相關操作。
  • fixture.before 方法
  fixture(`百度案例`)
.page('https://www.baidu.com')
.before( async ctx => {// 前置夾具鉤子console.log(ctx)
})
  • fixture.after 方法
  fixture(`百度案例`)
.page('https://www.baidu.com')
.after( async ctx => {console.log(ctx)// 后置夾具鉤子
});
  • 夾具鉤子和測試代碼之間共享數據 傳遞給 fixture.before 和 fixture.after 方法的鉤子函數接收一個夾具上下文的參數 ctx。需要進行數據傳遞時,我們可以在夾具鉤子中把數據保存到 ctx 的屬性中。在測試代碼中使用 t.fixtureCtx 來獲取。案例代碼如下:
  fixture(`百度案例`).before(async ctx  => {// 夾具鉤子中保存數據ctx.someProp = 123;})test('Test1', async t => {// 測試代碼中獲取數據console.log(t.fixtureCtx.someProp); 
});

三、跳過和選擇用例

1、跳過用例

  在執行測試的時候,如果說有用例不想執行,那么我們可以設置跳過用例執行。關于跳過用例執行testcafe中提供了fixture.skip 和test.skip方法。
  • fixture.skip:跳過整個 fixture 的用例
  • test.skip:跳過當前的測試用例 // 跳過夾具F1中所有的用例 fixture.skip('F1'); test('F1-->用例1', async t => { }); test('F1-->用例2', async t => { }); fixture('F2'); // 跳過這一條用例 test.skip('F2-->用例1', async t => { }); test('F2-->用例1', async t => { });

2、選擇用例

另外我們也可以使用 fixture.only 和 test.only 來篩選執行需要的用例,只有選擇的用例或夾具運行,而所有其他應被跳過

  • fixture.only:選擇執行的測試夾具
  • test.only:選擇執行的測試用例 // 選擇F1這個測試夾具 fixture.only('F1'); test('F1-->用例1', async t => { }); test('F1-->用例2', async t => { }); fixture('F2'); // 選擇這一條用例 test.only('F2-->用例1', async t => { }); test('F2-->用例1', async t => { });

以上就是 testcafe 中用例編寫的所有內容啦,后續會持續更新 TestCafe 的相關使用文檔。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/164945.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/164945.shtml
英文地址,請注明出處:http://en.pswp.cn/news/164945.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【C++11】default、delete與Noncopyable

C11 oop中的default、delete與Noncopyable default 在C11標準中,可以使用default關鍵字來顯式地聲明默認的構造函數和析構函數。 使用default關鍵字可以用來顯式聲明默認的構造函數和析構函數。這樣做可以讓編譯器自動生成默認實現 –>->->關于構造函數…

計數排序+桶排序+基數排序 詳講(思路+圖解+代碼詳解)

文章目錄 計數排序桶排序基數排序一、計數排序概念:寫法一:寫法二: 二、桶排序概念代碼 三、基數排序概念1.LSD排序法(最低位優先法)2.MSD排序法(最高位優先法) 基數排序VS基數排序VS桶排序 計數…

內容營銷頻頻出圈,這些品牌號做對了什么?

小紅書擁有大量的年輕用戶,通過運營品牌號既能降低投放成本,又能更好地連接消費者和品牌,在平臺完成一站式閉環營銷。 今天就借助幾個成功案例,來分析下他們是如何搭建官方賬號,通過內容運營吸引更多用戶,實…

一款專為POS機設計的芯片解決方案

一、基本概述 HCM8003設計用于磁條讀卡器系統。它會從F/2F恢復時鐘和數據信號磁產生的數據流頭HCM8003將用于數據速率從200到15000比特每秒。 二、典型電路 內部數據的采集和跟蹤這個范圍是自動的。可以應用于POS機終端設備、磁卡門禁系統、身份識別等場合。 三、引腳定義 四…

redis的主從復制,哨兵模式

1.主從復制 主從復制:主從復制是redis實現高可用的基礎,哨兵模式和集群都是在主從復制的基礎之上實現高可用 主從復制實現數據的多機備份,以及讀寫分離(主服務器負責寫,從服務器只能讀) 缺陷&#xff1a…

PyTorch基本操作和工作流程

1. PyTorch基礎 張量(Tensors): 學習 PyTorch 中表示數據的基本單元。了解如何創建、操作和使用張量。 自動微分(Autograd): 了解 PyTorch 的自動微分機制,這是訓練神經網絡的核心。 模型定義…

Android registerForActivityResults使用詳解以及實現原理

registerForActivityResult 使用用途是監聽Activity結果。 以下是使用樣例 //需要傳遞Request用于解析Intent和解析上個Activity返回的結果 val launchdata = registerForActivityResult<PickVisualMediaRequest, Uri?>(ActivityResultContracts.PickVisualMedia()) {…

中國人工智能系列白皮書 AIGC

https://www.caai.cn/index.php?s/home/article/detail/id/3188.html

【git】使用ssh

前言 git之前一直使用https&#xff0c;因為很方便隨時隨地都可以用。最近把代碼托管到GitHub&#xff0c;使用https就使用不了。后面聽同事說GitHub使用ssh是沒問題的&#xff0c;就想著嘗試一下。 git ssh配置 設置用戶名和郵箱 git config --global use.name username g…

OpenCV實現圖像噪聲、去噪基本方法

一、噪聲分類 1、高斯噪聲 指服從高斯分布&#xff08;正態分布&#xff09;的一類噪聲&#xff0c;其產生的主要原因是由于相機在拍攝時視場較暗且亮度不均勻造成的&#xff0c;同時相機長時間工作使得溫度過高也會引起高斯噪聲&#xff0c;另外電路元器件白身噪聲和互相影響…

acwing算法基礎之數學知識--求組合數基礎版

目錄 1 基礎知識2 模板3 工程化 1 基礎知識 &#xff08;一&#xff09; 組合數 C n k C_n^k Cnk?的計算公式&#xff0c; C n k n ? ( n ? 1 ) ? ( n ? k 1 ) 1 ? 2 ? k C_n^k\frac{n\cdot(n-1)\cdots(n-k1)}{1\cdot 2\cdots k} Cnk?1?2?kn?(n?1)?(n?k1)? …

laravel-admin導出excel全部,表中無id列導出失敗

laravel-admin導出excel時&#xff0c;導出全部數據&#xff0c;但是表中沒有id字段&#xff0c;然后就無法導出excel&#xff1b; 就直接顯示 一開始我也很著急&#xff0c;弄了半天還是不行&#xff0c;然后重寫還是有問題 最后發現底層代碼排序是按照id排序的orderBy(id, a…

Unity地面交互效果——6、地形動態頂點置換和曲面細分

回到目錄 Unity置換貼圖局部距離曲面細分 大家好&#xff0c;我是阿趙。 ??這篇文章是我無聊的時候做了一個demo&#xff0c;覺得挺有趣&#xff0c;于是就發上來。這里面包含了4個內容&#xff1a;置換貼圖、頂點偏移、局部曲面細分&#xff0c;曲面細分按距離調整強度。 …

JVS低代碼表單設計:數據聯動詳解(多級數據級、數據回顯等)

在這信息化時代&#xff0c;表單作為數據的收集和展示工具&#xff0c;已經滲透到不同的角落。JVS低代碼對表單的設計和操作進行了不斷的優化和創新。其中&#xff0c;聯動回顯作為一項重要的功能&#xff0c;無論是多級數據級聯控制、組件的聯動控制&#xff0c;還是多表的數據…

【0基礎學Java第三課】-- 運算符

3. 運算符 3.1 什么是運算符3.2 算術運算符3.2.1 **基本四則運算符&#xff1a;加減乘除模( - * / %&#xff09;**3.2.2 增量運算符 - * %3.2.3 自增/自減運算符 -- 3.3 關系運算符3.4邏輯運算符(重點)3.4.1 邏輯與 &&3.4.2 邏輯 ||3.4.3邏輯非 !3.4.4 短路求值 3.5 …

DBS note4:Buffer Management

目錄 1、介紹 2、緩沖池 3、處理頁面請求 4、LRU替換和時鐘策略 1&#xff09;順序掃描性能 - LRU 5、最近最常使用替換策略&#xff08;MRU Replacement&#xff09; 1&#xff09;Sequential Scanning Performance - MRU 6、練習題 1&#xff09;判斷真假 2&#xf…

華清遠見嵌入式學習——網絡編程——作業4

作業要求&#xff1a;①使用IO多路復用中的select函數實現TCP并發服務器客戶端 ②使用IO多路復用中的poll函數實現TCP并發服務器的服務器端 一、 代碼 #include <myhead.h>#define SERPORT 8888 //服務器端口號 #define SERIP "192.168.114.113"…

Samsung下origen中uboot的配置與編譯

uboot的特點&#xff1a; n代碼結構清晰 n 支持豐富的處理器與開發板&#xff0c;易于移植 n 支持豐富的用戶命令 n 支持豐富的網絡協議 n 支持豐富的文件系統 n 支持豐富的設備驅動 n 更新活躍、用戶較多、資料豐富 n 開放源代碼 n 較高的穩定性 n 不具有通用性&#xff08;不…

JavaScript編程基礎 – 布爾值(Booleans)

JavaScript編程基礎 – 布爾值(Booleans) Javascript Programming Essentials – Booleans 一個JavaScript布爾值包含兩個值中的一個&#xff0c;即 true 或者 false。 本文簡要介紹JavaScript布爾值的具體應用&#xff0c;以及可能作為對象的布爾值等。 1. 布爾值(Booleans)…