Cypress與TestCafe WebUI端到端測(cè)試框架簡(jiǎn)介

TestCafe_Cypress

近期接觸了Cypress和TestCafe,兩個(gè)測(cè)試框架都基于Node.js,都不再使用Selenium+WebDriver,而且開箱即用,非常輕量級(jí),就沖著不再使用WebDriver這一點(diǎn),極大地勾起了我的好奇心。所以今天就來初略的學(xué)習(xí)一下,并以此文作為學(xué)習(xí)筆記。

本文學(xué)習(xí)筆記以Windows10 為背景,Mac 和 Linux請(qǐng)參考官網(wǎng)
.
注意: Cypress 和 TestCafe 都依賴Node.js,所以在學(xué)習(xí)之前確保電腦上已經(jīng)安裝了Node.js
本篇文章只是一個(gè)初略的Demo學(xué)習(xí)筆記,更多詳細(xì)內(nèi)容后期學(xué)習(xí)繼續(xù)更新文章。

安裝Node.js并配置npm環(huán)境變量

1、Node.js下載地址:https://nodejs.org/en/

在這里插入圖片描述

2、安裝路徑
在這里插入圖片描述

3、配置npm環(huán)境變量

在這里插入圖片描述

安裝Cypress

方法一: 直接使用命令安裝(cmd 安裝 會(huì)比較慢,還是建議選擇下面的第2種方式,直接下載安裝包來安裝。)

npm install cypress
在這里插入圖片描述

方法二: 或者去官網(wǎng)下載安裝包 https://www.cypress.io/
解壓后的文件如下,直接點(diǎn)擊Cypress.exe安裝文件啟動(dòng)即可

在這里插入圖片描述

啟動(dòng)運(yùn)行Cypress

方法一: 使用cmd命令行啟動(dòng)

(npm高于v5.2的版本中自帶npx, 或者你也可以單獨(dú)安裝npx.)

npx cypress open

在這里插入圖片描述

方法二: 如果是下載Cypress安裝包,解壓后的文件中直接點(diǎn)擊Cypress.exe安裝文件啟動(dòng)即可啟動(dòng)
在這里插入圖片描述

方法三:
在package.json文件中加入以下內(nèi)容之后,就可以使用 npm run cypress:open 來啟動(dòng)Cypress
比如我的package.json在 E:\WorkSpace\Ui_test\node_modules\cypress

{
  "scripts": {
    "cypress:open": "cypress open"
  }
}

在這里插入圖片描述

cd到上述文件夾E:\WorkSpace\Ui_test\node_modules\cypress下輸入 npm run cypress:open 即可啟動(dòng)Cypress。
在這里插入圖片描述

方法四: 當(dāng)然還有幾種方式啟動(dòng),請(qǐng)參考官網(wǎng)介紹;上面選擇了最方便的啟動(dòng)方式。

Cypress啟動(dòng)運(yùn)行界面

啟動(dòng)后的Cypress界面如下:
選擇項(xiàng)目地址,然后就可以繼續(xù)選擇并執(zhí)行項(xiàng)目里面的測(cè)試腳本。


在這里插入圖片描述

Cypress測(cè)試腳本與執(zhí)行

先來說一下文件結(jié)構(gòu):

|-- fixtures
|-- integration
|   `-- example_spec.js
|-- plugins
|   `-- index.js
`-- support
    |-- commands.js
    `-- index.js

fixtures 文件夾存放自定義 json 文件;
integration 文件夾編寫測(cè)試;
plugins 和 support 是非必須使用的文件夾,需要自定義指令的時(shí)候會(huì)用到。

添加自己的第一個(gè)測(cè)試用例

1、如果是cmd npm安裝的cypress, 用例腳本在\node_modules\cypress\cypress\integration\examples 文件下。
2、如果是下載解壓的cypress,用例腳本在\cypress\integration\examples文件下

新建sample_spec.js:

