成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

關(guān)于 E2E 測試

jayzou / 4538人閱讀

摘要:與單元測試不同,后者通常需要測試參數(shù)參數(shù)類型參數(shù)值參數(shù)數(shù)量返回值拋出錯誤等,目的在于保證特定函數(shù)能夠在任何情況下都穩(wěn)定可靠完成工作。單元測試假定只要所有函數(shù)都正常工作,那么整個產(chǎn)品就能正常工作。

上一篇文章發(fā)布后,竟然收獲到一些同學(xué)的注意,實(shí)在是意外之喜。不過我也發(fā)現(xiàn),很多同學(xué)對 E2E 測試不夠了解,正好我廠的產(chǎn)品也沒做到能作為商用版發(fā)布的程度,所以這篇再來聊聊 E2E 測試吧。

本文的測試均指自動化測試。

E2E,是“End to End”的縮寫,可以翻譯成“端到端”測試。它模仿用戶,從某個入口開始,逐步執(zhí)行操作,直到完成某項工作。與單元測試不同,后者通常需要測試參數(shù)、參數(shù)類型、參數(shù)值、參數(shù)數(shù)量、返回值、拋出錯誤等,目的在于保證特定函數(shù)能夠在任何情況下都穩(wěn)定可靠完成工作。單元測試假定只要所有函數(shù)都正常工作,那么整個產(chǎn)品就能正常工作。

相對來說,E2E 測試并沒有那么強(qiáng)調(diào)要覆蓋全部使用場景,它關(guān)注的是 一個完整的操作鏈?zhǔn)欠衲軌蛲瓿?/strong>。對于 Web 前端來說,還關(guān)注 界面布局、內(nèi)容信息是否符合預(yù)期。

比如,登陸界面的 E2E 測試,關(guān)注用戶是否能夠正常輸入,正常登錄;登陸失敗的話,是否能夠正確顯示錯誤信息。至于輸入不合法的內(nèi)容是否處理,沒有很大的關(guān)系。

Web 前端 E2E 測試的現(xiàn)狀

Web 前端 E2E 自動化測試開展得不好。在我從業(yè)的這十幾年里,大部分產(chǎn)品的前端 E2E 測試都交給測試人員手工完成。我們稍稍分析一下,大概有三個原因:

1. 測試環(huán)境不好搭

單元測試也好、接口測試也好,測試環(huán)境都很容易搭建。然而 Web 前端測試如果想達(dá)到目的,需要完整的桌面操作系統(tǒng)和瀏覽器環(huán)境,這種面向普通用戶的軟件對自動化工具并不友好。對系統(tǒng)要求也比較高,很難整合到開發(fā)測試工具鏈檔中。

解決方案當(dāng)然是有的,目前最流行的應(yīng)該是 Selenium WebDriver。不過對于小公司、小團(tuán)隊來說,在并不豐富的資料中摸著石頭過河實(shí)在不夠經(jīng)濟(jì),而且,還有接下來的兩個問題。

2. 測試不好寫。

目前的 Web 前端 E2E 測試工具局限于 XPath 技術(shù)棧。大家用選擇器查找 DOM 節(jié)點(diǎn),校驗(yàn)其屬性和內(nèi)容,接著進(jìn)行交互。這樣做導(dǎo)致一個必然后果:寫測試的人員對頁面的 DOM 結(jié)構(gòu)必須了如指掌,才能用準(zhǔn)確目標(biāo)元素。

同時,在這個技術(shù)環(huán)境下寫就的測試用例,一旦 DOM 結(jié)構(gòu)出現(xiàn)變化,就要大規(guī)模的修改,甚至重寫。工作量很大,而且存在一些不穩(wěn)定因素。跟某團(tuán)隊 Leader 聊天,他就很擔(dān)心漫長的迭代過程中,DOM 結(jié)構(gòu)變化導(dǎo)致測試用例失效,繼而引發(fā)項目排期混亂。

結(jié)果,Web 前端 E2E 測試用例的只能由前端用 JS 寫,工作量大,維護(hù)負(fù)擔(dān)重,且存在一些風(fēng)險。大家都不愿意寫。

