對頁面進行壓測 流量複製與回放與壓測平台化

2021-10-14 17:25:30 字數 3734 閱讀 8283

背景

每逢618、11.11大促,都需要提前對系統進行壓力測試,盡早評估系統的各項執行指標,全面做好備戰。如果要準確的模擬使用者的場景進行壓力測試,就需要龐大體量的使用者資料支援,比如要對搜尋的介面進行大規模壓測,就需要大批量的搜尋詞來模擬介面的實際呼叫,而且這些搜尋詞最好是與使用者實際購物過程中所使用的一致,這樣才能對系統產生有效的壓力。那麼這些搜尋詞從何而來,怎麼產生,最直接有效的方式就是使用前台輸入的內容。為了達到這個效果,我們跟研發人員合作,在某幾台伺服器上開啟操作跟蹤日誌,記錄不同時刻的搜尋詞並進行儲存,在實際進行壓力測試的時候,讀取這些搜尋詞,輸入到介面中,完成相關的壓力測試;但是收集這些搜尋詞,對其進行二次處理,拼接可以實際呼叫的介面,都需要消耗大量的時間和成本。

流量複製與回放

針對上面提到的測試需求,我們實際使用了提取使用者輸入資料,線上服務與待發布服務進行比對測試等方法進行滿足外,同時也在積極探索另外一種高效的測試模式-流量複製與回放。

什麼是流量複製?

什麼是流量回放?

獲取到複製下來的流量以後,我們按照接收的時間順序,將它們一條一條的傳輸到待測試的服務中,讓測試服務產生相應的響應;相當於實際使用者幫助我們進行測試。

通常有以下幾種回放測試的情景:

(1)    複製下來什麼內容就回放什麼內容,即全量回放;

(2)    複製下來的內容進行一些預設規則的過濾,或者特殊的處理後,再進行回放,即選擇性回放;

tcpcopy是比較常用,極其優秀的流量複製回放工具,但是其對組網的要求較高,對於網路不熟悉的同學入門比較難,而且擴充套件起來也有些難度,為了便於測試人員方便使用,最好是能夠通過頁面進行簡單的設定後就可以達到理想的效果,我們嘗試開發了一款流量複製回放的平台-狙擊手測試平台。

平台化

3.1 平台特性

功能多樣:狙擊手測試平台能夠完成對特定系統服務(通過網域名稱區分)進行線上流量複製,並利用這些流量完成單機的效能調優測試,常態化壓測,以及對比性回歸測試等;

方便快捷:平台接入非常簡單,使用者僅需要填寫服務的網域名稱,並選擇網域名稱下需要進行壓測或者比對的介面名,即可進行週期性的常態化壓測和對比測試;

資料安全:狙擊手測試平台複製的資料對使用者是完全透明、無感知的,平台在設計之初就充分考慮了使用者資料的安全性,不會存在資料洩露的問題;

可追溯性:每次測試結果均會進行持久化操作,方便測試人員、開發人員進行資料查詢以及問題復現,並能夠形成某段週期內的趨勢性資料;

可擴充套件性:流量復**務,流量回放服務都是分布式實現,並統一進行排程管理,非常易於擴充套件。

3.2 平台基礎架構

狙擊手測試平台主要由流量控制和管理中心、流量復**務、流量處理服務、流量回放服務以及流量跟蹤和資料持久化中心5大核心模組組成。

流量復**務:主要負責從線上服務中複製流量,做到隨用隨複製,不需要的時候保持靜默,不損耗系統資源。

流量處理服務:主要負責對線上複製的流量進行處理,這裡包括離線處理和實時處理兩大類,主要是過濾掉不需要進行回放的介面,比如寫庫型別的介面,如果直接回放到測試服務中,也會進行對應的寫庫操作,如果正好共用同一套資料庫,就會造成大量髒資料,甚至對整體的業務流程產生影響。

流量回放服務:接收處理過的流量,進行回放,支援並行產生大量併發的流量,達到壓測的目的。

流量跟蹤和資料持久化中心:從流量複製到流量回放,整個過程跟蹤,以及產生的請求和響應資料,比如壓測的實際效果,qps、cpu等資料,均需要進行持久化儲存,進行分析,及時發現問題。

3.3 平台功能

