問題:一樣的測試用例在一樣的環境上,時而測試經過,時而測試失敗;php
形成GUI測試不穩定的常見五種因素:css
非預計的彈出對話框html
新增異常場景恢復流程,一旦發現控件沒法定位時,就走到該邏輯下,遍歷知足的狀況,執行相應的操做,缺點就是,不一樣對話框須要更新到該進程了,存在維護成本;前端
頁面控件屬性的細微變化android
好比控件ID屬性發生變化,也建議新增定位控件邏輯處理:ios
上面的方法只是一種思路,能夠根據不一樣業務特性歸總必定適用的方法來在出錯時定位控件,提升識別率;git
還能夠使用xpath,但也同樣存在屬性被改的狀況,只是相對控件元素,機率會少一點;github
被測系統的A/B測試web
在測試腳本內部對不一樣的被測版本作分支處理,腳本須要可以區分 A
和 B
兩個的不一樣版本,並作出相應的處理;objective-c
隨機的頁面延遲形成控件識別失敗
增長重試機制,當操做失敗時,自動發起重試;
主要是說,好的測試報告,須要有截圖
及高亮顯示操做元素
功能;
若是使用selenium,須要擴展selenium原來的操做函數和hook函數實現;
web APP
和native APP
二者之間的一種形態,在原生內嵌webview
,經過webview
來訪問網頁,優勢是具有跨平臺,維護更新,是主流的開發模式;從業務功能測試的角度看,移動應用的測試用例設計和傳統 PC
端的 GUI
自動化測試策略比較相似,只是測試框架不一樣,數據驅動、頁面對象模型和業務流程封裝依舊適用;
交叉事件測試
也稱場景測試,模擬各類交叉場景,手工測試爲主;
兼容性測試
由於須要大量真實社保,因此使用第三方的雲測平臺較多;
流量測試
藉助於Android
和 iOS
自帶的工具進行流量統計,也能夠利用 tcpdump
、Wireshark
和 Fiddler
等網絡分析工具;
對於 Android 系統,網絡流量信息一般存儲在 /proc/net/dev 目錄下,也能夠直接利用 ADB 工具獲取實時的流量信息。另外,推薦一款 Android 的輕量級性能監控小工具 Emmagee,相似於 Windows 系統性能監視器,可以實時顯示 App 運行過程當中 CPU、內存和流量等信息;
對於 iOS 系統,能夠使用 Xcode 自帶的性能分析工具集中的 Network Activity,分析具體的流量使用狀況;
複製代碼
常見流量優化的方法:
耗電量測試
耗電量通常從三個方面思考:
檢驗方法,偏硬件的是耗電儀,軟件則以下:
adb shell dumpsys battery
來獲取應用的耗電量信息;Sysdiagnose
來收集耗電量信息,而後,能夠進一步經過 Instrument
工具鏈中的 Energy Diagnostics
進行耗電量分析;弱網絡測試
平常生活中,弱網的場景比較多,如地鐵、隧道、車庫,伴隨着就是丟包、延遲、斷線的異常場景;
文中做者推薦Augmented Traffic Control
,是Facebook的開源移動網絡測試工具,詳情請點擊這裏查閱;
而jb平常用的比較多的是fiddler來模擬弱網,感興趣的點擊這裏查閱;
邊界測試
意思就是找出程序的臨界值場景,驗證這些臨界場景是否正常,常見的就是最大值最小值;
本文主要是介紹了Appium
及安裝使用,網上也有不少,請自行查閱;
Appium 的內部原理能夠總結爲:
Appium 屬於 C/S 架構,Appium Client 經過多語言支持的第三方庫向 Appium Server 發起請求,基於 Node.js 的 Appium Server 會接受 Appium Client 發來的請求,接着和 iOS 或者 Android 平臺上的代理工具打交道,代理工具在運行過程當中不斷接收請求,並根據 WebDriver 協議解析出要執行的操做,最後調用 iOS 或者 Android 平臺上的原生測試框架完成測試。
複製代碼
經常使用的api測試工具備cURL
、postman
,還有jmeter跟soapui也算;
cURL
是一款命令行工具,須要安裝,而後執行下面的命令發起api調用;
curl -i -H "Accept: application/json" -X GET "https://www.baidu.com"
複製代碼
返回的內容如圖:
常見的參數解析:
參數 | 含義 |
---|---|
-i | 顯示response的header信息; |
-H | 設置request中的header; |
-X | 執行執行方法,如get、post、Put,不指定-X,則默認使用get; |
-d | 設置http參數,參數之間用&串接; |
-b | 須要cookie時,指定cookie文件路徑; |
Session 的場景
curl -i -H "sessionid:XXXXXXXXXX" -X GET "http://XXX/api/demoAPI"
複製代碼
Cookie 的場景 使用 cookie,在認證成功後,後端會返回 cookie給前端,前端能夠把該 cookie 保存成爲文件,當須要再次使用該 cookie 時,再用-b cookie_File
的方式在 request 中植入 cookie 便可正常使用;
// 將 cookie 保存爲文件
curl -i -X POST -d username=robin -d password=password123 -c ~/cookie.txt "http://XXX/auth"
// 載入 cookie 到 request 中
curl -i -H "Accept:application/json" -X GET -b ~/cookie.txt "http://XXX/api/demoAPI"
複製代碼
相對於cURL,postman用的比較頻繁,官網地址點這裏;
結果驗證 點擊Test
右側的SNIPPETS
,挑選一些須要驗證的場景,代碼就會自動生成,固然也能夠本身寫;
基於postman的測試代碼自動生成 點擊右側的code
,選擇須要的語言,保存便可;
又或者,使用newman工具,直接執行postman
的collection
;
newman run examples/sample-collection.json;
複製代碼
多個api調用協助
經過代碼將上個 API 調用返回的response
中的某個值傳遞給下一個 API;
api依賴第三方
mock server;
異步api
異步 API 是指,調用後會當即返回,可是實際任務並無真正完成,而是須要稍後去查詢或者回調的API;
早期的基於 Postman 的 API 測試在面臨頻繁執行大量測試用例,以及與 CI/CD
流水線整合的問題時,顯得愛莫能助。
爲此,基於命令行的 API 測試實踐,也就是 Postman+Newman`,具備很好的靈活性,解決了這兩個問題。
可是,Postman+Newman
的測試方案,只能適用於單個 API 調用的簡單測試場景,對於連續調用多個 API 並涉及到參數傳遞問題時,這個方案就變得不那麼理想和完美了。隨後,API 測試就過渡到了基於代碼的 API 測試階段;
respons結果發生變化時自動識別
具體實現的思路是,在 API
測試框架裏引入一個內建數據庫,推薦採用非關係型數據庫
(好比 MongoDB),而後用這個數據庫記錄每次調用的 request 和 response 的組合,當下次發送相同 request 時,API 測試框架就會自動和上次的 response 作差別檢測,對於有變化的字段給出告警;
單體架構是將全部的業務場景的表示層、業務邏輯層和數據訪問層放在同一個工程中,最終通過編譯、打包,並部署在服務器上。
缺點:
在微服務架構下,一個大型複雜軟件系統再也不由一個單體組成,而是由一系列相互獨立的微服務組成;
龐大的測試用例數量
消費者契約的 API 測試的核心思想是: 只測試那些真正被實際使用到的 API 調用,若是沒有被使用到的,就不去測試;
微服務之間的耦合關係
契約的本質就是 Request 和 Response 的組合,基於契約的 Mock Service 完美地解決了 API 之間相互依賴耦合的問題;
常見代碼錯誤類型:
代碼級測試經常使用方法:
這四類測試方法的特色,以及能夠覆蓋的錯誤類型,能夠歸納以下:
評論裏面有說起到,Facebook 開源的靜態分析工具 Infer,感興趣的能夠看看;
常見的工具包括收費的企業級應用,好比Coverity。
其它免費的應用,好比Findbugs(Spotbugs), Java Checker Framework, PREfast, Splint, SPIN, Microsoft SLAM, PMD, Facebook Infer
;
自動的特色在於:
能發現不少小問題:
也就是單元測試,測試基本用不着,不展開;
基於代碼自動生成邊界測試用例並執行來捕捉潛在的異常、崩潰和超時的測試方法;
如何實現邊界測試用例的自動生成?
根據被測函數的輸入參數生成可能的邊界值;
複製代碼
用戶在界面上完成一個操做開始,到系統把本次操做的結果以用戶能察覺的方式展示出來的所有時間;
複製代碼
軟件性能除了包括單個用戶的響應時間外,更要關注大量用戶併發訪問時的負載
,以及在負載下的系統健康狀態、併發處理能力、當前部署的系統容量、可能的系統瓶頸、系統配置層面的調優、數據庫的調優,以及長時間運行穩定性和可擴展性;
在軟件設計開發人員眼中,軟件性能一般會包含算法設計
、架構設計
、性能最佳實踐
、數據庫相關
、軟件性能的可測試性
這五大方面;
三個最經常使用的指標:併發用戶數
、響應時間
,以及系統吞吐量
;
併發用戶數
併發用戶數,包含了業務層面和後端服務器層面的兩層含義;
獲取用戶行爲模式的方法,主要分爲兩種:
系統日誌分析法獲取用戶行爲統計
和峯值併發量
等重要信息;響應時間
響應時間反映了完成某個操做所須要的時間,其標準定義是「應用系統從請求發出開始,到客戶端接收到最後一個字節數據所消耗的時間」,是用戶視角軟件性能的主要體現;
複製代碼
響應時間,能夠分爲前端展示時間和系統響應時間:
系統吞吐量
是直接體現軟件系統負載承受能力的指標;
全部對吞吐量的討論都必須以「單位時間」做爲基本前提;
複製代碼
以不一樣方式表達的吞吐量能夠說明不一樣層次的問題:
Bytes/Second
和Pages/Second
表示的吞吐量,主要受網絡設置、服務器架構、應用服務器制約,考察http或者業務層面;Requests/Second
表示的吞吐量,主要受應用服務器和應用自己實現的制約,考察系統層面或網絡層面;一個優秀的性能測試工程師,通常須要具備如下技能:
最經常使用的指標:併發用戶數,響應時間,系統吞吐量:
當系統併發用戶數較少時,系統的吞吐量也低,系統處於空閒狀態,這個階段稱爲 「空閒區間」;
當系統總體負載並非很大時,隨着系統併發用戶數的增加,系統的吞吐量也會隨之呈線性增加,稱爲 「線性增加區間」;
隨着系統併發用戶數的進一步增加,系統的處理能力逐漸趨於飽和,所以每一個用戶的響應時間會逐漸變長。相應地,系統的總體吞吐量並不會隨着併發用戶數的增加而繼續呈線性增加,稱爲系統的「拐點」;
隨着系統併發用戶數的增加,系統處理能力達到過飽和狀態。此時,若是繼續增長併發用戶數,最終全部用戶的響應時間會變得無限長;相應地,系統的總體吞吐量會降爲零,系統處於被壓垮的狀態,稱爲「過飽和區間」;
複製代碼
後端性能測試的測試負載,通常只會把它設計在線性增加區間
內;而壓力測試的測試負載,則會將它設計在系統拐點
上下,甚至是過飽和區間
;
後端性能測試
也叫服務端性能測試,是經過性能測試工具模擬大量的併發用戶請求,而後獲取系統性能的各項指標,而且驗證各項指標是否符合預期的性能需求的測試手段;
這裏的性能指標,除了包括併發用戶數、響應時間和系統吞吐量外,還應該包括各種資源的使用率,好比系統級別的 CPU 佔用率、內存使用率、磁盤 I/O 和網絡 I/O 等,再好比應用級別以及 JVM 級別的各種資源使用率指標等;
後端性能測試的場景設計主要包括如下兩種方式:
前端性能測試
一般來說,前端性能關注的是瀏覽器端的頁面渲染時間
、資源加載順序
、請求數量
、前端緩存使用狀況
、資源壓縮
等內容,但願藉此找到頁面加載過程當中比較耗時的操做和資源,而後進行有針對性的優化,最終達到優化終端用戶在瀏覽器端使用體驗的目的;
而業界廣泛採用的前端測試方法,是根據雅虎前端團隊總結的優化規則,能夠點擊這裏查看;
如下列出做者以爲重要的規則:
代碼級性能測試
代碼級性能測試,是指在單元測試階段就對代碼的時間性能和空間性能進行必要的測試和評估,以防止底層代碼的效率問題在項目後期才被發現的尷尬;
最常使用的改造方法是:
壓力測試
壓力測試,一般指的是後端壓力測試,通常採用後端性能測試的方法,不斷對系統施加壓力,並驗證系統化處於或長期處於臨界飽和階段的穩定性以及性能指標,並試圖找到系統處於臨界狀態時的主要瓶頸點,壓力測試每每被用於系統容量規劃的測試;
配置測試
用於觀察系統在不一樣配置下的性能表現,一般使用後端性能測試的方法:
這裏的配置是廣義,包含且不止:
併發測試
指的是在同一時間,同時調用後端服務,期間觀察被調用服務在併發狀況下的行爲表現,旨在發現諸如資源競爭、資源死鎖之類的問題;
可靠性測試
驗證系統在常規負載模式下長期運行的穩定性,本質就是經過長時間模擬真實的系統負載來發現系統潛在的內存泄漏、連接池回收等問題;
這裏「應用領域」主要包括能力驗證、能力規劃、性能調優、缺陷發現四大方面;
能力驗證
主要是驗證某系統可否在 A 條件下具備 B 能力
,一般要求在明確的軟硬件環境下,根據明確的系統性能需求設計測試方案和用例;
能力規劃
能力規劃關注的是,如何才能使系統達到要求的性能和容量,一般狀況下會採用探索性測試的方式來了解系統的能力;
能力規劃解決的問題,主要包括如下幾個方面:
性能調優
性能調優主要解決性能測試過程當中發現的性能瓶頸的問題,一般會涉及多個層面的調整,包括硬件設備選型、操做系統配置、應用系統配置、數據庫配置和應用代碼實現的優化等等;
缺陷發現
經過性能測試的各類方法來發現諸如內存泄露、資源競爭、不合理的線程鎖和死鎖等問題;
最經常使用的測試方法主要有併發測試、壓力測試、後端性能測試和代碼級性能測試;
完整的後端性能測試應該包括性能需求獲取、性能場景設計、性能測試腳本開發、性能場景實現、性能測試執行、性能結果報告分析、性能優化和再驗證;
使用性能測試工具得到性能測試報告只是性能測試過程當中的一個必要步驟而已,而得出報告的目的是讓性能測試工程師去作進一步的分析,以得出最終結論,並給出性能優化的措施;
業內有不少成熟的後端性能測試工具,好比LoadRunner
、JMeter
、NeoLoad
等,還有不少雲端部署的後端性能測試工具或平臺,好比 CloudTest
、Loadstorm
、阿里的 PTS
等;
目前最主流的是jmeter,由於開源免費、靈活、功能也強大,適合互聯網企業;
而LR是按照併發用戶數收費的,並且LR對定製功能支持不是特別好,傳統企業用的會比較多;
是前端性能測試的利器:
Filmstrip
視圖、Waterfall
視圖、Connection
視圖、Request` 詳情視圖和頁面加載視頻慢動做;First Byte Time
指的是用戶發起頁面請求到接收到服務器返回的第一個字節所花費的時間。這個指標反映了後端服務器處理請求、構建頁面,而且經過網絡返回所花費的時間;
本次測試的結果,首次打開頁面(First View)花費的時間是 999 ms,重複打開頁面(Repeat View)花費的時間是 860 ms。這兩個指標都在 1 s 如下,因此 WebPagetest 給出了 A 級的評分;
Keep-alive Enabled
要求每次請求使用已經創建好的連接,它屬於服務器上的配置,不須要對頁面自己進行任何更改,啓用了 Keep-alive 一般能夠將加載頁面的時間減小 40%~50%,頁面的請求數越多,可以節省的時間就越多;
Compress Transfer
若是將頁面上的各類文本類的資源,好比 Html、JavaScript、CSS 等,進行壓縮傳輸,將會減小網絡傳輸的數據量,同時因爲 JavaScript 和 CSS 都是頁面上最早被加載的部分,因此減少這部分的數據量會加快頁面的加載速度,同時也能縮短 First Byte Time。
Compress Images
爲了減小須要網絡傳輸的數據量,圖像文件也須要進行壓縮處理。顯然本次測試結果顯示(圖 5),全部的 JPEG 格式圖片都沒有通過必要的壓縮處理,而且全部的 JPEG 格式圖片都沒有使用漸進式 JPEG(Progressive JPEG)技術,因此 WebPagetest 給出了 D 級的評分;
Cache Static Content
頁面上的靜態資源不會常常變化,因此若是你的瀏覽器能夠緩存這些資源,那麼當重複訪問這些頁面時,就能夠從緩存中直接使用已有的副本,而不須要每次向 Web 服務器請求資源。這種作法,能夠顯著提升重複訪問頁面的性能,並減小 Web 服務器的負載。
第一個問題是,若是被測網站部署在公司內部的網絡中,那麼處於外網的 WebPagetest 就沒法訪問這個網站,也就沒法完成測試。
要解決這個問題,你須要在公司內網中搭建本身的私有 WebPagetest 以及相關的測試發起機。具體如何搭建,點擊這裏;
第二個問題是,用 WebPagetest 執行前端測試時,全部的操做都是基於界面操做的,不利於與 CI/CD 的流水線集成。
要解決這個問題,就必須引入 WebPagetest API Wrapper;
WebPagetest API Wrapper 是一款基於 Node.js,調用了 WebPagetest 提供的 API 的命令行工具。也就是說,你能夠利用這個命令行工具發起基於 WebPagetest 的前端性能測試,這樣就能夠很方便地與 CI/CD 流水線集成了。具體的使用步驟以下:
npm install webpagetest -g
安裝該命令行工具;https://www.webpagetest.org/getkey.php
獲取你的 WebPagetest API Key
;webpagetest test -k API-KEY 被測頁面 URL
發起測試,該調用是異步操做,會當即返回,併爲你提供一個 testId
;webpagetest status testId
查詢測試是否完成;webpagetest results testId
查看測試報告,可是會發現測試報告是個很大的 JSON 文件,可讀性較差;npm install webpagetest-mapper -g
安裝webpagetest-mapper
工具,這是爲了解決測試報告可讀性差的問題,將 WebPagetest
生成的 JSON 文件格式的測試報告轉換成爲 HTML 文件格式;Wptmap -key API-KEY --resultIds testId --output ./test.html
將 JSON 文件格式的測試結果轉換成 HTML 格式;Virtual User Generator
用於生成模擬用戶行爲的測試腳本,生成的手段主要是基於協議的錄製,也就是由性能測試腳本開發人員在經過 GUI 執行業務操做的同時,錄製客戶端和服務器之間的通訊協議,並最終轉化爲代碼化的 LoadRunner 的虛擬用戶腳本;
LoadRunner Controller
Controller 至關於性能測試執行的控制管理中心,負責控制 Load Generator 產生測試負載,以執行預先設定好的性能測試場景;
同時,還負責收集各種監控數據;
LoadRunner Analysis
Analysis
是 LoadRunner
中一個強大的分析插件;
不只能圖形化展現測試過程當中收集的數據,還能很方便地對多個指標作關聯分析,找出它們之間的因果關係;
最根本的目的就是,分析出系統可能的性能瓶頸點以及潛在的性能問題;
從宏觀角度來說,基於 LoadRunner 完成企業級性能測試,能夠劃分爲五個階段:
性能基準測試
是每次對外發布產品版本前都須要作的類型;
是須要用上一個版本數據作基準,在同一操做環境下進行對比,目的是爲了保證新版本總體性能不會降低;
穩定性測試
又稱可靠性測試,主要是經過長時間(7*24 小時)模擬被測系統的測試負載,來觀察系統在長期運行過程當中是否有潛在的問題;
移動端裏面典型的就是monkey,通常來講,穩定性是發佈前的硬性要求;
併發測試
併發測試,是在高併發狀況下驗證單一業務功能的正確性以及性能的測試手段;
容量規劃測試
是軟件產品爲知足用戶目標負載而調整自身生產能力的過程;
容量規劃的主要目的是,解決當系統負載將要達到極限處理能力時,應該如何經過垂直擴展(增長單機的硬件資源)和水平擴展(增長集羣中的機器數量)增長系統總體的負載處理能力的問題;
複製代碼
這4章都是講測試數據相關,以前也單獨提煉出一篇文章,這裏不重複,直接點擊這裏查看;
本篇都在講selenium grid
相關,以前jb看了蟲師的selenium2的書籍,也作了一些筆記,裏面也有說起到selenium grid
,所以這裏不打算重複描述,內容類似,點擊[這裏]juejin.im/post/5bcd84…)查看;
廣義的測試執行環境,也稱測試基礎架構;
測試基礎架構能夠解決的問題:
所以在設計測試基礎架構,須要考慮幾個方面:
可擴展性
;將測試用例存儲在代碼倉庫中,而後是用 Jenkins Job
來pull
代碼並完成測試的發起工做;
在這種架構下,自動化測試用例的開發和執行流程,是按照如下步驟執行的:
Pull
測試用例代碼,併發起構建操做;而後,在遠端或者本地固定的測試執行機上發起測試用例的執行;弊端是對測試執行機器信息不可知,好比ip等是否發生變化、環境是否一致;
利用selenium Grid
代替早期的遠程或本地固定的測試執行機器;
每次發起測試時,就再也不須要指定具體的測試執行機器了,只要提供固定的 Selenium Hub
地址就行,而後 Selenium Hub
就會自動幫你選擇合適的測試執行機;
在測試規模比較少的狀況下,能夠採用第一種方式,但一旦規模龐大起來,就須要調整了;
Selenium Grid
雖然能解決問題,可是隨着測試用例的增長,須要維護多個Node
,所以引入docker代替原來的方案,能夠下降維護成本:
隨着項目數量增長,jenkins配置時間也會增長,所以做者提出實現一個GUI界面系統來管理和執行這些jenkins job;
restful api
的測試執行接口供CI/CD使用;單個 Jenkins
成了整個測試基礎架構的瓶頸節點。由於,來自於統一測試執行平臺的大量測試請求,會在 Jenkins
上排隊等待執行,然後端真正執行測試用例的 Selenium Grid
中不少 Node 處於空閒狀態;
引入了 Jenkins 集羣后,整個測試基礎架構已經很成熟了,基本上能夠知足絕大多數的測試場景了;
可是,還有一個問題一直沒有獲得解決,那就是: Selenium Grid
中 Node 的數量到底多少才合適?
爲了解決這種測試負載不均衡的問題,Selenium Grid
的自動擴容和收縮技術就應運而生了;
若是所在的企業若是規模不是很大,測試用例執行的總數量相對較少,並且短時間內也不會有大變化的狀況,那麼測試基礎架構徹底就能夠採用經典的測試基礎架構,而不必引入 Docker 和動態擴容等技術;
若是是大型企業,測試用例數量龐大,同時還會存在發佈時段大量測試請求集中到來的狀況,那麼此時就不得不採用 Selenium Gird
動態擴容的架構了,而一旦要使用動態擴容,那麼勢必你的 Node 就必須作到 Docker 容器化,不然沒法徹底發揮自動擴容的優點;
所以根據不一樣的狀況而酌情選擇,是由測試需求推進的;
大型全球化電商網站全局測試基礎架構的設計思路,能夠總結爲測試服務化
;
也就是說,測試過程當中須要用的任何功能都經過服務的形式提供,每類服務完成一類特定功能,這些服務能夠採用最適合本身的技術棧,獨立開發,獨立部署;
理想的測試基礎架構,應該包含6種不一樣的測試服務:
統一測試執行服務
經過 Spring Boot
框架提供 Restful API
,內部實現是經過調度 Jenkins Job
具體發起測試;
本質是統一測試執行平臺;
統一測試數據服務
統一測試數據平臺;
測試執行環境準備服務
這裏測試執行環境
,特指具體執行測試的測試執行機器集羣: 對於 GUI 自動化測試來講,指的就是 Selenium Grid; 對於 API 測試來講,指的就是實際發起API調用的測試執行機器集羣;
被測系統部署服務
主要是被用來安裝部署被測系統和軟件;
被測報告服務
主要做用是爲測試提供詳細的報告;
全局測試配置服務
本質是要解決測試配置和測試代碼的耦合問題;
探索性測試更多關注的就是按部就班,迭代深刻的過程;
測試驅動開發,也就是 Test-Driven Develop
,一般簡稱爲 TDD
;
核心思想,是在開發人員實現功能代碼前,先設計好測試用例的代碼,而後再根據測試用例的代碼編寫產品的功能代碼;
最終目的是讓開發前設計的測試用例代碼都可以順利執行經過;
評論裏有一套開發流程,能夠參考下:
好處:
以上是評論區看到的,僅供參考;
藉助必定的技術手段、經過算法的輔助對傳統軟件測試過程進行可視化、分析以及優化的過程,使得測試過程可視、智能、可信和精準;
擁有幾個特徵:
雙向mapping關係
是經過代碼覆蓋率工具來實現的;
Class
,Method
,Line
等相關信息;mapping
信息記錄表中,這樣就造成了雙向mapping
;class
,method
等信息,去數據庫搜到關聯的測試用例,就能實現精準測試了;滲透測試指的是,由專業安全人員模擬黑客,從其可能存在的位置對系統進行攻擊測試,在真正的黑客入侵前找到隱藏的安全漏洞,從而達到保護系統安全的目的;
針對性測試
針對性的測試,屬於研發層面的滲透測試;
參與這類測試的人員,能夠獲得被測系統的內部資料,包括部署信息、網絡信息、詳細架構設計,甚至是產品代碼;
須要徹底瞭解系統內部狀況的前提下開展;
外部測試
外部測試,是針對外部可見的服務器和設備(包括:域名服務器(DNS)、Web 服務器或防火牆、電子郵箱服務器等等),模擬外部攻擊者對其進行攻擊,檢查它們是否可以被入侵,以及若是被成功入侵了,會被入侵到系統的哪一部分、又會泄露多少資料;
通常是不清楚系統內部狀況下開展的;
內部測試
由測試工程師模擬內部人員,在內網(防火牆之內)進行攻擊,所以測試人員會擁有較高的系統權限,也可以查看各類內部資料,目的是檢查內部攻擊能夠給系統形成什麼程度的損害;
盲測
盲測,指的是在嚴格限制提供給測試執行人員或團隊信息的前提下,由他們來模擬真實攻擊者的行爲和上下文;
雙盲測試
雙盲測試能夠用於測試系統以及組織的安全監控和事故識別能力,及其響應過程。通常來講,雙盲測試通常是由外部的專業滲透測試專家團隊完成,因此實際開展雙盲測試的項目並很少;
Nmap
是進行主機檢測和網絡掃描的重要工具。它不只能夠收集信息,還能夠進行漏洞探測和安全掃描,從主機發現、端口掃描到操做系統檢測和 IDS 規避 / 欺騙;
Aircrack-ng
是評估 Wi-Fi
網絡安全性的一整套工具。它側重於 WiFi
安全的領域,主要功能有:網絡偵測、數據包嗅探、WEP 和WPA/WPA2-PSK 破解;
sqlmap
是一種開源的基於命令行的滲透測試工具,可以自動進行 SQL 注入和數據庫接入;
Wifiphisher
是一種惡意接入點工具,能夠對 WiFi 網絡進行自動釣魚攻擊;
AppScan
一款企業級商業 Web 應用安全測試工具,採用的是黑盒測試,能夠掃描常見的 Web 應用安全漏洞;
原理:
MBT 是一種基於被測系統的模型,由工具自動生成測試用例的軟件測試技術;
原理是經過創建被測系統的設計模型,而後結合不一樣的算法和策略來遍歷該模型,以今生成測試用例的設計;
開發者首先根據產品需求或者說明來構建模型,而後結合測試對象生成測試用例,測試用例針對測試對象執行完以後,生成測試報告比對測試結果;
有限狀態機
有限狀態機能夠幫助測試人員根據選中的輸入來評估輸出,不一樣的輸入組合對應着不一樣的系統狀態;
狀態圖
狀態圖是有限狀態機的延伸,用於描述系統的各類行爲,尤爲適用於複雜且實時的系統;
UML
UML 即統一建模語言,是一種標準化的通用建模語言;
UML 能夠經過建立可視化模型,來描述很是複雜的系統行爲;
BPM-X
BPM-X 根據不一樣的標準(好比,語句、分支、路徑、條件)從業務流程模型建立測試用例;
fMBT fMBT 是一組免費的、用於全自動測試生成和執行的工具,也是一組支持高水平測試自動化的實用程序和庫,主要被應用在 GUI 測試中;
GraphWalker
GraphWalker
以有向圖的形式讀取模型,讀取這些模型,而後生成測試路徑,更適合於多狀態以及基於事件驅動的狀態轉換的後臺系統;
前端高性能架構比較直觀易懂,其本質就是經過各類技術手段去優化用戶實際感覺到的前端頁面展示時間。
緩存
讀取緩存的處理:
緩存主要用來存儲那些相對變化較少,而且聽從「二八原則」的數據;這裏的「二八原則」指的是 80% 的數據訪問會集中在 20% 的數據上;
緩存技術並不適用於那些須要頻繁修改的數據;
與緩存相關的測試場景:
集羣
網站高可用指的就是,在絕大多的時間裏,網站一直處於能夠對外提供服務的正常狀態,業界一般使用有多少個「9」來衡量網站的可用性指標,具體的計算公式也很簡單,就是一段時間內(好比一年)網站可用的時間佔總時間的百分比;
服務器硬件故障
如宕機,須要保障的是即便出現了硬件故障,也要保證系統的高可用;
解決方案就是從硬件層面加入必要的冗餘,同時充分發揮集羣的牲口
優點;
這樣就須要準備至少兩臺一樣的服務器,當其中一臺宕機的時候,另一臺能正常對外服務;
那麼,從測試人員的角度來看,咱們依舊能夠針對這種狀況設計出針對部分數據服務器發生故障時的測試用例,以完成系統應對故障的反應狀況的測試。
發佈新應用的過程
在發佈過程,會由於部署新版本而重啓服務器的狀況,會致使短暫時間不可用;
解決方案就是灰度發佈,前提是服務器必須採用集羣架構;
假若有N個節點的集羣須要更新新版本,這時候更新過程是這樣的:
程序自己的問題
預發佈的緣由是由於,常常出現測試環境沒問題,生產環境有問題,多是由於網絡、數據量、依賴的第三方庫不同等各類緣由致使,而預發佈環境的要求是跟生產環境如出一轍,只是不會對外暴露而已;
該內容文中沒有說起到,是jb自行補充的,直接找了逼乎的例子;
分佈式&集羣:分散壓力; 微服務:分散能力;
分佈式通常部署到多臺,而多臺關聯的機器,能夠稱爲集羣;
廚房例子
月嫂例子:
單體架構
家裏生小寶寶啦,因爲本身沒有照顧小寶寶的經驗,因此請了位經驗豐富的月嫂。 這位月嫂從買菜,到作飯,洗衣,拖地,餵奶,哄睡,洗澡,換紙尿褲,擦屁股,作排氣操,夜間陪護,給奶媽作月子餐等等,所有都作, 這種叫作單體架構。
集羣
什麼都作,一個月嫂怎麼夠呢,確定忙不過來呀,那就請兩個月嫂吧,這叫作集羣;
高可用
有一個月嫂過生日,想請假回去和親戚打一天麻將。若是隻有一個月嫂,她走了,就叫作服務中斷了;
可是由於作了集羣,有兩個月嫂,走了一個,另外一個仍是能用,雖然相比較吃力一些,可是畢竟仍是能用的,這個現象叫作高可用;
分佈式
一個月嫂,一個月的費用基本上都要1萬多,還有房貸,還有車貸,生活費用還高,實在是請不起兩位啊,那就仍是請一位吧;
但是事情那麼多,她實在忙不過來,怎麼辦呢? 那就把爺爺請過來買菜,把奶奶請過來作飯。 這樣服務原本僅僅是由月嫂一人提供的,變成了和寶寶相關的由月嫂負責,採購由爺爺負責,餐飲由奶奶負責。 這就叫作分佈式了;
低耦合
作寶寶服務的月嫂去打麻將了,不影響作飯的奶奶。 作採購的爺爺去喝酒了,也不影響月嫂的寶寶服務,這叫作低耦合;
高內聚
和寶寶相關的事情都是月嫂在作,月嫂兌奶方式快慢,只會影響本身,對爺爺和奶奶的服務沒影響. 這叫作高內聚;
集羣+分佈式
奶奶一我的作飯,作久了也煩啊,也累啊,也想打麻將呀。 那麼就把姥姥也請過來吧。 這樣作飯這個服務,就由奶奶和姥姥這個集羣來承擔啦。她們倆,誰想去汗蒸了,都有另外一位繼續提供作飯服務。
這就叫作集羣+分佈式;
可伸縮性,指的是經過簡單地增長硬件配置而使服務處理能力呈線性增加的能力,最簡單直觀的例子,就是經過在應用服務器集羣中增長更多的節點,來提升整個集羣的處理能力;
可擴展性,指的是網站的架構設計可以快速適應需求的變化,當須要增長新的功能實現時,對原有架構不須要作修改或者作不多的修改就可以快速知足新的業務需求;
從總體架構的角度來看,應用服務器、緩存集羣和數據庫服務器各自都有適合本身的可伸縮性設計策略:應用服務器主要經過集羣來實現可伸縮性,緩存集羣主要經過 Hash 一致性算法來實現,數據庫能夠經過業務分庫、讀寫分離、分佈式數據庫以及 NoSQL 來實現可伸縮性;
從技術實現上來看,消息隊列是實現可擴展性的重要技術手段之一;
其基本核心原理是各模塊之間不存在直接的調用關係,而是使用消息隊列,經過生產者和消費者模式來實現模塊間的協做,從而保持模塊與模塊間的鬆耦合關係;
引入消息隊列後,測試數據的建立和測試結果的驗證工做,都須要經過讀寫消息隊列來完成。同時,咱們還要考慮到消息隊列滿、消息隊列擴容,以及消息隊列服務器宕機狀況下的系統功能驗證;
全鏈路壓測,是基於真實的生產環境來模擬海量的併發用戶請求和數據,對整個業務鏈路進行壓力測試,試圖找到全部潛在性能瓶頸點並持續優化的實踐;
全鏈路壓測的應用場景,不只僅包括驗證系統在峯值期間的穩定性,還會包含新系統上線後的性能瓶頸定位以及站點容量的精準規劃;
都會涉及到流量模擬、數據準備、數據隔離等常規操做;
侷限性:
海量併發請求的發起
這種狀況通常會採用jmeter,由於LR是按併發用戶數費用,費用高;
難點:
JMeter
方案,併發數量也會存在上限,所以會改用Jenkins Job
單獨調用 JMeter
節點來控制和發起測試壓力,由於jmeter
是相互獨立,只有jenkins job
足夠多,就能夠發起足夠大的併發;jmeter slave
;全鏈路壓測流量和數據的隔離
須要對壓測流量進行特殊的數據標記,以區別於真實的流量和數據;
實際業務負載的模擬
這裏的難點主要體如今兩個方面:
業界一般採用的策略是,採用已有的歷史負載做爲基準數據,而後在此基礎上進行適當調整;
具體到執行層面,一般的作法是,錄製已有的實際用戶負載,而後在此基礎上作如下兩部分修改:
真實交易和支付的撤銷以及數據清理
對這些交易的流量和數據進行了特定標記,能夠比較方便地篩選出須要撤銷的交易,而後經過自動化腳本的方式來完成批量的數據清理工做;