mysqls壓力測試怎么用_阿里研究員:測試穩定性三板斧,我怎么用?

6a5abb9ea1d9a0003c59faa8b75dca4e.png

阿里妹導讀:如何治理測試穩定性問題?很多人會說:環境、流程管控、監控、工具化、加機器、專人負責、等等。這些都是對的。不過這些都是解決方案層面的,而不是方法論和理論體系層面的。今天,阿里研究員鄭子穎來說說測試穩定性的三板斧。據說,阿里同學們都非常認同這三板斧,看完文章感覺很多做的事情有了理論基礎。

58110923cfeed9557e2dfc2acead9b03.png

鄭子穎:阿里巴巴研究員,2002年上海交通大學計算機系碩士畢業。2018年3月加入阿里,負責質量和技術風險。

1. 測試穩定性問題理想情況下,我們希望每一個失敗的測試用例[1]都是由真正的缺陷引起的。實際情況中,用例失敗的原因大多是一些其他的原因:
  • 某個服務的版本部署的不對
  • 測試執行機的硬盤滿了,因為上次運行時寫的log沒清掉
  • 數據庫里有臟數據
  • 測試用例寫得有問題
  • 測試運行時有人手工執行了一次定時任務,把流水撈走了
  • 消息串了
  • ...
每次排查都是一堆這種問題,時間久了,開發和測試同學也就疲了。有些同學對失敗的用例草草看一眼,就說這是一個“環境問題”,不再排查下去了。如此一來,很多真正的缺陷就被漏過了。

2. 測試穩定性三板斧

如何治理測試穩定性問題?很多人會說:環境、流程管控、監控、工具化、加機器、專人負責、等等。這些都是對的。不過這些都是解決方案層面的,而不是方法論和理論體系層面的。在方法論和理論體系層面,我們對安全生產有三板斧:可灰度、可監控、可回滾。類似的,對于測試穩定性,我也有三板斧:
  • 高頻(Frequency)
  • 隔離(Isolation)
  • 用完即拋(Disposable)

三板斧之一:高頻

"If it hurts, do it more often"是我說的最多的一句話之一。這句話從Martin Fowler那兒來的,有興趣的可以讀一下他的那篇“Frequency Reduces Difficulty”的原文。高頻跑測試的好處是:
  • 縮短驗證的delay
  • 變主動驗證為“消極等待”
  • 識別intermittent的問題
  • 暴露各層面的不穩定因素
  • 倒逼人肉環節的自動化
  • 提供更多的數據供分析
  • ...
高頻不單單是治理測試穩定性的不二法門,也是治理其他工程問題的game changer:
  • 持續打包:以前只是在部署測試環境前才打包,經常因為打包的問題導致部署花了很多時間,還影響了后面的測試進度。針對這個問題,我們做了持續打包,每個小時都會對master的HEAD打包,一旦遇到問題(例如:依賴的mvn包缺失、配置缺失、等等),馬上修復。
  • 天天上生產:現在每周發一次生產環境,每次都費事費力。我提出能不能天天上生產。發布還是按照原來的節奏來,每周發一次新代碼,一周里的其余日子,就算沒有新代碼也要走一遍生產發布。空轉。不為別的,就是為了要用高頻來暴露問題、倒逼人肉環節的自動化、倒逼各種環節的優化。

  • 分支合并很痛苦,那就頻繁合并,一天一次,一天多次。做到極致就變成了主干開發,一直在rebase、一直在提交。

螞蟻的SRE團隊也是用的是高頻的思路。為了加強容災能力建設、提高容災演練的成功率,SRE團隊的一個主打思想就是要高頻演練,用高頻演練來充分暴露問題、倒逼能力建設。