3. 有些東西不好測

隨著用戶對產(chǎn)品的要求水漲船高,頁面邏輯越來越復(fù)雜,功能越發(fā)依賴 Ajax,甚至和后端徹底分離,成為單頁應(yīng)用(SPA)。這類產(chǎn)品與傳統(tǒng)的靜態(tài)頁服務(wù)不同,我們沒法偵聽 DOMReady 事件,也就難以找到合適的時間點(diǎn)啟動測試。

早些時候,我們只能依靠 setInterval() 輪詢。如今,通過 Puppeteer 或者瀏覽器擴(kuò)展都可以監(jiān)聽網(wǎng)絡(luò)連接,可以根據(jù)當(dāng)前保持的連接數(shù)來判斷請求是否完成。

不過這些做法仍然存在不小的實(shí)施難度。

4. 預(yù)期收益一般

我跟很多技術(shù)老大聊過。大家的回答都是:沒寫,沒空,招測試。在加班成為常態(tài)的今天,在“看得到”的工作之外,再去做這些“看不到”的工作,實(shí)在有些吃力不討好。另一方面,測試寫得少,覆蓋率跟不上,還是得招測試,人工測試。

惡行循環(huán)就此產(chǎn)生:不想寫導(dǎo)致沒測試;那就招測試人員;有了專職測試我還寫什么測試……所以大家都不寫測試了。

對于中等以上規(guī)模的技術(shù)團(tuán)隊,招幾個測試也還行。對于整個公司就只有幾個人的創(chuàng)業(yè)團(tuán)隊來說,大多數(shù)時候只能裸奔……

更好的 Web 前端 E2E 測試工具

行文至此,結(jié)論就很明顯了:我們需要全新的、更高級的 Web 前端 E2E 測試工具。這個工具需要同時滿足:

1. 有效

可以準(zhǔn)確地描述 UI 的結(jié)構(gòu)

可以盡量全面的模擬用戶真實(shí)操作

覆蓋多種操作系統(tǒng)、適配各種瀏覽器

2. 使用成本低

測試用例應(yīng)該盡量簡短,用最少的代碼描述出 UI,完成交互。

測試用例應(yīng)該和 DOM 實(shí)現(xiàn)解耦,用的盡量久,能不改就不改。

測試用例應(yīng)該讓所有人都學(xué)得會,寫得通

3. 提高開發(fā)效率

應(yīng)該提供方便易用的編寫、測試環(huán)境,讓用戶可以輕松上手

需要能夠和常見的 CI 系統(tǒng)集成

我廠的解決方案

最后回到我廠。

我們設(shè)計了一個全新的語言用來描述 UI,叫做 Navlang。我們可以用它描述各元素的相對位置,操作元素進(jìn)行交互。

它是一個描述性語言,只包含很簡單的邏輯——實(shí)際上 E2E 測試也不需要多復(fù)雜的邏輯,跑不通就是掛了,跑通了就沒問題。這樣一來,任何人,只要經(jīng)過簡單的培訓(xùn),都可以寫出正確的測試用例。(HTML 就是最好的例子。前端很多都是頁面仔出身,比如我,相信大家對這類語言的易學(xué)易用都有所了解。)

因?yàn)槭钦Z言,所以它可以寫成代碼,可以被版本管理;因?yàn)槭切碌某橄?,所以它不?DOM 實(shí)現(xiàn)耦合,可以被反復(fù)使用,幾乎沒有維護(hù)成本。(只有界面變化才需要修改測試用例,此時無論如何都要修改測試用例)

目前這個工具已經(jīng)在我廠的開發(fā)體系中工作將近一年,為我廠產(chǎn)品的穩(wěn)定做出了非常重大的貢獻(xiàn)。

功能化之外,我們也在作產(chǎn)品化和商品化的努力。目前已經(jīng)基本完成瀏覽器擴(kuò)展功能,讓普通用戶可以通過瀏覽器擴(kuò)展編寫和運(yùn)行測試。接下來,我們還會提供基于 Node.js 的測試工具框架,幫助大家將測試集成到現(xiàn)有的 CI 系統(tǒng)當(dāng)中。

