天天看點

性能工具之Taurus場景使用(進階篇)

在上兩文中介紹了安裝和入門使用,本文我們來看看 Taurus 一些進階的玩法。​​​​​​

複雜場景的壓力測試,如果有多個同學從事腳本開發,則有時必須使用多個測試腳本檔案。這意味着将多個測試腳本需要內建到單個壓力測試中。在 JMeter 中可以通過使用 ​<code>​TestFragments​</code>​ 功能部分解決,但是它需要手動管理主測試子產品才能添加測試片段,将其排列到線程組中,計算壓力場景等。

下面将介紹 Taurus 運作 JMeter 測試,從 YAML 設定和覆寫 JMeter 測試的某些測試參數,以及使用多個 YAML 檔案建構統一的單個測試的各種場景。

這裡我示範三個 JMeter 示例腳本:

build-ftp-test-plan.jmx

build-webservice-test-plan

jmx build-web-test-plan.jmx

運作多個 JMeter JMX 測試就将路徑傳遞到 bzt 指令即可,如下所示:

終端中顯示實時測試狀态:

性能工具之Taurus場景使用(進階篇)

測試後的摘要統計資訊:

性能工具之Taurus場景使用(進階篇)

Taurus 自動擷取 JMeter JMX 腳本并同時執行它們,同時 Taurus 為每個 JMeter 測試腳本生成了一組額外的結果:

性能工具之Taurus場景使用(進階篇)

檔案說明:

modified_xxxx.jmx:注入了結果編寫器的實際 JMX 檔案

kpi.jtl:主要結果檔案(CSV)

errors.jtl:包含有關錯誤的全面資訊(XML)

jmeter.log:JMeter引擎日志檔案

等等

通過 Taurus 執行的每個 JMeter 腳本都有其自己的結果集。這裡結果檢視可以使用 ​<code>​MergeResults​</code>​插件,該插件可以根據提供的檔案的 .jtl 結果繪制區分的圖或合并的圖。

具體參考:https://jmeter-plugins.org/wiki/MergeResults/

效果示圖:

性能工具之Taurus場景使用(進階篇)

Taurus 還支援從 YAML 檔案運作多個現有的 JMeter JMX 測試腳本。

這裡示範 Taurus 使用 2 個 Scenario 同時啟動兩個(或多個)JMeter JMX 測試:

編寫 ​<code>​exist_multiple_jmx_conifg.yml​</code>​:

執行指令:

Taurus Console 顯示兩個測試目前正在并行執行:

性能工具之Taurus場景使用(進階篇)
性能工具之Taurus場景使用(進階篇)

上面介紹了使用 Taurus 執行現有 JMeter 腳本測試的過程,現在讓我們更深入地了解如何從 YAML 配置檔案控制和覆寫 JMeter 測試參數設定。

我們通過修改腳本一次通過一個線程通路:

性能工具之Taurus場景使用(進階篇)

現在讓我們通過 YAML 配置檔案來運作它:

運作現有的 .jmx 腳本

設定以下加載方式:

并發:10個線程

啟動時間:1分鐘

持續時間:2分30秒

編寫 ​<code>​cover_exist_jmx_conifg.yml​</code>​:

注意:

并發是線程數(并發使用者);它用于10個線程,而不是每秒10個請求;

測試持續時間 -是啟動值和持續值的總和,是以10秒後,如果所有10個線程均會啟動,則10個線程将啟動1分鐘(從1個線程開始,每6秒再增加1個)。在正常運作的情況下,測試将繼續進行2分鐘30秒。總測試時間為 <code>1m+2m30s=3分鐘30秒</code>。

用在 JMeter GUI 中打開生成的 .jmx 檔案的 Taurus 指令如下:

性能工具之Taurus場景使用(進階篇)

如上圖所示,修改了 “Number of Threads”, “Ramp-Up” 和 “Loop Count” 的參數值,根據 YAML 檔案設定了測試持續時間,并添加了2個監聽器以存儲測試名額以及有關錯誤的詳細資訊。

除了這些基準更改之外,還可以:

添加(或覆寫)任何屬性(包括 JMeter 屬性和系統屬性);

添加(或覆寫)使用者自定義變量;

啟用/禁用從線程組開始并以監聽器結束的任何測試元素;

修改任何測試元素值;

我們看到 Taurus 能夠修改基準線程組參數(以及其他測試屬性)。但是,如果我們在 JMeter 測試計劃中有多個線程組怎麼辦?

