A. 前端自動化測試框架Jest 基礎入門-
一、引言
前端這幾年發展的非常迅速,我們的系統的功能正在變的越來越復雜,這對我們的前端工程化能力提出了更高的要求,聽到工程化,大家的第一反應肯定是高質量的代碼設計和高質量的代碼實現。
但實際上,前端 自動化測試 也是前端工程化裡面非常重要的一個環節。
二、 Jest 基礎入門
一個普通前端聽到自動化測試,第一反應可能是:我工作這么多年也沒寫過測試,這個東西有用嗎?
答:非常有用
如果你打開GitHub,去看一下流行的開源庫或者框架的源碼,你會發現,在這些源碼裡面,全部都包含了大量的自動化測試的代碼。比如antd、lodash、再比如vue、react、echarts、rex等等……
開源的工具需要穩定性,而引入前端自動化測試為開源項目提供穩定性,是再好不過的選擇了。
三、學習前提
閱讀這篇 文章 需要以下知識儲備:
·js、es6 基礎語法
·node、npm 相關知識
·git 的相關操作
·react或者vue,至少了解一個
·狀態管理工具,至少了解一個
四、背景及原理
首先在任意目錄下創建一個math.js文件,假設這個文件是一個數學庫,裡面定義兩個函數,分別是加法和減法:
// math.js
function add(a, b) {
return a + b;
}
function minus(a, b) {
return a - b;
}
這時候我們可以在業務代碼里去使用這個數學庫。
但是,假如,上面的minus函數我們不小心寫錯了,把減法寫成了乘法,如果直接在業務代碼中使用這個方法,就會帶來無法預期的bug。
所以這時候,我們就需要對math.js這個公共庫進行自動化測試,確保沒問題之後,再讓業務組件去調用,這樣就會保證不會出特別多的bug了。
我們可以這樣做:
在該目錄下創建一個math.test.js文件,然後寫一點測試代碼:
const result = add(3, 7);
const expect = 10;
if (result !== expect) {
throw new Error(`3 + 7 應該等於${expect},結果卻是${result}`);
}
const result = minus(3, 3);
const expect = 0;
if (result !== expect) {
throw new Error(`3 - 3 應該等於${expect},結果卻是${result}`);
}
這時候我們運行這段代碼,會發現沒有拋出任何異常,說明這兩個 測試用例 都通過了。
這就是自動化測試最原始的雛形。
然後我們思考一個問題,如何將這堆代碼進行簡化,做成一個公用的函數,比如這樣:
// 測試 3 + 3 是否等於 6
expect(add(3, 3)).toBe(6);
// 測試 3 - 3 是否等於 0
expect(minus(3, 3)).toBe(0);
expect 方法實現:
function expect(result) {
return {
toBe(actual) {
if (result !== actual) {
throw new Error("預期值和實際值不相等");
}
},
};
}
這時候我們運行這段代碼,會發現沒有拋出任何異常,說明這兩個測試用例都通過了。
雖然實現了 expect 函數,但是報錯的內容始終是一樣的,我們不知道是具體哪個方法出現了問題,這時候我們就會想到,我們需要將這個 expect 方法進一步做改良,我們如果能在 expect 方法外部再包裝一層,就可以多傳遞一些額外的內容,比如創造這樣的寫法:
test("測試加法 3 + 3", () => {
expect(add(3, 3)).toBe(6);
});
test("測試減法 3 - 3", () => {
expect(minus(3, 3)).toBe(0);
});
這樣封裝之後,我們既能進行測試,又能得到測試的描述。
test 方法實現:
function test(desc, fn) {
try {
fn();
console.log(`${desc} 通過測試`);
} catch {
console.log(`${desc} 沒有通過測試`);
}
}
所以前端自動化測試到底是什麼?
答:實際上就是寫了一段其它的用來測試的js代碼,通過測試代碼去運行業務代碼,判斷實際結果是否滿足預期結果,如果滿足,就是沒有問題,如果不滿足,就是有問題。
上面實現的 expect 方法 和 test 方法 實際上和主流的前端自動化測試框架 jest 裡面的語法是完全一致的。所以上面的示例代碼可以理解為 jest 的底層實現原理。
B. 前端網站常規優化方案
1、減少請求次數
2、減小資源大小
3、提高響應和載入速度
4、優化資源載入時機
5、優化載入方式
1、合並、壓縮、混淆html/css/js文件(webpack實現,減小資源大小)
2、Nginx開啟Gzip,進一步壓縮資源(減小資源大小)
3、圖片資源使用CDN加速(提高載入速度)
4、符合條件的圖標做base64處理(減小資源大小)
5、樣式表放首部,JS放尾部(JS單線程,會阻塞頁面;資源載入方式)
6、設置緩存(強緩存和協商緩存,提高載入速度)
7、link或者src添加rel屬性,設置prefetch或preload可預載入資源。(載入時機)
8、如果使用了UI組件庫,採用按需載入(減小資源大小)
9、SPA項目,通過import或者require做路由按需(減小資源大小)載入
10、服務端渲染SSR,加快首屏渲染,利於SEO
11、頁面使用骨架屏,提高首頁載入速度(提高載入速度)
12、使用 JPEG 2000, JPEG XR, and WebP 的圖片格式來代替現有的jpeg和png,當頁面圖片較多時,這點作用非常明顯
13、使用圖片懶載入-lazyload
C. 前端測試有哪幾種類型
目前在軟體系統開發中,測試是一個非常重要的環節,特別是前端測試,有幾種類型的測試被認為是前端測試所必需的,讓我們簡單了解一下。
01
單元測試
在修復bug或添加一點功能時,軟體的其他部分可能會停止工作。為了處理這種情況,單元測試將代碼的各個部分分開,以單獨檢查其准確性。跳過或最小化單元測試可能會導致修復缺陷的成本增加。Javascript單元測試包括一個套件中有組織的測試數量,這些測試彼此不沖突,並且相互之間的依賴性更少。
02
端到端測試
端到端測試涵蓋了應用程序從頭到尾的流程,結束測試跟蹤用戶的旅程,如打開瀏覽器、導航,並體驗完整的生產場景。端到端測試驗證互連系統和軟體系統,它包括一個完整的前端和後端系統。
03
集成測試
集成測試的目的是使模塊/組件按預期運行。集成測試技術應用於許多模塊緊密耦合的大型應用中,模塊被單獨測試,一旦集成,組合行為被驗證,它是與開發並行進行的。在集成測試中,您需要更多的邏輯技能,因為在測試期間,某些模塊可能尚未准備就緒或正在構建中。
集成時使用測試存根和驅動程序,集成測試將分析開發人員實現的邏輯是否遵循規定的標准。當模塊與第三方API交互時,查看響應非常重要。當開發人員跳過單元測試時,集成測試就不可避免了。
04
功能測試
功能測試,用於驗證應用程序或網站對目標用戶能正確工作。使用適當的平台、瀏覽器和測試腳本,以保證目標用戶的體驗將足夠好。功能測試是為了確保程序以期望的方式運行而按功能要求對軟體進行的測試,通過對一個系統的所有的特性和功能都進行測試確保符合需求和規范。
05
可視化/用戶界面測試
視覺/UI測試包括屏幕截圖的驗證。這是一項質量保證活動,旨在確保屏幕在任何設備、屏幕解析度、瀏覽器和操作系統上的外觀與預期一致。通過無頭瀏覽器中捕獲的不同屏幕截圖比較渲染版本的結果,可視化回歸測試允許您檢測偏差。
在構建應用程序時,事情會變得過載和復雜,這種情況很容易破壞現有的功能並引入新的bug—單元、行為和集成測試將到位,以使應用程序穩定。
06
性能/壓力測試
性能測試是一種非功能性技術,它在各種工作負載下檢查軟體的穩定性、響應性、速度、可靠性和資源使用等系統參數。
壓力測試:應用程序被重載以檢查意外行為並了解其承受能力。
為網站執行一個高質量的前端測試將提高生產力,並增加客戶對您的服務的依賴。了解趨勢通用模式並結合專家經驗來定義質量測試套裝是很重要的。
07
跨瀏覽器測試
Web端應用測試主要障礙之一就是在不同的瀏覽器上「測試他們的網站/應用程序」,也稱為「跨瀏覽器測試」或者「兼容性測試」。瀏覽器和瀏覽器版本很多(Google Chrome,Mozilla Firefox,Internet Explorer,Microsoft Edge,Opera,Yandex等),可以通過多種設備(通過台式機,筆記本,智能手機,平板電腦等)訪問網站/應用。)以及可能用於訪問網站的多種操作系統(Windows,MacOS,Linux,Android,iOS等)。
要確保網站的UI/UX及其功能正常運行,並且在「瀏覽器+瀏覽器版本+操作系統+設備配置」的組合上沒有任何BUG,則將需要大量的開發,測試和維護工作。
D. 前端(6)開發自己的組件庫+初步測試
使用vue的腳手架來搭建項目,這里使用webpack-simple模板
出現提示直接Enter確認即可
然後根據提示,運行上面後三行的命令,開始運行項目
根據下圖所示修改目錄結構,主要有兩處
這是一個最基本的Element-ui的入口文件,返回一個帶有install方法的對象
在按照 Element-ui 的目錄結構編寫完一套最基本的框架後,現在開始配置打包發布的文件 webpack.config.js 。我們需要修改項目的入口文件以及輸出配置
如果你想在發布之前簡單測試一下組件庫,可以進行如下操作:
1. 搭建自己的 vue 組件庫(三)—— npm 上面發布自己的組件庫
E. 前端如何提升開發效率
來具體聊一聊提高前端工程師開發效率的那些方法!
當然除了以上5點,對於前端來說需要提高開發效率的地方還有很多,可謂任重而道遠。希望以上幾點能夠給初識前端的同學帶來啟發並能夠親自實踐。
F. 常用的前端性能優化方法有哪些
常用的優化有兩部分
第一:面向內容的優化
1. 減少 HTTP 請求
2. 減少 DNS 查找
3. 避免重定向
4. 使用 Ajax 緩存
5. 延遲載入組件
6. 預先載入組件
7. 減少 DOM 元素數量
8. 切分組件到多個域
9. 最小化 iframe 的數量
10. 不要出現http 404 錯誤
第二:面向 Server
1. 縮小 Cookie
2. 針對 Web 組件使用域名無關性的
G. 前端怎麼優化大數據頁面
來源:前端的性能優化都有哪些東西?作者:野次前端性能優化是個巨大的課題,如果要面面俱到的