Node.js學習筆記-05

10、測試

測試包含單元測試、性能測試、安全測試和功能測試等幾個方面,本章將從Node實踐的角度來介紹單元測試和性能測試。

10.1 單元測試

10.1.1 單元測試的意義

開發者自測。對于開發者而言,不僅要編寫單元測試,還應當編寫可測試代碼。
編寫可測試代碼原則:

  1. 單一職責
  2. 接口抽象
  3. 層次分離

10.1.2 單元測試介紹

1.斷言

2.測試框架

3.測試代碼的文件組織

4.測試用例

5.測試覆蓋率

6.mock

7.私有方法的測試

10.1.3 工程化與自動化

1.工程化

2.持續集成

10.1.4 小結

在這一節中,我們介紹了普通的單元測試的方方面面,對于一些特定場景下的單元測試方式并未做過多介紹比如測試Web應用等,讀者可以自行查看所用Web框架的測試方式,比如Connect或Express提供了supertest輔助庫來簡化單元測試的編寫。
在項目中經常會因為依賴方的變化而產生業務代碼的跟隨變動,如果沒有單元測試的覆蓋,依賴方邏輯發生變化后,很難定位該變動影響的范圍。一旦為項目覆蓋完善的單元測試項目的狀態將會因為測試報告而了然于心。完善的單元測試在一定程度上也昭示著項目的成熟度。

10.2 性能測試

單元測試主要用于檢測代碼的行為是否符合預期。在完成代碼的行為檢測后,還需要對已有代碼的性能作出評估,檢測已有功能是否能滿足生產環境的性能要求,能否承擔實際業務帶來的壓力。換句話說,性能也是功能。
性能測試的范疇比較廣泛,包括負載測試、壓力測試和基準測試等。由于這部分內容并非Node特有,為了收斂范疇,這里將只會簡單介紹下基準測試。
除了基準測試,這里還將介紹如何對Web應用進行網絡層面的性能測試和業務指標的換算。

10.2.1 基準測試

10.2.2 壓力測試

10.2.3 基準測試驅動開發

  1. 寫基準測試
  2. 寫/改代碼
  3. 收集數據
  4. 找出問題
  5. 回倒第2步

10.2.4 測試數據與業務數據的轉換

10.3 總結

測試是應用或者系統最重要的質量保證手段。有單元測試實踐的項目,必然對代碼的粒度和層次都掌握得較好。單元測試能夠保證項目每個局部的正確性,也能夠在項目迭代過程中很好地監督和反饋迭代質量。如果沒有單元測試,就如同黑夜里沒有秉燭的行走。
對于性能,在編碼過程中一定存在部分感性認知,與實際情況有部分偏差,而性能測試則能很好地斧正這種差異。

11、產品化

目前,在國內大多數人都將Node以實驗性質的方式來使用,國外已經有知名的項目將Node應用在實際的生產環境中,如eBay的數據中間層、Linkedin移動應用的服務器端等。本章將詳細介紹將Node產品化過程中需要注重的一些細節,這些細節其實是具備普適性的,并非Node所獨有。鑒于部分Node開發者可能從前端轉來,為了完善Node生態的介紹,所以添加了此章。盡管因為熟悉JavaScript,可以較好地上手Node,但是事實上從演示原型到產品還有較長的縫隙需要去填補。
在實際的產品中,需要很多非編碼相關的工作以保證項目的進展和產品的正常運行等,這些細節包括工程化、架構、容災備份、部署和運維等。只有這些任務在持續性進行,才表明項目是活著的。

11.1 項目工程化

所謂的工程化,可以理解為項目的組織能力。體現在文件上,就是文件的組織能力。對于不同類型的項目,其組織方式也有所不同。除此之外,還應當有能夠將整個項目串聯起來的靈魂性文件。
項目的組織就猶如行軍作戰的陣法和章法,混亂而無目的的軍隊幾乎不可能打勝仗,有其形有其魂的組織的生命周期才會更長,其形態才更穩固。
在項目工程化過程中,最基本的幾步是目錄結構、構建工具、編碼規范和代碼審查等。

11.2 部署流程

11.3 性能

