<output id="uabzf"></output>
<code id="uabzf"><ol id="uabzf"></ol></code>

        1. 全鏈路壓測——持續測試(23)

          發表于:2022-10-21 09:43

          字體: | 上一篇 | 下一篇 | 我要投稿

           作者:陳磊    來源:51Testing軟件測試網原創

          分享:
            3.2  全鏈路壓測
            相對于全鏈路壓測而言,本書前面介紹的測試應該稱作單點單鏈路性能測試。也就是說,之前講解的性能測試中,每一個性能測試都是針對某一個業務場景的單鏈路測試,測試過程的所有并發用戶都使用一個業務流入口,而全鏈路壓測會涉及多個核心業務、多個訪問入口。
            3.2.1  全鏈路壓測的本質
            全鏈路壓測是一個解決方案,并不僅僅是一項技術。全鏈路壓測最早是阿里巴巴為了保障類似于“雙十一”這樣的大型促銷活動(簡稱大促)的穩定性而提出的一種驗證手段。為了理解全鏈路壓測,要先細分一下不同性能測試場景中的壓力測試方法。
            1.單點單鏈路壓測
            單點單鏈路壓測是非常原始、傳統的壓力測試場景構造方法。假設有對拉勾教育系統進行性能測試的需求,那么測試工程師會先站在用戶訪問的角度,找出訪問量比較大的業務流程,然后為每一個業務設計壓力測試場景,并進行測試,如圖3-17所示。
          圖3-17  需要性能測試的業務流
            當接到性能測試任務時,首先會選取訪問量較高的兩個流程,然后分析訪問量,通過訪問入口的Nginx得到各個流程中訪問量的峰值,并使用該峰值進行壓力測試。假設購買課程流程的峰值為5000,學習流程的峰值為3000,則設計的壓力測試場景分別如圖3-18和圖3-19所示。
          圖3-18  購課流程的壓力測試場景
            其中,CSTX_LA0001測試用例中,單擊“加入學習”按鈕后,線上流程中跳出支付控件頁面,而測試環境中直接使用MOCK服務替換掉真實支付環節。從上面的設計中可以看出,每一個業務流程都是通過單一入口、相同的并發量完成課程購買流程與學習流程的性能測試的。
          圖3-19  學習業務的壓力測試場景
            2.混合場景壓測
            單點單鏈路壓力測試場景設計是傳統性能測試中的主要工作內容,但是除此之外還存在多點單鏈路壓測,只是這里不稱多點單鏈路,而稱作混合場景。
            還以購課流程為例進行介紹,假設通過鏈路跟蹤對購買課程中5000人并發訪問的數據做進一步的分析,發現這5000人中有1800人在訪問首頁,1200人完成了登錄,1000人在選課頁面瀏覽課程列表,800人在訪問課程詳情頁,200人完成了購買。性能測試的混合場景壓測按此比例進行設計并測試即可,如圖3-20所示。
          圖3-20  混合場景壓測
            3.2.2  全鏈路壓測是技術驅動的測試
            上面講的兩種方法都無法滿足電商在大促時段的并發訪問模型。在電商大促開始的時刻,大量流量會涌入系統,要驗證系統是否能夠承受住如此大的訪問流量,需要對系統的全部服務層、數據層、緩存、消息隊列、中間件等做整體驗證。在大流量的突發性訪問之下,任何一個環節的薄弱點都可能成為壓死駱駝的最后一根稻草。這促使了全鏈路壓測的出現,它通過最真實地模擬大促類訪問時段的流量訪問,驗證系統的可靠性。換句話說,全鏈路壓測就是一次大促訪問行為的模擬演練。要推行全鏈路壓測,就要先完成內部的技術支持。
            要為全鏈路壓測做好準備,就必須完成下面兩方面的任務。
            全鏈路壓測平臺的準備:要有能夠完成壓力測試場景的配置、流量的生產、數據的顏色設置、系統風險的預警等功能的技術平臺,以按照實際訪問業務流和實際場景為系統制造壓力。
            系統的改造:全鏈路壓測是在生產環境中進行的,不能讓壓力測試影響真實用戶,所以需要對系統進行技術改造,以完成流量隔離,使系統能夠區分是壓測的流量還是真實用戶的流量。
            這些工作主要分為三大部分:一是壓測管理,二是隔離,三是風險預警。
            1.壓測管理
            一般全鏈路壓測是以客戶入口為起點的,所以目前全鏈路壓測的流量計算從截獲一段時間內實際用戶的訪問流量開始。
            對于線上數據,首先要脫敏。將一段時間內的線上數據脫敏后存儲到本地的數據存儲服務中,這樣當需要要做壓測時就對截獲的流量進行一些處理。這些處理主要用于為流量添加一些標記,通過這些標記讓系統可以快速識別出哪些流量是壓測產生的,哪些是真實產生的。
            打標的常規做法就是在某一不重要的部分加入一個特別標記,例如,對于HTTP,一般在訪問頭信息中加入一個特別標記,這主要借助HTTP的自定義頭實現。自定義專用消息頭可通過“X-”前綴添加,RCF6648中已不再建議使用自定義頭,原因在于未來非標準頭字段被標準化時容易引起一些疑惑。
            因此,在全鏈路測試中,我們仍然可以使用自定義頭來完成壓測流量的標記,這個處理也稱作流量顏色。被上色后的流量按照已經設定好的壓測場景,通過不同地域、不同機房下發到系統中之后,就完成了壓力的改造和測試工作。
            2.隔離
            隔離指數據隔離和服務隔離。因為在壓測過程中會對生產系統中絕大部分的服務產生訪問行為,所以就會有大量的數據要存入數據層中,但是這些測試數據不希望污染生產數據持久化層。因此,要有隔離方法,能夠實現數據隔離及某些特殊服務的隔離。
            在全鏈路壓測方案中,數據隔離是通過建立影子數據層來實現的。這種影子數據層的建立主要有兩種方法:一種是使用獨立的數據層服務,另一種是使用打標的數據存儲。
            獨立的數據層服務就是建立一套和生產一模一樣的數據層服務。在進行系統技術改造時,在業務層和數據層之間添加一層代理,將有壓測標記的業務數據存入影子數據服務中,將沒有標記的業務數據存入生產數據服務中,這樣就在代理中完成了數據的分流處理。這種方式比較適合數據庫、Elasticsearch等。
            針對不同的存儲類型,在全鏈路壓測的落地實踐中推薦使用不同的影子庫搭建方式,例如,數據存儲在MySQL中,在同一個MySQL實例、不同的Schema中創建一套和線上相同的庫表結構,并且把線上數據導入進來。如果數據存放在Redis中,為壓測流量產生的數據添加統一的前綴,并存儲在同一份存儲中。
            還有一些數據會存儲在Elasticsearch中,這部分數據也可以存放在另外一個單獨的索引表中。數據打標指將有壓測標記的流量數據以統一加上某一個前綴的形式存入與生產數據相同的數據層服務中,以方便區分是壓測數據還是生產數據,這種方案比較適合Redis、HBase等數據層的服務。
            服務隔離這里其實是指MOCK服務,MOCK服務是解耦服務的一種,與很多其他服務統稱為測試替身(TestDouble)。
            全鏈路壓測中的“全”字的意義并非指整個系統,不能一味地確定那個“全”字的覆蓋范圍,在現實情況中有很多請求必須使用測試替身服務,否則會對真實用戶或系統產生影響。例如,瀏覽商品并下單、購買時,若不能付費,就必須調用MOCK服務完成業務流,而且合作的支付方公司也不會同意直接把壓力施加到他們公司的服務上,就算合作方同意,那做一次測試又要花多少費用呢?
            需要服務隔離的另一種情況就是訪問數據影響結果的功能,例如,功能模塊的埋點收集服務,如果全鏈路壓測過程中增加了某些模塊的訪問次數,而這些模塊的訪問次數會通過埋點返回分析系統中,那么全鏈路壓測過程中就要利用測試替身服務替換埋點服務,從而避免壓測過程為分析服務引入大量的噪聲。
            還有一種情況就是一次性服務,即系統中有相同主鍵不能重復處理的流程。例如,對于抽獎系統,如果在全鏈路壓測中使用用戶的賬號抽完了獎,那么真實用戶訪問時就沒有資格再次參加了,這就影響了真實用戶的反饋,所以抽獎服務也要使用測試替身完成對應服務的解耦。
            3.風險預警
            全鏈路壓測最后必不可少的是風險預警。全鏈路壓測是在真實生產環境中運行的,雖然測試人員會在系統的低谷期進行測試,但是仍有真實用戶在使用系統,所以在實施全鏈路壓測時,一定要有一套完善的監控和預警機制。在測試過程中如果監控指標超過安全水位,應立即報警,以便快速對壓測進行調整。
            全鏈路壓測最近幾年名聲大噪,電商平臺中的購物節運營策略是針對系統中超大規模的瞬時并發訪問制定的。全鏈路壓測是一個由研發人員、測試人員、運維人員群策群力的實踐方案,并不是某一個工具、某一個角色能獨立完成的。最重要的一點就是并不是每一個業務形態都需要全鏈路壓測,要站在正確的業務視角選擇正確的測試技術。
          查看《持續測試》全部連載章節
          版權聲明:51Testing軟件測試網獲得作者授權連載本書部分章節。
          任何個人或單位未獲得明確的書面許可,不得對本文內容復制、轉載或進行鏡像,否則將追究法律責任
          價值398元的測試課程免費贈送,填問卷領取吧!

          關注51Testing

          聯系我們

          快捷面板 站點地圖 聯系我們 廣告服務 關于我們 站長統計

          法律顧問:上海漕溪律師事務所 項棋律師
          版權所有 上海博為峰軟件技術股份有限公司 Copyright©51testing.com 2003-2022
          投訴及意見反饋:webmaster@51testing.com; 業務聯系:service@51testing.com 021-64471599-8017

          滬ICP備05003035號

          滬公網安備 31010102002173號

          明星乱亚洲合成图com|国产真实破苞视|日本a级不打码按摩片|一本通中文字幕亚洲欧美
          <output id="uabzf"></output>
          <code id="uabzf"><ol id="uabzf"></ol></code>