摘要:進行測試之理論是目前很火的一個測試組件,內(nèi)部綁定了之類的斷言為了讓代碼代碼更有說服力,減少提交測試錯誤,進行測試顯然是非常有必要的。
cypress 進行 e2e 測試之理論
cypress 是目前 e2e 很火的一個測試組件,內(nèi)部綁定了 macha、chai、chai-jquery 之類的斷言,為了讓代碼代碼
更有說服力,減少提交測試錯誤,進行 e2e 測試顯然是非常有必要的。
官網(wǎng)
GitHub
借鑒官網(wǎng)一句話來說:
Cypress is a next generation front end testing tool built for the modern web. We address the key本文環(huán)境
pain points developers and QA engineers face when testing modern applications.
node v9.5 npm v5.5e2e 簡介
e2e 測試端對端測試的簡稱, e2e 即為end to end,
指任意一個人的社交、交易、休閑都可以直接與另外任意一個人產(chǎn)生關(guān)系,去中心化、渠道化.
做前端怎么少的多的了 npm 呢
$ npm i -D cypress
然后為了方便起見,咱們在package.json中寫入下面腳本:
{ "scripts": { "e2e:open": "cypress open", "e2e:run": "cypress run" } }
運行npm run e2e:open,啟動一個 cypress 的服務器,如下:
如下圖這就完成了一個啟動一個 cypress。第一次點開時候,cypress 會幫你創(chuàng)建一個初始化配置目錄,這是
cypress 推薦的目錄的結(jié)構(gòu),當然也可以自己創(chuàng)建。
點擊 example_spec.js 文件,然后可以看到如下界面,cypress 開始測試:
上面就看到 cypress 的運行過程了。下面看看 example_spec.js(文件的位置
:projectName/cypress/integration)文件中寫了啥:
describe("Kitchen Sink", function() { it(".should() - assert thatis correct", function() { // ... } })
這是主要結(jié)構(gòu)的,下面大部分都是在一個it函數(shù)內(nèi)部,是測試里面的回調(diào)函數(shù)。詳細可以查看 TDD 和 BDD 測試
框架,cypress 綁定了這些測試框架。
這是 cypress 里面一個很重要的方法,可以訪問一個鏈接,列入 example.js 文件如下:
beforeEach(function() { // Visiting our app before each test removes any state build up from // previous tests. Visiting acts as if we closed a tab and opened a fresh one cy.visit("https://example.cypress.io/commands/querying") })
這里就是在前置鉤子函數(shù)里面訪問了https://...../querying這個鏈接。如果代碼需要瀏覽器調(diào)試,比如用戶交
互點擊,用戶輸入之類的。第一步就是訪問:cy.visit
還是從 example_spec.js 問中說起:
it("cy.get() - query DOM elements", function() { // https://on.cypress.io/get // Get DOM elements by id cy.get("#query-btn").should("contain", "Button") // Get DOM elements by class cy.get(".query-btn").should("contain", "Button") cy.get("#querying .well>button:first").should("contain", "Button") // ? // Use CSS selectors just like jQuery })
這里定義了一個測試單元,在這個里面做了啥呢?第一步獲取 id 為 query-btn 這個按鈕。接下來 should 操作
,奉上一張表自行查看:
cy.get 還有一個玩法就是 cy.get("@app")這種,意思說之前你已經(jīng)cy.get(".app").as("app"),不需要再次獲
取了,直接使用別名就好了
從官網(wǎng)截圖的表格,詳
細jquery-chai 文檔表格
這里看到cy.get()和jquery.$是不是很像,在官網(wǎng)這里說了這樣一句話:
The querying behavior of this command matches exactly how $(…) works in jQuery.
所以可以將 cy.get()當$一樣來用即可,不過這里返回的不過 jquery 對象罷了,這里返回的事通過 cypress 包
裝過的對象可以在控制臺看到這樣的東西,見下圖:
是一個用于 cypress 所有方法的對象。然后可以操作他的 api 了。
第一部分,主要是查詢,查詢頁面元素是否按照我們開發(fā)想要的存在,下面看第二部分:
context("Actions", function() { beforeEach(function() { cy.visit("https://example.cypress.io/commands/actions") }) // Let"s perform some actions on DOM elements // https://on.cypress.io/interacting-with-elements it(".type() - type into a DOM element", function() { // https://on.cypress.io/type cy .get(".action-email") .type("fake@email.com") .should("have.value", "fake@email.com") // .type() with special character sequences .type("{leftarrow}{rightarrow}{uparrow}{downarrow}") .type("{del}{selectall}{backspace}") // .type() with key modifiers .type("{alt}{option}") //these are equivalent .type("{ctrl}{control}") //these are equivalent .type("{meta}{command}{cmd}") //these are equivalent .type("{shift}") // Delay each keypress by 0.1 sec .type("slow.typing@email.com", { delay: 100 }) .should("have.value", "slow.typing@email.com") cy .get(".action-disabled") // Ignore error checking prior to type // like whether the input is visible or disabled .type("disabled error checking", { force: true }) .should("have.value", "disabled error checking") }) })
這一部分主要是進行獲取元素交互, 下面來說交互是如何搞得。 與 cy.get 相似還有:
cy.contains 通過文本獲取元素
cy.closet 見 jqery
cy.next/cy.nextAll 可以和 cy.contains 聯(lián)合使用獲取該節(jié)點的下一個節(jié)點
cy.prev/cy.prevAll 同上
cy.children/cy.parents/cy.parent 獲取子節(jié)點/ 所有的父節(jié)點 / 父節(jié)點
cy.first/cy.last
cy.url 獲取當前頁面 url
cy.title 獲取當前頁面標題
... API 挺多的,同樣奉
上api 文檔
既然要交互肯定需要點擊輸入滾動,可以還存在拖拽等等。咱們就暫時從輸入開始說起啦
cy.type這不是一個可以直接使用的方法,要配合cy.get使用的,作用是給空間進行輸入。例如:
測試輸入例如 text, textareacy.get("input").type("hello world")測試 tabIndex
This is TabIndex div.
cy.get(".el").type("laldkadaljdkljasf") // 這個里面是隨機字符串測試 input 為日期的
cy.get("input[type=date]").type("2008-8-9")鍵盤綁定
下面直接是對 input 進行組合鍵盤操作
cy.get("input").type("{shift}{alt}Q")
按住鍵盤操作
cy.get("input").type("{alt}這里是按了一下alt后輸入的內(nèi)容")
還有長按鍵盤之類的操作,詳細就看官網(wǎng)了這里之類奉上鏈
接https://docs.cypress.io/api/commands/type.html#Key-Combinations
這里就是關(guān)于鍵盤的組合操作。
對于選擇例如 radio, checkbox這些就只需要利用點擊事件即可,如下:
cy .get("input[type=radio]") .as("radio") .click() cy.get("@radio").should("be.checked")定時 cy.wait
下面是等待 1s
cy.wait(1000)cy.clock 和 cy.tick
自己的代碼:
var seconds = 0 setInterval(() => { $("#seconds-elapsed").text(++seconds + " seconds") }, 1000)
測試代碼
cy.clock() cy.visit("/index.html") cy.tick(1000) cy.get("#seconds-elapsed").should("have.text", "1 seconds") cy.tick(1000) cy.get("#seconds-elapsed").should("have.text", "2 seconds")
這里就會出現(xiàn)關(guān)于 clock 和 tick
的用法,更多用法看文檔,我也有部分迷惑的。待后來再解決。老規(guī)矩文檔地址:
地址
先復制一段出來:
{ "baseUrl": "http://localhost:8080", "pageLoadTimeout": 3000, "viewportHeight": 667, "viewportWidth": 375 }
這是一個非常精簡的配置了:
baseUrl 基礎(chǔ)鏈接,之后在是使用 cy.visit 的時候,只需要訪問具體路由例如: cy.visit("/Hello")
viewport 兩個屬性
viewportHeight 測試窗口的高度
viewportWidth 測試窗口的寬度
pageLoadTimeout 頁面家安在超過 3000ms 即為超時。
總結(jié)上面是 cypress 的基本用法,cypress 是基于 electron 的一個測試框架,提供 web 環(huán)境進行點對點的測試,在
programer 思維下,進行自動化的交互操作,必要點檢測說明,這是一個非常棒的用處。例如之后擁有數(shù)據(jù)埋點,
可以在固定的位置檢測是否有埋點。測試想要的地方是否匹配的數(shù)據(jù)。模擬用戶的點擊操作,這都是非常棒的。在
jquery 操作年代,各種 id 和 class 奇怪命名下,這些都可以容易找到,在 vue 和 react 大行其道的年代,但
是卻可以通過文本尋找節(jié)點。這也是非常棒的體驗,更多秘密需要去體驗,奉上官方地址
:官網(wǎng) cypress
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/94633.html
摘要:是一款開箱即用可以跑在瀏覽器上的測試工具。同樣,測試了也可以直接調(diào)試。這個時候我們的測試文件就可以訪問了,點擊之后發(fā)現(xiàn)他需要我們編寫測試用例,那么接下來就手把手教你編寫基本的測試用例。 What is E2E? 所謂的E2E就是end-to-end。 假設(shè)我們編寫的每個功能程序都是一個黑匣子,最終用戶也只會看到這個黑匣子,那么站在用戶的角度來看并不需要知道這個黑匣子內(nèi)部是什么東西也不...
摘要:上也有幾個臨時方案,目前我傾向使用自帶的來查看。在打開的測試的瀏覽器中打開切到按下用戶按,輸入,選擇重新刷新并統(tǒng)計代碼執(zhí)行覆蓋率。那么,起來為了高撩質(zhì)測量試代碼,起來。 不很久不很久以前 據(jù)說某家公司有兩位前端,天天擼bug,為啥嘞?只怪測試MM傾人國,輕語哥哥有bug。?(??????)?? 可是最近兩位有點犯愁 Σ(っ °Д °;)っ。測試MM有幾次提了緊急bug,都在旁邊鼓勵他們...
摘要:閱讀原文目前測試工具有哪些項目不需要不需要端到端測試一般都需要一個容器,來運行前端應用。向快速,一致和可靠的無剝落測試問好。 閱讀原文 1. 目前E2E測試工具有哪些? 項目 Web Star puppeteer Chromium (~170Mb Mac, ~282Mb Linux, ~280Mb Win) 31906 nightmare Electron 15502 ...
摘要:使用可以快速生成一個項目,其中包含了和以及覆蓋率統(tǒng)計的配置參考一個創(chuàng)建測試腳本的快速方法其他參考資料前端自動化測試概覽測試之使用對項目進行單元測試 showImg(https://segmentfault.com/img/bVbjfXr?w=600&h=317); 前言 測試可以提供快速反饋,根據(jù)測試用例覆蓋代碼,從而提升代碼開發(fā)效率和質(zhì)量。根據(jù)投入產(chǎn)出價值,通常迭代較快的業(yè)務邏輯不做...
閱讀 3599·2021-09-13 10:28
閱讀 1948·2021-08-10 09:43
閱讀 1022·2019-08-30 15:44
閱讀 3193·2019-08-30 13:14
閱讀 1850·2019-08-29 16:56
閱讀 2947·2019-08-29 16:35
閱讀 2854·2019-08-29 12:58
閱讀 872·2019-08-26 13:46