高頻也不是那么容易做到的。高頻需要基建保障。首先,高頻需要資源。高頻執行還會給基建的各個方面造成前所未有的壓力。高頻還需要能力水平達到一定的基準。就拿SRE的高頻演練來說吧。如果每次演練還有很多問題,那是不可能搞高頻的。能高頻做演練的前提是我們的隔離機制、恢復能力已經到一定的水平了。對于測試運行來說,高頻跑測試要收到效果,需要把隔離和用完即拋做好。對于高頻跑測試,一個很常見的疑慮是:原來一天只跑一次,失敗的用例我已經沒有時間一一排查了,現在高頻跑了,我豈不是更沒時間了?我的回答是:實際上,并不會這樣,因為開始高頻跑了以后,很快問題就會收斂的,所以總的需要排查的量可能是差不多的或者反而小了的。

36d4cf567427ad57cf792c68dcf34ece.png

三板斧之二:隔離

相比起三板斧里的其他兩個(高頻、用完即拋),隔離的重要性應該是比較被廣為接受的。隔離的好處包括:
  • 避免測試運行彼此影響,減少噪音。
  • 提高效率,執行某些破壞性測試的時候不再需要相互協調
隔離無非是兩種:硬隔離、軟隔離。至于到底是走硬隔離路線,還是走軟隔離路線,要根據技術棧、架構、業務形態來具體分析。不過兩條道路都是能通往終局:
  • 硬隔離(全隔離環境、物理隔離)要成為終態,關鍵是成本。要在不增加質量盲區的前提下壓縮成本。例如,如果能把整個支付系統都壓縮在一臺服務器里面跑[2],而且所有的功能(包括中間件層面的,例如定時任務、消息訂閱、分庫分表規則等)都能很好的覆蓋,那是一個理想的終局。每個人都可以隨時搞幾套全量環境,那是很爽的。另外,對架構的拆分解耦(例如,我們做的按域獨立發布)是有助于降低硬隔離的成本的,可以把一整套被測系統部署的scope大大縮小。
  • 軟隔離(半共享環境,邏輯隔離,鏈路級別隔離)要成為終局,關鍵是隔離的效果。如果隔離做到完美了,就能把今天的聯調環境部署到生產環境里去跑。這樣,就不存在stable環境穩定性的問題了。這樣,做到了真正的testing in production,也是個很理想的終局狀態。

這兩種終局狀態,我在我以前的工作中都達到過。的確都能work的。這兩種隔離要通往終局,都是技術挑戰。壓縮成本是技術問題。邏輯隔離做徹底做牢靠也是技術問題。對于我們今天的支付或電商系統來說,我們未來的終局是硬隔離還是軟隔離呢?現在還很難說。從技術可行性方面判斷,軟隔離更有可能成為我們的終局。硬隔離做到深水區以后就很難做了,因為會遇到架構的物理極限。突破架構的物理極限,有可能產生新的質量盲區。但相當長的一段時間里,硬隔離會繼續對我們幫助很大。例如,我們要做各種非常規測試的時候,就需要硬隔離。軟隔離要做到能夠支持非常規測試,技術復雜度很高。從上個財年開始,我在我團隊搞一鍵拉全量測試環境(硬隔離)的原因就是:一鍵拉全量環境相對比較容易做,主要就是自動化,而基于路由的軟隔離方案一下子還不太ready,短期內達到我們需要的隔離水平還很難。硬隔離和軟隔離也不是對立的,是可以一起用的。例如,我們在拉起基于路由的隔離環境的時候,拉會新的數據庫。在數據庫層面是一種硬隔離,是對數據庫層面軟隔離能力欠缺的一種補充。總之,隔離是必須的。采取何種隔離方案,要階段性的基于復雜度、成本、效果等因素的綜合考量。

7e5ccce266f1e7b498dc0e2fcc083f87.png

三板斧之三:用完即拋

我最喜歡的另一句話是:Test environment is ephemeral。這句話是我原創的。Ephemeral的意思就是short-living,短暫的,短命的。我對我的QA團隊反復講這句話,希望同學們能在日常工作中時刻記得這個原則。"Test environment is ephemeral"就意味著:
  1. 我們的test setup能力要很強。我們今天在搞的一鍵拉起環境,就是這種能力的一部分。而且setup起來以后,要能快速verify。
  1. 我們的test strategy、test plan、testability design和test automation,必須不依賴一個long living的測試環境。包括:不能依賴一個long living 的test environment里面的一些老數據。例如,Test automation必須能自己造數據,造自己需要的所有的數據。
