簡介
《測試工程師全棧技術(shù)進(jìn)階與實踐》是2020年4月人民郵電出版社出版的圖書拯腮,作者是茹炳晟.
本書系統(tǒng)地梳理軟件測試知識體系,深入講解自動化測試、移動應(yīng)用測試、性能測試和測試基礎(chǔ)架構(gòu)設(shè)計的核心原理轧钓。通過一系列行業(yè)實踐案例的講解,呈現(xiàn)一副包括GUI/API自動化測試锐膜、移動應(yīng)用測試毕箍、測試數(shù)據(jù)平臺、測試基礎(chǔ)架構(gòu)枣耀、性能/壓力測試霉晕、代碼級測試、測試新技術(shù)和大型網(wǎng)站架構(gòu)等在內(nèi)的軟件測試技術(shù)全景圖捞奕。
讀后筆記
因個人對軟件測試了解的廣度不夠,通過這本書可以比較系統(tǒng)的拓展知識面拄轻。筆記主要分成2種方式: markdown 和xmind
軟件測試的基礎(chǔ)知識
軟件測試工程師
核心競爭力
傳統(tǒng)測試工程師
測試開發(fā)工程師
掌握非測試知識
迷你版的系統(tǒng)架構(gòu)師
網(wǎng)絡(luò)架構(gòu)的核心知識
容器技術(shù)
云計算技術(shù)
DevOps思想
前端開發(fā)技術(shù)
軟件測試
“好的”測試用例
定義:一個完備的集合颅围,能夠覆蓋所有的等價類和邊界值的集合
特征
整體完備性
等價類劃分的準(zhǔn)確性
等價類集合的完備性
設(shè)計方法
等價類
錯誤推測法, “探索式測試方法”
經(jīng)驗
具體實踐:建立常見缺陷知識庫恨搓,在用例設(shè)計過程中院促,使用缺陷知識庫作為檢查表(checklist),幫助優(yōu)化和補充測試用例的設(shè)計斧抱。
自動化測試的原始驅(qū)動力和使用場景
軟件開發(fā)各個階段的自動化測試
單元測試的自動化技術(shù)
代碼級集成測試的自動化技術(shù)
Web Service 測試的自動化技術(shù)
GUI測試的自動化技術(shù)
測試覆蓋率
需求覆蓋
代碼覆蓋
高效的撰寫軟件缺陷報告
缺陷報告
標(biāo)題常拓,概述,影響辉浦,環(huán)境配置弄抬,前置條件,重現(xiàn)步驟宪郊,期望結(jié)果和實際結(jié)果掂恕,優(yōu)先級和嚴(yán)重程度,變通方案
根原因分析
以始為終弛槐,做好軟件測試計劃
測試范圍
測試策略
測試進(jìn)度
測試風(fēng)險把控
互聯(lián)網(wǎng)產(chǎn)品的測試策略設(shè)計(單元測試懊亡,API測試,GUI測試)
背景:研發(fā)流程的不同決定了測試策略的不同
傳統(tǒng)軟件測試策略:金字塔模型(重量級單元測試> API測試> GUIC測試)
互聯(lián)網(wǎng)產(chǎn)品的測試策略:棱形模型(重量級 API測試乎串,輕量級GUI/單元測試)
GUI 自動化測試的精要
從 0 到1: GUI自動化測試初探
例子:構(gòu)建一個Selenium自動化測試用例
Selenium的實現(xiàn)原理
效率為王:
測試腳本和測試數(shù)據(jù)的解耦
頁面對象模型
更接近業(yè)務(wù)的抽象:讓自動化更好的描述業(yè)務(wù)
測試數(shù)據(jù)
基于API調(diào)用創(chuàng)建測試數(shù)據(jù)
基于數(shù)據(jù)庫操作創(chuàng)建
綜合運用API調(diào)用和數(shù)據(jù)庫操作創(chuàng)建
實時創(chuàng)建
事先創(chuàng)建
實時和事先創(chuàng)建的互補
GUI測試還能這么“玩”
自動生成頁面對象
自動生成GUI測試數(shù)據(jù)
無頭瀏覽器介紹
Headless chrome與Puppeteer的使用
精益求精
提高GUI 測試穩(wěn)定性的關(guān)鍵技術(shù)
非預(yù)計的彈出對話框
被測試系統(tǒng)的A/B測試
隨機的頁面延遲造成控件識別失敗
測試報告
早期的基于視頻的GUI測試報告
開源GUI測試框架的測試報告實現(xiàn)思想
全球化的GUI測試報告的創(chuàng)新設(shè)計
案例:大型全球化電商網(wǎng)站
前端模塊的劃分
GUI自動化測試策略設(shè)計
前端組件測試
前端模塊的測試
端到端的測試
GUI自動化測試腳本的管理
如:前端模塊A(模塊級測試用例店枣,業(yè)務(wù)流程腳本,頁面對象)
移動應(yīng)用測試技術(shù)
種類
Web應(yīng)用
原生應(yīng)用
混合應(yīng)用
測試方法概論
Web應(yīng)用的測試
原生應(yīng)用的測試
混合應(yīng)用的測試
移動應(yīng)用的測試難點
專項測試
安裝,卸載
特殊操作測試
交互測試
通知測試
交叉事件測試
兼容性測試
流量測試
耗電量測試
弱網(wǎng)絡(luò)測試
邊界測試
測試工具: Appium(最主要依賴java鸯两,Node,js闷旧,Xcode, Carthage甩卓,Android SDK鸠匀,adb)
-
Appium的實現(xiàn)原理(C/S架構(gòu))
Appium客戶端通過多語言支持的第三方庫向服務(wù)端發(fā)起請求,基于Node.js的Appium服務(wù)端會接受客戶端的請求逾柿,接著和iOS或者Android平臺上的代理工具打交道缀棍,代理工具在運行過程中不斷接收請求,并根據(jù)WebDriver協(xié)議解析出要執(zhí)行的操作机错,最后調(diào)用iOS或者Android平臺的原生測試框架完成測試
服務(wù)端
Mac和window版本
客戶端:測試代碼運行端
設(shè)備端
Appium Inspector的使用
用途:協(xié)助對界面元素進(jìn)行定位的工具
企業(yè)級移動應(yīng)用測試框架的設(shè)計思想和實踐
-
設(shè)計思想:面向?qū)ο?/p>
重要部分:PageObject, MobileElement, WebDriver,Reporter, TestPlan和Flow
實踐:接口對不同的平臺要統(tǒng)一封裝爬范;完善的日志(時間戳,類型弱匪,關(guān)鍵信息)青瀑;測試報告
移動應(yīng)用測試框架的實現(xiàn)和實踐
TestPlan層:提供Assertion和log等工具,用戶可以用這2個工具驗證測試和輸出日志萧诫, Reporter會在篩選測試的步驟斥难,驗證結(jié)果和日志分析后渲染測試報告
Element層:封裝各種不同的元素,供TestPlan調(diào)用
View層:封裝頁面對象帘饶,將一對端的石頭封裝成頁面哑诊,方便測試腳本的編寫。
BasicPage:isPageLoaded()及刻,pinch()镀裤,swipe(),waitForElement, captureSnapshot(),,,
搭建企業(yè)級移動測試私有云的實踐
Selenium Grid基本架構(gòu): hub+node
Open STF:基于nodejs編寫的遠(yuǎn)程管理android智能設(shè)備的工具
移動運用云測試服務(wù)介紹
Sauce Labs
Testin
MTC:mobile testing center
百度提供:云測試,云調(diào)試缴饭,云眾測暑劝,線上監(jiān)控,測試工具和移動應(yīng)用質(zhì)量標(biāo)準(zhǔn)等服務(wù)
API自動化測試技術(shù)
從0到1:API測試初探
復(fù)雜場景的API測試
API自動化測試框架的技術(shù)演進(jìn)和創(chuàng)新
微服務(wù)模式下的API測試
單體架構(gòu)
微服務(wù)架構(gòu)
微服務(wù)架構(gòu)下的挑戰(zhàn)測試
基于消費者契約的API測試
微服務(wù)的依賴解耦和模擬服務(wù)
代碼級軟件測試基礎(chǔ)和進(jìn)階
代碼級測試的基本理念和方法
常見方法
靜態(tài)方法
人工颗搂,自動
動態(tài)測試方法
人工担猛,自動
靜態(tài)掃碼工具:Sonar
單元測試框架TestNG
基本用法
高級用法
代碼覆蓋率工具JaCoCo
性能測試
性能測試的基礎(chǔ)
軟件性能和性能指標(biāo)
終端用戶眼中的軟件性能
系統(tǒng)運維人員眼中的軟件性能
軟件設(shè)計開發(fā)人員眼中的軟件性能
性能測試人員眼中的軟件性能
指標(biāo)
并發(fā)用戶數(shù)
已上線:系統(tǒng)日志分析法獲取用戶行為
未上線新系統(tǒng):行業(yè)中類似系統(tǒng)的統(tǒng)計信息建立用戶行為
響應(yīng)時間:數(shù)據(jù)網(wǎng)絡(luò)傳輸時間+Web服務(wù)器處理時間+數(shù)據(jù)庫服務(wù)器處理時間
前端響應(yīng)時間
系統(tǒng)響應(yīng)時間
系統(tǒng)吞吐量:軟件系統(tǒng)負(fù)載的承受能力的指標(biāo)
常見的7種性能測試
后端性能測試:CPU占用率,內(nèi)存使用率峭火,磁盤I/O和網(wǎng)絡(luò)I/O
前端性能測試:減少HTTP請求次數(shù)毁习;減少DNS查詢次數(shù);避免頁面跳轉(zhuǎn)卖丸;使用內(nèi)容分發(fā)網(wǎng)絡(luò)纺且;通過Gzip壓縮傳輸文件
代碼級性能測試
壓力測試
配置測試:宿主操作系統(tǒng),應(yīng)用服務(wù)器稍浆,數(shù)據(jù)庫载碌,java虛擬機猜嘱,網(wǎng)絡(luò)環(huán)境,嫁艇。朗伶。。步咪。论皆。
并發(fā)測試
可靠性測試
4大應(yīng)用領(lǐng)域:能力驗證,能力規(guī)劃猾漫,性能調(diào)優(yōu)点晴,缺陷發(fā)現(xiàn)
性能測試實踐
前端性能測試工具:WebPagetest
實際中需要解決2個問題
1.所有的操作都是基于界面,不利于CI/CD流水線
解決方法:webpagetest API wrapper
2.被測網(wǎng)站部署在公司的內(nèi)部網(wǎng)絡(luò)悯周,處于外網(wǎng)webpagetest無法完成測試
解決方法:webpagetest私有化部署
后端性能測試主流商業(yè)工具:LoadRunner
對比jmeter:如何支持海量并發(fā)粒督,實現(xiàn)更好的負(fù)載控制
-
全鏈路壓測
基于真實的身材環(huán)境來模擬海量的并發(fā)用戶請求和數(shù)據(jù),對整個業(yè)務(wù)鏈路進(jìn)行壓力測試禽翼,試圖找到所以潛在性能瓶頸并持續(xù)優(yōu)化的實踐
后端性能測試主流開源工具:JMeter
測試案例與經(jīng)驗
性能基準(zhǔn)測試
同一事務(wù)的響應(yīng)時間變慢
系統(tǒng)資源的占用率變大
網(wǎng)絡(luò)帶寬的使用量變高
-
穩(wěn)定性測試
長時間的模擬被測系統(tǒng)的負(fù)載7*24
系統(tǒng)資源的所以監(jiān)控指標(biāo)不存在“不可逆轉(zhuǎn)”的上升趨勢
事務(wù)的響應(yīng)時間不存在逐漸變慢的趨勢
事務(wù)的錯誤率不超過1%
并發(fā)測試
容量規(guī)劃測試
準(zhǔn)備測試數(shù)據(jù)
基本方法
基于GUI操作生成測試數(shù)據(jù)
通過API調(diào)用生成測試數(shù)據(jù)
通過數(shù)據(jù)庫操作生成測試數(shù)據(jù)
綜合運用API和數(shù)據(jù)庫生成測試數(shù)據(jù)
創(chuàng)建時機
實時創(chuàng)建方法
事先創(chuàng)建方法
綜合運用實時和事先創(chuàng)建方法
統(tǒng)一數(shù)據(jù)測試平臺
軟件測試新技術(shù)
發(fā)揮人的潛能--探索性測試:即興發(fā)揮屠橄,快速實驗,隨時調(diào)整
- 基于功能需求和非功能需求進(jìn)行擴展和延伸
測試先行-- TDD
開發(fā)人員實現(xiàn)功能代碼前闰挡,先設(shè)計好測試用例的代碼锐墙,然后根據(jù)測試用例的代碼編寫產(chǎn)品的功能代碼,最終目的是讓開發(fā)前設(shè)計的測試用例代碼能夠順利執(zhí)行通過长酗;
優(yōu)勢
保證開發(fā)的功能一定是符合實際需求
更加靈活的迭代方式
保證系統(tǒng)的可擴展性
更好的質(zhì)量保證
測試用例即文檔
實施過程
對需要實現(xiàn)的新功能添加一批測試
運行所有測試贮匕,看看新添加的測試是否失敗
編寫實現(xiàn)軟件新功能的代碼
再次運行所有的測試,看是否有測試失敗
重構(gòu)代碼
重復(fù)以上步驟直到所有的測試通過
進(jìn)階
1.控制TDD測試用例的粒度
測試用例分解成更小的粒度任務(wù)列表花枫,考慮到用戶的使用場景,保證每一個任務(wù)列表都是最新的功能模塊
2.保證代碼的整潔和高效
3.通過重構(gòu)保證最新叫法代碼的優(yōu)雅和簡潔
打蛇打七寸--精準(zhǔn)測試
借用一定的手段掏膏,通過輔助算法對傳統(tǒng)軟件測試過程進(jìn)行可視化劳翰,分析及優(yōu)化的過程,建立一套測試分析系統(tǒng)馒疹;
傳統(tǒng)軟件測試的主要短板
測試的維護(hù)成本日益升高
測試過程低效
缺乏有效的回歸用例選取機制
測試結(jié)果可信度不高
無論是白盒測試還是黑盒測試技術(shù)都有局限性
核心思想
- 對傳統(tǒng)測試的補充
- 采用黑盒測試和白盒測試相結(jié)合的模式
- 數(shù)據(jù)可信度高
系統(tǒng)自動錄入和管理佳簸,人工無法直接修改數(shù)據(jù)
4.精準(zhǔn)測試的過程不直接面對產(chǎn)品代碼
基于代碼覆蓋率的統(tǒng)計
5.精準(zhǔn)測試與平臺無關(guān),多維度的測試分析算法系統(tǒng)
具體方法
- 軟件精準(zhǔn)測試示波器
2.測試用例和被測產(chǎn)品代碼的雙向追溯
3.智能回歸測試用例選取算法
4.測試用例聚類分析
安全第一--滲透測試
定義
專業(yè)人員模擬黑客颖变,從系統(tǒng)可能存在漏洞的位置進(jìn)行攻擊測試生均,在黑客入侵前,找到隱藏的安全漏洞腥刹,從而達(dá)到保護(hù)系統(tǒng)安全的目的马胧;
常用方法
針對性的測試
外部測試
內(nèi)部測試
盲測
雙盲測試
步驟
- 規(guī)劃和偵查
- 安全掃描
- 獲取訪問權(quán)限
- 維持訪問權(quán)限
5.入侵分析
常用工具
Nmap
Aircrack-ng
sqlmap
Wifiphisher
AppScan
用機器設(shè)計測試用例 -- 基于模型的測試(Model-Based-Testing, MBT)
原理:通過建立被測系統(tǒng)的設(shè)計模型衔峰,并結(jié)合不同的算法和策略來遍歷改模型佩脊,從而生成測試用例
常見模型
有限狀態(tài)機
狀態(tài)圖
UML
常見工具
BPM-X, fMBT, GraphWalker
人工智能在測試領(lǐng)域的應(yīng)用
常見場景
應(yīng)用TensorFlow通過軟件界面截圖尋找bug
利用K近鄰算法協(xié)助失敗測試用例的分析
利用模式識別算法來模糊定位GUI的元素
利用路徑權(quán)重來自動生成測試用例
工具
Appvance IQ, Applitool, MABL, TestAI
測試人員的互聯(lián)網(wǎng)架構(gòu)核心知識
必要性
基于消息隊列的分布式系統(tǒng)測試設(shè)計蛙粘,清楚不同方案的優(yōu)勢和劣勢
緩存的示例
架構(gòu)知識的學(xué)習(xí)方法
大型網(wǎng)站的架構(gòu)介紹
最簡單的網(wǎng)站架構(gòu)
應(yīng)用和數(shù)據(jù)分離的網(wǎng)站架構(gòu)
引入本地緩存和分布式緩存的網(wǎng)站架構(gòu)
引入應(yīng)用服務(wù)器集群的網(wǎng)站架構(gòu)
引入主從分離的數(shù)據(jù)庫
引入CDN服務(wù)器和返廈代理服務(wù)器的網(wǎng)站架構(gòu)
引入分布式文件系統(tǒng)和分布式數(shù)據(jù)庫系統(tǒng)的網(wǎng)站架構(gòu)
基于業(yè)務(wù)拆分和消息隊列的網(wǎng)站架構(gòu)
基于分布式服務(wù)的網(wǎng)站架構(gòu)
微服務(wù)架構(gòu)
下一代微服務(wù)架構(gòu)--服務(wù)網(wǎng)格
網(wǎng)站的高性能架構(gòu)設(shè)計
前端的高性能架構(gòu)
后端服務(wù)器的高性能架構(gòu)
網(wǎng)站的可收縮行架構(gòu)設(shè)計
分層的可收縮性
緩存集群的可收縮性
數(shù)據(jù)庫的可收縮性
網(wǎng)站的可擴展性架構(gòu)
事件驅(qū)動架構(gòu)與消息隊列
引入消息隊列后的測試關(guān)注點
思維導(dǎo)圖方式如下: