分布式系統(tǒng)在越來越多的公司和產(chǎn)品系統(tǒng)中應(yīng)用,作為分布式系統(tǒng)要求高擴(kuò)展,高穩(wěn)定,高可靠,高可用,并且部署復(fù)雜、軟件角色多、硬件依賴強(qiáng),對(duì)于測(cè)試來說,分布式系統(tǒng)的測(cè)試面臨以下難點(diǎn):
1 分布式事務(wù):多機(jī)、多角色協(xié)作,測(cè)試場(chǎng)景多且復(fù)雜
2 多線程:多線程場(chǎng)景難模擬
3 多系統(tǒng):關(guān)聯(lián)的外圍系統(tǒng)多,而且又都是分布式
4 一致性要求:強(qiáng)一致、弱一致、最終一致
5 穩(wěn)定性要求:如何保證7*24小時(shí)系統(tǒng)穩(wěn)定
6 可用性要求:各種系統(tǒng)異常場(chǎng)景,軟件、硬件因素
7 兼容性要求:多客戶端服務(wù)端版本,多服務(wù)方式(REST、JavaClient)
8 性能要求:吞吐量和響應(yīng)時(shí)間,軟硬件因素
如何來應(yīng)對(duì)這個(gè)難題,可以從如下幾個(gè)方面來應(yīng)對(duì):
(1)多層次測(cè)試保障。將測(cè)試分為不同的層次,在每個(gè)層次注重不同的測(cè)試重點(diǎn)。
a)單元測(cè)試:開發(fā)人員完成,覆蓋基本邏輯
b)白盒異常測(cè)試:有針對(duì)的對(duì)各個(gè)系統(tǒng)異常進(jìn)行代碼級(jí)模擬,驗(yàn)證系統(tǒng)是否有能力處理并保持可用
c)接口測(cè)試:保證服務(wù)的各個(gè)對(duì)外接口符合預(yù)期,基本功能驗(yàn)證
d)集成測(cè)試:高壓力、高并發(fā)、多種系統(tǒng)協(xié)作的基本功能和異常場(chǎng)景測(cè)試(軟件、硬件異常)
e)穩(wěn)定性測(cè)試:高壓力模擬常見應(yīng)用和故障的混合場(chǎng)景,多種方式并行進(jìn)行。
f)仿真測(cè)試:建立客戶應(yīng)用回歸環(huán)境,仿真客戶使用場(chǎng)景
(2)低成本測(cè)試。所謂低成本測(cè)試就是在測(cè)試過程中采取一系列的策略,降低測(cè)試成本,包括在前期參與設(shè)計(jì)方案評(píng)審和Code Review。明確不可靠模塊的應(yīng)用風(fēng)險(xiǎn),核心模塊的持續(xù)投入,自動(dòng)化回歸和多環(huán)境并行測(cè)試,并且參與線上應(yīng)用情況的分析和線上故障的排查,做好bug的應(yīng)對(duì)方案。
(3)高效定位問題。從測(cè)試用例出發(fā),確定出現(xiàn)bug的特定場(chǎng)景,根據(jù)完善的日志和監(jiān)控體系來進(jìn)一步分析出現(xiàn)問題的條件,從而能逐級(jí)縮小測(cè)試用例,從黑盒的測(cè)試用例轉(zhuǎn)入白盒測(cè)試用例,另外可以利用自動(dòng)化測(cè)試分析工具來進(jìn)行分析。最核心的還是要對(duì)產(chǎn)品本身有深入的了解,產(chǎn)品的需求和產(chǎn)品的實(shí)現(xiàn)都要理解。
(4)DST,分布式系統(tǒng)測(cè)試工具。
DST擁有以下的強(qiáng)大功能:
1 支持編寫測(cè)試用例實(shí)現(xiàn)多機(jī)并行測(cè)試
2 可集成多種已有的測(cè)試工具及用例
3 可配置的監(jiān)控?cái)?shù)據(jù)自動(dòng)收集與展示
4 日志自動(dòng)分析與查看
5 可擴(kuò)展的任務(wù)執(zhí)行控制功能
6 性能、功能結(jié)果對(duì)比
7 測(cè)試報(bào)告自動(dòng)生成
DST的整體框架:
其中WebServer主要提供了測(cè)試管理的功能,包括用例場(chǎng)景,實(shí)驗(yàn)室,集群管理和監(jiān)控日志查看,和測(cè)試報(bào)告生成的功能。
測(cè)試集群完成了測(cè)試用例的分發(fā)和執(zhí)行,并且通過TestCaseRunner來集成多種測(cè)試工具。
數(shù)據(jù)分析平臺(tái)則主要完成監(jiān)控?cái)?shù)據(jù)和日志數(shù)據(jù)的存儲(chǔ)和分析,并將分析結(jié)果推送給WebServer以供用戶查看。
DST的頁面圖
除了以上幾點(diǎn),神秀還分享了一些在分布式系統(tǒng)測(cè)試中積累的一些經(jīng)驗(yàn):
(1)分布式事務(wù)最難搞。需要注意的點(diǎn)有三個(gè):
a)單系統(tǒng)、單機(jī)出現(xiàn)異常不能影響事務(wù)正確性
b)不可過分信任依賴系統(tǒng)
c)系統(tǒng)設(shè)計(jì)時(shí)的檢查更為重要,多系統(tǒng)異常難模擬,難考慮完整。在系統(tǒng)設(shè)計(jì)時(shí)的reivew更能提前發(fā)現(xiàn)問題,避免后續(xù)測(cè)試出現(xiàn)問題再排查浪費(fèi)時(shí)間。
(2)性能的小問題不容忽視。主要體現(xiàn)在以下幾個(gè)方面:
a)關(guān)鍵性能指標(biāo)看不到是系統(tǒng)穩(wěn)定性的地雷
b)通過關(guān)注測(cè)試系統(tǒng)的性能表現(xiàn)可以快速發(fā)現(xiàn)線上系統(tǒng)隱患
c)測(cè)試人員比開發(fā)人員對(duì)線上性能更有發(fā)言權(quán)
d)及時(shí)的給出測(cè)試數(shù)據(jù)和改進(jìn)意見是測(cè)試價(jià)值的體現(xiàn)
e)關(guān)注線上性能表現(xiàn)可以完善測(cè)試用例,更貼近實(shí)際
(3)GC是性能的重要因素??梢詤⒖嫉狞c(diǎn):
a)減少GC暫停時(shí)間是優(yōu)化的目標(biāo)
b)避免內(nèi)存碎片對(duì)應(yīng)用的影響
c)觀察線上系統(tǒng)GC狀況避免故障(內(nèi)存泄露、FullGc)
d)Gc日志和gc監(jiān)控幫助我們發(fā)現(xiàn)最合理的配置
(4)線上最容易發(fā)現(xiàn)隱患,測(cè)試人員要多參與線上應(yīng)用情況和線上問題的分析。
(5)有bug也不能影響系統(tǒng)穩(wěn)定,系統(tǒng)不可能沒有bug,往往出了bug如何處理比bug本身更重要,這對(duì)系統(tǒng)的健壯性和系統(tǒng)的自我調(diào)節(jié)和報(bào)警能力提出了更高的要求。