有了這些能力,能夠以零人力成本、非常快速且非常repeatable的從無到有建一套“開箱即用”的測試環境,能夠造出來測試需要的所有數據,我們就能做到測試環境的用完即拋:要跑測試了就新建一個環境,測試跑完了就把環境銷毀掉。下次要用再建一個新的。而且,不單單是測試環境,測試執行機也要用完即拋。對于用完還需要保留一定時間的環境,也要設一個比較短的上限。例如,我以前采用過這樣的做法:
  • 聯調測試環境默認生命周期是7天。
  • 如果到時間還需要保留,可以延展有效期(expiration date)。每次展期最多可以展7天(相當于是 newExpDate = now + 7,而不是newExpDate = currentExpDate + 7)。
  • 最多可以展期到30天(從createDate開始算),需要30天以上的,需要特批(比如,事業群CTO)。
  • 這樣的好處就是倒逼。必須一刀切的倒逼,一開始會有點痛苦,但很快大家就會習慣的,自動化什么的很快就跟上了。不這么逼一逼,很多改進是不會發生的。
用完即拋的好處是:
  • 解決環境腐化問題,減少臟數據
  • 提高repeatability,確保每次測試運行的環境都是一致的
  • 倒逼各種優化和自動化能力的建設(測試環境的準備、造數據、等等)
  • 提高資源使用的流動性。實際的物理資源不變的前提下,增加流動性就能增加實際容量。
測試環境用完即拋的確會引入一些新的質量風險。如果有一套長期維護的環境,里面的數據是之前老版本的代碼生成的,部署了新版本代碼后,這些老數據是可以幫我們發現新代碼里面的數據兼容性問題的。現在用完即拋,沒有老數據了,這些數據兼容性問題就可能無法發現。這個風險的確是存在的。解決這個風向的思路是往前看,而不是往回退。我們要探索數據兼容性問題是否有其他的解法。有沒有其他的測試或者質量保障手段。甚至要想一想,怎么做到“從測到不測”,把數據兼容性問題通過架構設計來消除掉,讓它不成為一個問題。

3. 落地

上面講的三板斧,高頻、隔離、用完即拋,的確是有點理想主義的。我們今天的基建、架構、自動化建設,離理想狀態還有不少差距的。但我們就是要有那么一點的理想主義的。把這三板斧做好,技術上的挑戰是非常非常大的,但我們有樂觀主義,相信我們能夠達到目標。我們有現實主義,我們可以分解目標,結合實際情況,一步步的去做。Note:[1] 這里的用例主要指的是功能性的測試用例,包括:unit test、單系統的接口測試、全鏈路/端到端的測試,等等。[2] 這樣子做,實操層面的一個可能的負面影響是它可能會discourage微服務化治理(包括,域自治性,獨立測試、獨立發布能力等)。

b3a7d0860a2f9cfbc69a178fe2ef074e.png

你可能還喜歡

點擊下方圖片即可閱讀

4988c95f8099e62917dbe5665f415d6b.png

《長安十二時辰背后的技術秘籍》正式公開

983250856b94b27f78e4c00a1cd405d2.png

結構化數據存儲,如何設計才能滿足需求?

86224c3afa762a08db0ea0912d70b512.png

如何實現一次編碼,到處運行?

70aa16ab2e2565e7190a22ce4e70b8e7.png

關注「阿里技術」

把握前沿技術脈搏

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

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

相關文章

HttpModule與HttpHandler詳解

ASP.NET對請求處理的過程:當請求一個*.aspx文件的時候,這個請求會被inetinfo.exe進程截獲,它判斷文件的后綴(aspx)之后,將這個請求轉交給 ASPNET_ISAPI.dll,ASPNET_ISAPI.dll會通過http管道&…

【iOS開發】---- 強大的UI修改工具 UIAppearance-有圖片效果