我們使用上例相同的 YAML 檔案,以及幾乎相同的 .jmx 腳本,讓我們添加第二個線程組,複制現有的線程組并将其粘貼到下面: 

性能工具之Taurus場景使用(進階篇)

讓我們再次運作 Taurus,并選擇它顯示生成檔案的JMeter gui:

性能工具之Taurus場景使用(進階篇)

如圖所示,第一個線程組的線程數現在減少到 5,這是由于Taurus修改了。Taurus 可以計算并發并将其平均配置設定到現有的(啟用的)線程組中。第二個線程組也有5個線程數。注意不考慮禁用線程組,而是将其保留在生成的 .jmx 測試腳本中。Taurus不會修改 setUp 和 tearDown 線程組。

Taurus 如何處理多個線程組具有不同線程号的情況。

比如:使用下面 JMeter 測試計劃結構:

測試計劃

線程組1-5個并發線程數

線程組2-10個并發線程數

還有一個Taurus YAML配置檔案,其中包含:

并發:30

産生的壓力測試配置将如下所示:

線程組1-10個并發線程數

線程組2-20個并發線程數

Taurus 将配置的并發數按比例配置設定在2個線程組之間,并保持原始場景壓力比例。

可以從 YAML 檔案中覆寫多個 JMeter 測試腳本的執行參數。但是,必須分别為每個 .jmx 檔案設定執行參數。先前描述的行為(Taurus 将在 .jmx 檔案中的已啟用線程組之間配置設定已定義的并發數)仍然存在。

相關配置可執行2個并行提供的 JMeter .jmx 腳本,并根據我們配置(10個線程,1分鐘啟動時間,2分半鐘)覆寫線程數配置,如下所示:

性能工具之Taurus場景使用(進階篇)

長時間來 JMeter 使用者必須不斷嘗試測試,找到确切的線程數和計時器延遲,以産生期望的TPS,并且認為時間可能很耗時并且并不總是準确的而JMeter提供了 ​<code>​ConstantThroughputTimer​</code>​ 和 ​<code>​ThroughputShapingTimer​</code>​。 

性能工具之Taurus場景使用(進階篇)
性能工具之Taurus場景使用(進階篇)

而 Taurus 建構固定 TPS 場景非常簡單,能夠為壓測測試腳本精确設定所需的TPS。

讓我們從一個非常簡單的示例場景開始,一個10使用者壓測,啟動時間為1分鐘,測試持續時間為2分鐘30秒。相關的 Taurus YAML 配置檔案為:

​<code>​cover_exist_jmx_conifg_win.yml​</code>​:

通過 Taurus 運作:

性能工具之Taurus場景使用(進階篇)

在我們的案例中可以看到,TPS 平均為 10 左右,讓我們通過 Taurus 将其 TPS 限制為5:

編寫 ​<code>​cover_exist_jmx_conifg_limit_tps.yml​</code>​:

重新啟動測試後,我們可以看到 TPS 受到限制,并在1分鐘的啟動時間内 TPS 負載逐漸增加到 5。

性能工具之Taurus場景使用(進階篇)

我們在JMeter GUI中以下方式打開此測試腳本:

我們将看到 ​<code>​ThroughputShapingTimer​</code>​ 已添加到測試計劃中,并且其配置與啟動周期和目标 TPS 相比對。 

性能工具之Taurus場景使用(進階篇)

我們已經注意到 TPS 是通過兩個步驟添加的:

在60秒内将負載從1 TPS 增加到 5 TPS(啟動)

将負載以5 TPS的速度保持150秒(保持)

我們也可以使用 Taurus 中的 steps 參數來控制所需的步驟數。是以,如果我稍微修改測試并添加 5個步驟,如下所示:

然後,将導緻以下 ​<code>​ThroughputShapingTimer​</code>​ 配置:

性能工具之Taurus場景使用(進階篇)

是以,隻需要設定步數,Taurus 就會在定義的加速期内自動按比例配置設定目标TPS。

本文我們介紹了幾種複雜場景的使用方法 ,其中包括:

複雜場景統一測試

多個JMeter JMX測試;

YAML 配置檔案;

覆寫JMeter測試參數

單線程組;

多線程組;

多個線程組和不同線程數;

多個JMeter JMX測試腳本;

控制測試中的TPS

總結其核心思想,就是我們可以使用 YAML 來統一描述性能測試,這就是我們想要的 test as code。

大家可以關注公衆号:7DGroup