11.4 日志

11.5 監控報警

11.6 穩定性

11.7 異構共存

11.8 總結

一般而言,決定用一項技術進行產品開發時,只有最早期是與這門技術完全相關的。隨著時間的遷移,要解決的已經不是原來的問題了,一門技術只能在一定層面上發揮出它的優勢來。用Node也是一樣,隨著開發的進展、涉及層面的增多,我們看到在產品的角度要解決的問題依然是大部分技術都要解決的問題。我們希望讀者能夠將Node納人到新的層面上進行考慮,使它更適應產品,在產品中發揮出更大的優勢來。

下一章介紹:搭建局域NPM倉庫

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

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

相關文章

高效解決Anaconda Prompt報錯Did not find VSINSTALLDIR這類問題

文章目錄 回憶問題解決問題step1step2 回憶問題 類似于劃紅線部分然后還有很多行的報錯信息,最后一行肯定是紅色劃線部分 解決問題 step1 找到 D:\Anaconda\envs\pytorch\etc\conda\activate.d在這個文件夾內會有兩個文件,刪除 vs2017_compiler_v…

【數據結構】 鏈表簡介與單鏈表的實現

文章目錄 ArrayList的缺陷鏈表鏈表的概念及結構鏈表的分類單向或者雙向帶頭或者不帶頭循環或者非循環 單鏈表的實現創建單鏈表遍歷鏈表得到單鏈表的長度查找是否包含關鍵字頭插法尾插法任意位置插入刪除第一次出現關鍵字為key的節點刪除所有值為key的節點回收鏈表 總結 ArrayLi…

uniapp封裝接口

uniapp封裝接口 在本篇技術博文中,我們將深入探討 Uniapp 框架中如何封裝接口,以簡化開發流程并提高效率。接口封裝是一種重要的開發策略,它不僅可以減少代碼量,還能提高代碼的復用性和維護性。 通過閱讀本文,你將深…

Observer和Dep以及wacher概念

Observer(觀察者): Observer用于將一個普通的JavaScript對象轉換為響應式對象。它遞歸地遍歷對象的所有屬性并使用Object.defineProperty將它們轉換為getter和setter。這樣,在屬性被獲取或修改時,就能夠觸發相應的操作…

8/18二叉樹的總結

二叉樹的遍歷方式: 遞歸前中后序144,145,94 二叉樹:前中后序遞歸法 (opens new window) 迭代法通過隊列模擬102 求二叉樹的屬性 101是否對稱,左數的外側和右數的外側比較,左樹的內側和右樹的內側比較 …

案例-基于MVC和三層架構實現商品表的增刪改查

文章目錄 0. 項目介紹1. 環境準備2. 查看所有2.1 編寫BrandMapper接口2.2 編寫服務類,創建BrandService,用于調用該方法2.5 編寫Servlet2.4 編寫brand.jsp頁面2.5 測試 3.添加3.1 編寫BrandMapper接口 添加方法3.2 編寫服務3.3 改寫Brand.jsp頁面&#x…

CMake教程6:調用lib、dll

之前我們學到了如何編寫一個可執行程序和Library,在繼續學習之前,需要解釋下target,在cmake中我們可以給executable和library設置一個target名字,這樣可以方便我們在后續對target進行更加詳細的屬性設置。 本節我們將學習如何在項…

利用logstash/filebeat/插件,將graylog日志傳輸到kafka中

1.graylog配置輸出 在System-outputs,選擇GELF Output,填寫如下內容,其它選項默認 在要輸出的Stream中,選擇Manage Outputs 選擇GELF Output,右邊選擇剛才創建好的test。 2.安裝logstash,作為中間臨時…

LeetCode 786. 第 K 個最小的素數分數

&#x1f517; 原題鏈接&#xff1a;786. 第 K 個最小的素數分數 本題可以暴力求解&#xff1a; class Solution { public:vector<int> kthSmallestPrimeFraction(vector<int>& arr, int k) {int n arr.size();vector<pair<int, int>> frac;for …

Vue使用jspdf和html2canvas組件庫結合導出PDF文件