iOS5及其以后提供了一個比較強大的工具UIAppearance&#xff0c;可以輕松的統一你的界面&#xff0c;它提供如下兩個方法&#xff1a; (id)appearance (id)appearanceWhenContainedIn:(Class <>)ContainerClass,... 第一個方法是統一全部改&#xff0c;比如你設置UINav…

7月9日王者榮耀服務器維護,王者榮耀 7月9日體驗服停機更新公告

親愛的召喚師&#xff1a;為了增加版本的穩定性&#xff0c;我們計劃在2021年7月9日16:00-17:00對《王者榮耀》體驗服進行停機維護。【更新時間】7月9日16:00-17:00(15:30關閉PVP)【更新方式】停機更新【更新范圍】王者榮耀修煉之地體驗服【下載地址】體驗服更新完畢后&#xf…

使用Jetty設置JNDI(嵌入式)

我在開發工作區上運行嵌入式Jetty&#xff0c;從而節省了一些編譯和部署惡性循環的時間。 我與Jetty的合作不多&#xff0c;易用性使我著迷于它。 我需要設置JNDI才能檢索與數據庫相關的活動的連接池。 盡管某些地方有完整的文檔&#xff0c;但大多數都是分散的。 因此&#xf…

交華為換機access配置_華為交換機Hybrid接口及基礎配置

一、回顧VLANVLAN基本概念VLAN即虛擬局域網&#xff0c;是將一個物理的LAN在邏輯上劃分成多個廣播域(多個VLAN)的通信技術。VLAN內的主機間可以直接通信&#xff0c;而VLAN間不能直接互通&#xff0c;從而將廣播報文限制在一個VLAN內。由于VLAN之間的隔離&#xff0c;所以一些類…

HttpClient使用之下載遠程服務器中的文件(注意目錄遍歷漏洞)

參考文獻&#xff1a; http://bbs.csdn.net/topics/390952011 http://blog.csdn.net/ljj_9/article/details/53306468 1.下載地址 http://hc.apache.org/downloads.cgi Apache-》Projects-》HttpComponents 2.DownloadServlet 1 package com.servlet;2 3 import java.io.Buffer…

HDOJ-1263

水果 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 5303 Accepted Submission(s): 2022 Problem Description夏天來了~~好開心啊,呵呵,好多好多水果~~Joe經營著一個不大的水果店.他認為生存之道就是經營最受顧…

django ajax form表單,Django學習系列之Form表單和ajax(示例代碼)

昵 稱&#xff1a;生 日&#xff1a;性 別&#xff1a; 男 女地 址&#xff1a;手 機 號&#xff1a;郵 箱&#xff1a;[修改]{% csrf_token %}$(\#jsEditUserBtn\).on(\click\, function(){var _self $(this),$jsEditUserForm $(\#…

git push 的符號筆有什么用_如何同步多個 git 遠程倉庫

點擊上方“后端技術精選”&#xff0c;選擇“置頂公眾號”技術文章第一時間送達&#xff01;作者&#xff1a;taadismy.oschina.net/taadis/blog/3073220題外話&#xff0c;開發中遇到問題或者學習新技術時缺少交流環境&#xff0c;可以點擊加入【后端技術交流群】日常需求以前…

Java EE重新審視設計模式:觀察者

除了以多種語言和許多應用程序實現之外&#xff0c;Observer Pattern自1.0版以來一直是Java的一部分。 觀察者模式也是好萊塢原則的良好實施。 就像好萊塢的特工喜歡回調候選人以代替某個職位&#xff0c;而不是每天被要求詢問可用工作一樣&#xff0c;大多數服務器端資源&…

POI搜索簡介

用戶輸入——用戶輸出-----------------------------------------------------------而POI搜索引擎&#xff0c;需要做的就是拿到輸入條件&#xff0c;給出用戶比較滿意的結果。用戶角度&#xff1a;輸入&#xff1a;盡量簡單&#xff0c;且符合心意輸入時的假設&#xff1a;假…

2、Spring的 IoC詳解(第一個Spring程序)