未來,這款產(chǎn)品會服務(wù)廣大小型公司和小型團(tuán)隊,幫助大家提升 Web UI 測試的效率。

好了,敬請期待下周的 Navlang 介紹吧。

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/8944.html

相關(guān)文章

  • cypress進(jìn)行e2e測試之理論

    摘要:進(jìn)行測試之理論是目前很火的一個測試組件,內(nèi)部綁定了之類的斷言為了讓代碼代碼更有說服力,減少提交測試錯誤,進(jìn)行測試顯然是非常有必要的。 cypress 進(jìn)行 e2e 測試之理論 cypress 是目前 e2e 很火的一個測試組件,內(nèi)部綁定了 macha、chai、chai-jquery 之類的斷言,為了讓代碼代碼更有說服力,減少提交測試錯誤,進(jìn)行 e2e 測試顯然是非常有必要的。 官網(wǎng)...

    chnmagnus 評論0 收藏0
  • Vue Cli安裝以及使用

    摘要:單元測試前端的單元測試目前有兩個比較熱的框架,一個是的方式,一個是。小伙伴們不用急,關(guān)于單元測試這塊,我會找時間寫博客的。首先前端的測試分為兩種,一個是單元測試,另一個就是測試了。? ? ? ? 因?yàn)楣卷椖恳胿ue框架,所以會用vue-cli來新建項目。用過vue的都知道,要全局安裝vue以及腳手架vue-cli,然后執(zhí)行vue init webpack projectname來新建vu...

    lemanli 評論0 收藏0
  • 利用 Rize 來進(jìn)行 UI 測試E2E 測試

    摘要:約定我們假定要被測試的頁面是這樣的標(biāo)題開始編寫測試首先是導(dǎo)入。我們推薦使用的語法當(dāng)然您也可以用方式第一件事是構(gòu)造一個實(shí)例然后要轉(zhuǎn)到要被測試的頁面。 之前我曾經(jīng)在《Rize - 一個可以讓你簡單、優(yōu)雅地使用 puppeteer 的 Node.js 庫》一文簡單介紹過 Rize 這個庫。當(dāng)時僅僅是介紹這個庫本身,關(guān)于如何使用,我沒有給太多的指導(dǎo)。 這篇文章講的是如何使用 Rize 來做 U...

    Coding01 評論0 收藏0
  • 利用 Rize 來進(jìn)行 UI 測試E2E 測試

    摘要:約定我們假定要被測試的頁面是這樣的標(biāo)題開始編寫測試首先是導(dǎo)入。我們推薦使用的語法當(dāng)然您也可以用方式第一件事是構(gòu)造一個實(shí)例然后要轉(zhuǎn)到要被測試的頁面。 之前我曾經(jīng)在《Rize - 一個可以讓你簡單、優(yōu)雅地使用 puppeteer 的 Node.js 庫》一文簡單介紹過 Rize 這個庫。當(dāng)時僅僅是介紹這個庫本身,關(guān)于如何使用,我沒有給太多的指導(dǎo)。 這篇文章講的是如何使用 Rize 來做 U...

    yimo 評論0 收藏0
  • 利用 Rize 來進(jìn)行 UI 測試E2E 測試

    摘要:約定我們假定要被測試的頁面是這樣的標(biāo)題開始編寫測試首先是導(dǎo)入。我們推薦使用的語法當(dāng)然您也可以用方式第一件事是構(gòu)造一個實(shí)例然后要轉(zhuǎn)到要被測試的頁面。 之前我曾經(jīng)在《Rize - 一個可以讓你簡單、優(yōu)雅地使用 puppeteer 的 Node.js 庫》一文簡單介紹過 Rize 這個庫。當(dāng)時僅僅是介紹這個庫本身,關(guān)于如何使用,我沒有給太多的指導(dǎo)。 這篇文章講的是如何使用 Rize 來做 U...

    Lin_R 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<