效果圖&#xff1a; 1、安裝依賴&#xff1a; npm install html2canvas --save npm install jspdf --save 或 yarn add html2canvas --save yarn add jspdf --save 2、封裝全局調用方法&#xff1a;this.$exportPDF(#id,文件名) 新建js文件&#xff1a;/utils/html2Pdf.js&am…

在linux中,使用sh文件腳本啟動jar項目

使用方法 sh 執行腳本.sh [start|stop|restart|status]sh文件內容 APP_NAMEXXXX.jar#使用說明&#xff0c;用來提示輸入參數 usage() { echo "Usage: sh 執行腳本.sh [start|stop|restart|status]" exit 1 }#檢查程序是否在運行 is_exist(){ pidps -ef|grep $APP_N…

數據結構:選擇排序

簡單選擇排序 選擇排序是一種簡單直觀的排序算法。首先在未排序序列中找到最大&#xff08;最小&#xff09;的元素&#xff0c;存放到排序學列的其實位置&#xff0c;然后在剩余的未排序的元素中尋找最小&#xff08;最大&#xff09;元素&#xff0c;存放在已排序序列的后面…

高等數學:牛頓迭代發解方程

現在高數也要介紹牛頓法了&#xff0c;一般都是從幾何上直接以“切線法”直接引入的。這種引入方式的確很簡單&#xff0c;但如果脫離深入一點的分析就不大容易解釋后面的事情。所以就在想怎么更直接地從分析的角度來一條線貫穿&#xff0c;把整個過程說一說。 文章目錄 一、牛…

【深度學習】PyTorch快速入門

【深度學習】學習PyTorch基礎 介紹PyTorch 深度學習框架是一種軟件工具&#xff0c;旨在簡化和加速構建、訓練和部署深度學習模型的過程。深度學習框架提供了一系列的函數、類和工具&#xff0c;用于定義、優化和執行各種深度神經網絡模型。這些框架幫助研究人員和開發人員專注…

漏洞+常見漏洞修復建議

一、漏洞級別 高級別漏洞&#xff1a;大部分遠程和本地管理員權限漏洞 中級別漏洞&#xff1a;大部分普通用戶權限、權限提升、讀懂受限文件、遠程和本杜漏洞、拒絕服務漏洞 低級別漏洞&#xff1a;大部分遠程非授權文件存取、口令恢復、欺騙、信息泄露漏洞 二、漏洞掃描的…

Kotlin Lambda和高階函數

Lambda和高階函數 本文鏈接&#xff1a; 文章目錄 Lambda和高階函數 lambda輸出&#xff08;返回類型&#xff09;深入探究泛型 inline原理探究 高階函數集合、泛型自己實現Kotlin內置函數 擴展函數原理companion object 原理 > 靜態內部類函數式編程 lambda 1、lambda的由…

Flink流批一體計算(13):PyFlink Tabel API之SQL DDL

1. TableEnvironment 創建 TableEnvironment from pyflink.table import Environmentsettings, TableEnvironment# create a streaming TableEnvironmentenv_settings Environmentsettings.in_streaming_mode()table_env TableEnvironment.create(env_settings)# or create…

嵌入式Linux開發實操(九):CAN接口開發

前言: CAN網絡在汽車中的使用可以說相當廣泛。而CAN網絡需要的收發器最常用的就是NXP 的TJA1042: CAN網絡:

605. 種花問題

鏈接 假設有一個很長的花壇&#xff0c;一部分地塊種植了花&#xff0c;另一部分卻沒有。可是&#xff0c;花不能種植在相鄰的地塊上&#xff0c;它們會爭奪水源&#xff0c;兩者都會死去。給你一個整數數組 flowerbed 表示花壇&#xff0c;由若干 0 和 1 組成&#xff0c;其中…

8/16總結

WebSocket是雙向通信協議&#xff0c;模擬Socket協議&#xff0c;可以雙向發送或者接收信息 而Http是單向的 WebSocket是需要瀏覽器和服務器握手進行建立連接的 而http是瀏覽器發起向服務器的連接&#xff0c;服務器預先并不知道這個連接 WebSocket在建立握手時&#xff0c;數…