Spring是為了解決企業應用開發的復雜性而創建的一個輕量級的控制反轉&#xff08;IoC&#xff09;和面向切面&#xff08;AOP&#xff09;的容器框架。在這句話中重點有兩個&#xff0c;一個是IoC&#xff0c;另一個是AOP。今天我們講第一個IoC。 一. IoC理論的背景 我們都知道…

排除服務器簡單系統故障方法,引導CD排除服務器故障方法有哪些?

盡管Linux系統以穩定可靠著稱&#xff0c;但由于硬件問題有時仍會崩潰/或無法引。針對這一問題&#xff0c;最好的解決辦法就是使用Linux系統引導CD。為了方便讀者&#xff0c;筆者在下面列出了安裝Red Hat Linux 8。0的最必須步驟。為安裝過程作筆記在Red Hat Linux系統典型安…

js 獲取father_(原創)Node.JS實戰26:強大的工作池。收藏吧!你一定會用的到。...

在實際項目中&#xff0c;如果遇到需要大計算量的操作&#xff0c;按需fork&#xff08;分叉&#xff09;其實不是一個好的選擇。因為fork的子進程也是V8&#xff08;NodeJS的核心引擎&#xff09;的新實例&#xff0c;每創建一個新實例&#xff0c;需要約30毫秒啟動時間&#…

具有ReadWriteLock的Java并發

編寫多線程Java應用程序并不是小菜一碟。 必須格外小心&#xff0c;因為同步不良會使您的應用程序一s不振。 JVM堆由所有線程共享。 如果多個線程需要同時使用相同的對象或靜態類變量&#xff0c;則必須謹慎管理對共享數據的線程訪問。 從1.5版開始&#xff0c;JSDK中包含了在并…

修復steam服務器失敗,steam服務器鏈接失敗

steam服務器鏈接失敗 內容精選換一換當NTP服務器異常時產生該告警。當NTP服務器異常消除時&#xff0c;該告警恢復。主OMS節點配置的NTP服務器異常&#xff0c;可能會導致主OMS節點與外部服務器不能同步時間&#xff0c;集群時間可能會產生飄移。NTP服務器網絡異常。與NTP服務器…

qemu-kvm簡單使用

qemu-kvm主要有以下幾個選項: -snapshot: 創建快照-m: 指定內存大小-smp: 指定處理器個數-cpu: 指定CPU類型-name: 設置虛擬機名稱-vnc: 使用vnc連接-boot: 指定啟動相關的選項-net: 指定網卡相關的選項-drive: 指定硬盤/光盤相關的選項qemu-kvm -m 128 -name first -smp 2 -dr…

將jar添加到發布目錄_第32批免購置稅新能源車型目錄發布;通用BEV3平臺將入華...

1、第32批免購置稅新能源車型目錄發布&#xff0c;幾何X/理想ONE等283款車型入選6月2日&#xff0c;工信部發布《免征車輛購置稅的新能源汽車車型目錄(第三十二批)》&#xff0c;共有283款新能源車型入選。其中新能源乘用車方面包括&#xff0c;一汽大眾Q2L/e-BORA、東風風神E7…

HPROF –內存泄漏分析教程

本文將為您提供有關如何通過生成和分析Sun HotSpot JVM HPROF堆轉儲文件來分析JVM內存泄漏問題的教程。 一個現實的案例研究將用于此目的&#xff1a;Weblogic 9.2內存泄漏影響Weblogic Admin服務器。 環境規格 Java EE服務器&#xff1a;Oracle Weblogic Server 9.2 MP1 中…

mq服務器與客戶端消息同步,使用 ActiveMQ 實現JMS 異步調用

目錄簡介服務之間的同步調用&#xff0c;可以使用 HTTP 或 RPC 來完成&#xff0c;但并非所有的調用都需要同步&#xff0c;有些場景下&#xff0c;當客戶端調用服務端時&#xff0c;并不需要等待服務端做出響應&#xff0c;此時就應該使用異步調用。異步調用的常用方式是基于 …