常態化壓測是以一定的頻率對系統的單機服務進行壓測,通常是以固定的請求量或者固定的cpu使用率進行,經過週期性積累,可以發現單機服務效能的變更情況(由於服務經常會進行上線操作,為防止效能的衰減,對系統服務進行常態化壓測就顯得尤為重要)。一次正常的常態化壓測會經歷如圖所示的五個過程:

常態化壓測與傳統壓測平台的主要區別在於:傳統壓測平台通常需要使用者提供測試報文鏈結,提供可用的測試資料,編寫測試指令碼等工作;常態化壓測是全自動方式執行,不需要人工干預,也不需要使用者組織請求報文,提取測試資料等較為複雜的行為;在一定程度上可以作為傳統壓測平台的有效補充。

動態回歸

動態回歸測試是流量複製與回放的另乙個典型應用,將線上服務的流量複製後,經過流量處理,實時回放到被測服務中,被測服務可能是包含了新的功能點即將上線的服務。這個過程中一邊複製一邊回放,一邊同步進行返回值的結果對比,經過以上對比測試後,能夠提公升服務上線的成功率。

效果及不足

4.1  應用接入

平台的接入非常簡單,業務僅需提供接入的網域名稱,並提供一台部署了服務但已摘除流量的機器作為被測服務,在平台上設定好目標qps以及自動執行的時間,即完成接入過程。

4.2 運營結果

以上是某個業務一段時間累計的常態化壓測結果趨勢資料,圖中可以看到qps、cpu在這段時間的變化趨勢,根據這個變化的趨勢,我們可以去檢視詳細資料,並分析降低的原因是什麼,以及後續公升高的原因又是什麼,是不是因為某次上線引起了相應的變化。

目前平台已經對30個左右的核心服務進行了常態化壓測的跟蹤,對於系統單機容量的評估起到了非常重要的參考作用。

4.3 平台不足

協議支援:由於業務大部分處於前台,而且基本都是http介面,所以平台設計之初就僅僅支援http協議的複製與回放,後續我們也將根據實際需求,嘗試對公司內部jsf協議介面的零門檻複製與回放;

常態化壓測:目前常態化是週期性開展,後續也將嘗試與持續交付平台、穹天平台對接,做到事件觸發,有變更就壓測,就比對,讓每一次壓測和比對都能產生有效結果;

寫介面:由於回放後對寫介面的操作,可能會產生髒資料,這些還依賴於業務側進行相應的髒資料過濾,或者對寫介面的回放操作進行必要的**,鑑於以上問題的風險,寫介面的回放操作平台還不能很好的支援,這也是後續我們需要持續改進的地方。

總結

狙擊手測試平台充分利用線上已有的流量資料,經過平台加工處理後回放到指定的服務中,完成自動化的常態化壓力測試,回歸比對測試等,從很大程度上減輕了測試人員編寫指令碼,收集測試資料等重複性且耗時的工作。但是平台也只是眾多測試方法中的冰山一角,在測試的技術發展上仍然任重而道遠,我們也期望測試人員都能成為這個發展道路上的狙擊手,進行精準測試,成為產品質量的忠實守護者。

全鏈路壓測流量模型

現在全鏈路越來越火,各大廠商也紛紛推出了自己的全鏈路壓測測試方案。特別是針對全鏈路壓測流量模型,各家方案都有所不同。最近我看了一些這方面的資料,有一些感悟。分享給大家。全鏈路壓測流量模型的梳理呢,這裡就先不講了,各家公司自有司情在。因為主要是全鏈路壓測模型的實現,其實實現也對應了流量模型的梳理結果。...

對頁面進行分割

如下效果 下面兩個藍框 通過選擇左邊藍框中的選單,在右邊藍框區域顯示對應內容。通過新增標籤實現,在屬性src裡放資源 asp content id bodycontent contentplaceholderid maincontent runat server iframe runat serve...

使用Mysqlslap對Mysql進行壓力測試

mysql5.1版本之後mysql伺服器自帶的基準測試工具,隨mysql一起安裝,可以模擬伺服器負載,並輸出相關的統計資訊,可以指定或自動生成查詢語句。mysqlslap mysqlslap concurrency 50,300 併發50,300個程序 iterations 3 測試執行次數 num...