mysqls压力测试怎么用_阿里研究员:测试稳定性三板斧,我怎么用?
阿里妹導(dǎo)讀:如何治理測試穩(wěn)定性問題?很多人會說:環(huán)境、流程管控、監(jiān)控、工具化、加機(jī)器、專人負(fù)責(zé)、等等。這些都是對的。不過這些都是解決方案層面的,而不是方法論和理論體系層面的。今天,阿里研究員鄭子穎來說說測試穩(wěn)定性的三板斧。據(jù)說,阿里同學(xué)們都非常認(rèn)同這三板斧,看完文章感覺很多做的事情有了理論基礎(chǔ)。
鄭子穎:阿里巴巴研究員,2002年上海交通大學(xué)計(jì)算機(jī)系碩士畢業(yè)。2018年3月加入阿里,負(fù)責(zé)質(zhì)量和技術(shù)風(fēng)險(xiǎn)。
1. 測試穩(wěn)定性問題理想情況下,我們希望每一個(gè)失敗的測試用例[1]都是由真正的缺陷引起的。實(shí)際情況中,用例失敗的原因大多是一些其他的原因:- 某個(gè)服務(wù)的版本部署的不對
- 測試執(zhí)行機(jī)的硬盤滿了,因?yàn)樯洗芜\(yùn)行時(shí)寫的log沒清掉
- 數(shù)據(jù)庫里有臟數(shù)據(jù)
- 測試用例寫得有問題
- 測試運(yùn)行時(shí)有人手工執(zhí)行了一次定時(shí)任務(wù),把流水撈走了
- 消息串了
- ...
2. 測試穩(wěn)定性三板斧
如何治理測試穩(wěn)定性問題?很多人會說:環(huán)境、流程管控、監(jiān)控、工具化、加機(jī)器、專人負(fù)責(zé)、等等。這些都是對的。不過這些都是解決方案層面的,而不是方法論和理論體系層面的。在方法論和理論體系層面,我們對安全生產(chǎn)有三板斧:可灰度、可監(jiān)控、可回滾。類似的,對于測試穩(wěn)定性,我也有三板斧:- 高頻(Frequency)
- 隔離(Isolation)
- 用完即拋(Disposable)
三板斧之一:高頻
"If it hurts, do it more often"是我說的最多的一句話之一。這句話從Martin Fowler那兒來的,有興趣的可以讀一下他的那篇“Frequency Reduces Difficulty”的原文。高頻跑測試的好處是:- 縮短驗(yàn)證的delay
- 變主動(dòng)驗(yàn)證為“消極等待”
- 識別intermittent的問題
- 暴露各層面的不穩(wěn)定因素
- 倒逼人肉環(huán)節(jié)的自動(dòng)化
- 提供更多的數(shù)據(jù)供分析
- ...
- 持續(xù)打包:以前只是在部署測試環(huán)境前才打包,經(jīng)常因?yàn)榇虬膯栴}導(dǎo)致部署花了很多時(shí)間,還影響了后面的測試進(jìn)度。針對這個(gè)問題,我們做了持續(xù)打包,每個(gè)小時(shí)都會對master的HEAD打包,一旦遇到問題(例如:依賴的mvn包缺失、配置缺失、等等),馬上修復(fù)。
天天上生產(chǎn):現(xiàn)在每周發(fā)一次生產(chǎn)環(huán)境,每次都費(fèi)事費(fèi)力。我提出能不能天天上生產(chǎn)。發(fā)布還是按照原來的節(jié)奏來,每周發(fā)一次新代碼,一周里的其余日子,就算沒有新代碼也要走一遍生產(chǎn)發(fā)布。空轉(zhuǎn)。不為別的,就是為了要用高頻來暴露問題、倒逼人肉環(huán)節(jié)的自動(dòng)化、倒逼各種環(huán)節(jié)的優(yōu)化。
分支合并很痛苦,那就頻繁合并,一天一次,一天多次。做到極致就變成了主干開發(fā),一直在rebase、一直在提交。
螞蟻的SRE團(tuán)隊(duì)也是用的是高頻的思路。為了加強(qiáng)容災(zāi)能力建設(shè)、提高容災(zāi)演練的成功率,SRE團(tuán)隊(duì)的一個(gè)主打思想就是要高頻演練,用高頻演練來充分暴露問題、倒逼能力建設(shè)。
高頻也不是那么容易做到的。高頻需要基建保障。首先,高頻需要資源。高頻執(zhí)行還會給基建的各個(gè)方面造成前所未有的壓力。高頻還需要能力水平達(dá)到一定的基準(zhǔn)。就拿SRE的高頻演練來說吧。如果每次演練還有很多問題,那是不可能搞高頻的。能高頻做演練的前提是我們的隔離機(jī)制、恢復(fù)能力已經(jīng)到一定的水平了。對于測試運(yùn)行來說,高頻跑測試要收到效果,需要把隔離和用完即拋?zhàn)龊谩τ诟哳l跑測試,一個(gè)很常見的疑慮是:原來一天只跑一次,失敗的用例我已經(jīng)沒有時(shí)間一一排查了,現(xiàn)在高頻跑了,我豈不是更沒時(shí)間了?我的回答是:實(shí)際上,并不會這樣,因?yàn)殚_始高頻跑了以后,很快問題就會收斂的,所以總的需要排查的量可能是差不多的或者反而小了的。三板斧之二:隔離
相比起三板斧里的其他兩個(gè)(高頻、用完即拋),隔離的重要性應(yīng)該是比較被廣為接受的。隔離的好處包括:- 避免測試運(yùn)行彼此影響,減少噪音。
- 提高效率,執(zhí)行某些破壞性測試的時(shí)候不再需要相互協(xié)調(diào)
- 硬隔離(全隔離環(huán)境、物理隔離)要成為終態(tài),關(guān)鍵是成本。要在不增加質(zhì)量盲區(qū)的前提下壓縮成本。例如,如果能把整個(gè)支付系統(tǒng)都壓縮在一臺服務(wù)器里面跑[2],而且所有的功能(包括中間件層面的,例如定時(shí)任務(wù)、消息訂閱、分庫分表規(guī)則等)都能很好的覆蓋,那是一個(gè)理想的終局。每個(gè)人都可以隨時(shí)搞幾套全量環(huán)境,那是很爽的。另外,對架構(gòu)的拆分解耦(例如,我們做的按域獨(dú)立發(fā)布)是有助于降低硬隔離的成本的,可以把一整套被測系統(tǒng)部署的scope大大縮小。
軟隔離(半共享環(huán)境,邏輯隔離,鏈路級別隔離)要成為終局,關(guān)鍵是隔離的效果。如果隔離做到完美了,就能把今天的聯(lián)調(diào)環(huán)境部署到生產(chǎn)環(huán)境里去跑。這樣,就不存在stable環(huán)境穩(wěn)定性的問題了。這樣,做到了真正的testing in production,也是個(gè)很理想的終局狀態(tài)。
三板斧之三:用完即拋
我最喜歡的另一句話是:Test environment is ephemeral。這句話是我原創(chuàng)的。Ephemeral的意思就是short-living,短暫的,短命的。我對我的QA團(tuán)隊(duì)反復(fù)講這句話,希望同學(xué)們能在日常工作中時(shí)刻記得這個(gè)原則。"Test environment is ephemeral"就意味著:- 聯(lián)調(diào)測試環(huán)境默認(rèn)生命周期是7天。
- 如果到時(shí)間還需要保留,可以延展有效期(expiration date)。每次展期最多可以展7天(相當(dāng)于是 newExpDate = now + 7,而不是newExpDate = currentExpDate + 7)。
- 最多可以展期到30天(從createDate開始算),需要30天以上的,需要特批(比如,事業(yè)群CTO)。
- 這樣的好處就是倒逼。必須一刀切的倒逼,一開始會有點(diǎn)痛苦,但很快大家就會習(xí)慣的,自動(dòng)化什么的很快就跟上了。不這么逼一逼,很多改進(jìn)是不會發(fā)生的。
- 解決環(huán)境腐化問題,減少臟數(shù)據(jù)
- 提高repeatability,確保每次測試運(yùn)行的環(huán)境都是一致的
- 倒逼各種優(yōu)化和自動(dòng)化能力的建設(shè)(測試環(huán)境的準(zhǔn)備、造數(shù)據(jù)、等等)
- 提高資源使用的流動(dòng)性。實(shí)際的物理資源不變的前提下,增加流動(dòng)性就能增加實(shí)際容量。
3. 落地
上面講的三板斧,高頻、隔離、用完即拋,的確是有點(diǎn)理想主義的。我們今天的基建、架構(gòu)、自動(dòng)化建設(shè),離理想狀態(tài)還有不少差距的。但我們就是要有那么一點(diǎn)的理想主義的。把這三板斧做好,技術(shù)上的挑戰(zhàn)是非常非常大的,但我們有樂觀主義,相信我們能夠達(dá)到目標(biāo)。我們有現(xiàn)實(shí)主義,我們可以分解目標(biāo),結(jié)合實(shí)際情況,一步步的去做。Note:[1] 這里的用例主要指的是功能性的測試用例,包括:unit test、單系統(tǒng)的接口測試、全鏈路/端到端的測試,等等。[2] 這樣子做,實(shí)操層面的一個(gè)可能的負(fù)面影響是它可能會discourage微服務(wù)化治理(包括,域自治性,獨(dú)立測試、獨(dú)立發(fā)布能力等)。你可能還喜歡
點(diǎn)擊下方圖片即可閱讀
《長安十二時(shí)辰背后的技術(shù)秘籍》正式公開
結(jié)構(gòu)化數(shù)據(jù)存儲,如何設(shè)計(jì)才能滿足需求?
如何實(shí)現(xiàn)一次編碼,到處運(yùn)行?
關(guān)注「阿里技術(shù)」
把握前沿技術(shù)脈搏
總結(jié)
以上是生活随笔為你收集整理的mysqls压力测试怎么用_阿里研究员:测试稳定性三板斧,我怎么用?的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: “漏井终不溢”上一句是什么
- 下一篇: mysql所支持的比较运算符_mysql