describe('My First Test', function () {
    it('Does not do much!', function () {
        cy.visit("https://www.baidu.com")
        cy.get("#kw").type("cypress test")
        cy.wait(60)
        cy.get("#su").click()
        cy.contains('cypress website').click()
    })
})

然后運(yùn)行Cypress可以看到如下圖,然后直接點(diǎn)擊js文件,運(yùn)行測(cè)試用例,將會(huì)啟動(dòng)Chrome運(yùn)行腳本。


在這里插入圖片描述

在這里插入圖片描述

安裝TestCafe

一個(gè)基于Node.js的WebUI自動(dòng)化端到端測(cè)試框架,使用JS或TypeScript編寫測(cè)試。

npm install -g testcafe #全局安裝模式

在這里插入圖片描述

更多安裝方式可參考官網(wǎng)
安裝之后使用測(cè)試命令測(cè)試一下是否安裝成功

testcafe chrome tests/

TestCafe創(chuàng)建一個(gè)簡(jiǎn)單的測(cè)試?yán)?/h2>

TestCafe允許使用JavaScript和TypeScript來編寫測(cè)試。

cd到你的項(xiàng)目文件下,要?jiǎng)?chuàng)建測(cè)試,請(qǐng)新建一個(gè)后綴名為.js或.ts文件。這個(gè)文件必須有一個(gè)特殊的結(jié)構(gòu)-測(cè)試必須組織到fixture中。
比如此處以sample.js 為例:
1、首先,導(dǎo)入·testcafe模塊

import { Selector } from 'testcafe';

2、然后使用fixture函數(shù)聲明一個(gè)fixture。

fixture `Getting Started`
    .page `http://devexpress.github.io/testcafe/example`;

3、然后,創(chuàng)建測(cè)試函數(shù)test,你可以在其中輸入測(cè)試代碼,之后保存為sample.js。

import { Selector } from 'testcafe';

fixture `Getting Started`
    .page `http://devexpress.github.io/testcafe/example`;

test('My first test', async t => {
    // Test code
});

TestCafe運(yùn)行測(cè)試腳本

在你的項(xiàng)目文件夾下,cmd切換到你指定目標(biāo)瀏覽器和文件路徑,即可運(yùn)行測(cè)試。

testcafe chrome sample.js

TestCafe將自動(dòng)打開所選的瀏覽器并在其中開始執(zhí)行測(cè)試。

查看測(cè)試結(jié)果

當(dāng)測(cè)試運(yùn)行時(shí),TestCafe收集關(guān)于測(cè)試運(yùn)行的信息,并在shell命令窗口中輸出報(bào)告。

CMD命令

啟動(dòng)的瀏覽器界面

有關(guān)如何配置測(cè)試運(yùn)行的詳細(xì)信息,可以參考官網(wǎng)

TestCafe編寫測(cè)試代碼

1、在頁(yè)面上執(zhí)行操作
每個(gè)測(cè)試都應(yīng)該能夠與頁(yè)面內(nèi)容交互。對(duì)于用戶要執(zhí)行的操作,TestCafe提供了:Click,hover, typetext,setFilesToUpload等等。他們可以叫做 鏈,操作鏈。

下面的fixture包含一個(gè)簡(jiǎn)單的測(cè)試,該測(cè)試在文本編輯器中鍵入開發(fā)人員名稱,然后單擊Submit按鈕。

import { Selector } from 'testcafe';

fixture `Getting Started`
    .page `http://devexpress.github.io/testcafe/example`;

test('My first test', async t => {
    await t
        .typeText('#developer-name', '軟測(cè)小生')
        .click('#submit-button');
});

所有的操作實(shí)現(xiàn)都使用對(duì)象控制器t的異步功能來實(shí)現(xiàn)。 此對(duì)象用于訪問測(cè)試運(yùn)行API。要等待操作完成,在調(diào)用這些操作或操作鏈時(shí)使用await關(guān)鍵字。

2、觀察頁(yè)面狀態(tài)
TestCafe允許測(cè)試人員觀察頁(yè)面狀態(tài)。為此,它提供了在客戶端上執(zhí)行代碼的特殊類型的函數(shù):Selector 用于直接訪問DOM元素,ClientFunction用于從客戶端獲取任意數(shù)據(jù)。你可以將這些函數(shù)作為常規(guī)的異步函數(shù)調(diào)用,也就是說,你可以獲得它們的結(jié)果并使用參數(shù)向它們傳遞數(shù)據(jù)。
Selector API提供方法和屬性來選擇頁(yè)面上的元素并獲取它們的狀態(tài)。

例如,單擊示例web頁(yè)面上的Submit按鈕將打開一個(gè)“謝謝”頁(yè)面;要訪問打開頁(yè)面上的DOM元素,就必須使用Selector函數(shù)。
下面的示例演示如何訪問文章標(biāo)題元素并獲取其實(shí)際文本。

import { Selector } from 'testcafe';

fixture `Getting Started`
    .page `http://devexpress.github.io/testcafe/example`;

test('My first test', async t => {
    await t
        .typeText('#developer-name', '軟測(cè)小生')
        .click('#submit-button');

    const articleHeader = await Selector('.result-content').find('h1');

    // 獲取文章標(biāo)題的文本
    let headerText = await articleHeader.innerText;
});

更多內(nèi)容可參考選擇頁(yè)面元素

3、斷言
一般而言,功能測(cè)試還應(yīng)該檢查執(zhí)行操作的結(jié)果。例如,“謝謝”頁(yè)面上的文章標(biāo)題應(yīng)該顯示為用戶輸入的名稱。要檢查頁(yè)面Title是否正確,必須向測(cè)試添加斷言:
下面的測(cè)試演示了如何使用內(nèi)置的斷言。

import { Selector } from 'testcafe';

fixture `Getting Started`
    .page `http://devexpress.github.io/testcafe/example`;

test('My first test', async t => {
    await t
        .typeText('#developer-name', '軟測(cè)小生')
        .click('#submit-button')

        // 使用斷言檢查實(shí)際的標(biāo)題文本是否等于預(yù)期的標(biāo)題文本
        .expect(Selector('#article-header').innerText).eql('Thank you, 軟測(cè)小生!');
});

總結(jié):
在接觸了Cypress和TestCafe之后,驚掉下巴,這兩個(gè)工具的輕量級(jí)之輕,與之前使用的Selenium相比,簡(jiǎn)直無法想象,從安裝到執(zhí)行第一個(gè)腳本,從上述的學(xué)習(xí)筆記中可以看出,10分鐘入門完全不是吹的。

遙想當(dāng)年Selenium+WebDriver的學(xué)習(xí)之路,可謂是很艱辛,也很復(fù)雜,很大原因也可能是由于那時(shí)是小白;再接觸到Cypress和TestCafe之后,愛不釋手,決定使用目前的項(xiàng)目來實(shí)施拓展一下。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 227,533評(píng)論 6 531
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 98,055評(píng)論 3 414
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事?!?“怎么了?”我有些...
    開封第一講書人閱讀 175,365評(píng)論 0 373
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我,道長(zhǎng),這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 62,561評(píng)論 1 307
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 71,346評(píng)論 6 404
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 54,889評(píng)論 1 321
  • 那天,我揣著相機(jī)與錄音,去河邊找鬼。 笑死,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 42,978評(píng)論 3 439
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 42,118評(píng)論 0 286
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 48,637評(píng)論 1 333
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 40,558評(píng)論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 42,739評(píng)論 1 369
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,246評(píng)論 5 355
  • 正文 年R本政府宣布,位于F島的核電站,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 43,980評(píng)論 3 346
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,362評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,619評(píng)論 1 280
  • 我被黑心中介騙來泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 51,347評(píng)論 3 390
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 47,702評(píng)論 2 370