在上兩文中介紹了安裝和入門使用,本文我們來看看 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 自動擷取 JMeter JMX 腳本并同時執行它們,同時 Taurus 為每個 JMeter 測試腳本生成了一組額外的結果:
檔案說明:
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 還支援從 YAML 檔案運作多個現有的 JMeter JMX 測試腳本。
這裡示範 Taurus 使用 2 個 Scenario 同時啟動兩個(或多個)JMeter JMX 測試:
編寫 <code>exist_multiple_jmx_conifg.yml</code>:
執行指令:
Taurus Console 顯示兩個測試目前正在并行執行:
上面介紹了使用 Taurus 執行現有 JMeter 腳本測試的過程,現在讓我們更深入地了解如何從 YAML 配置檔案控制和覆寫 JMeter 測試參數設定。
我們通過修改腳本一次通過一個線程通路:
現在讓我們通過 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 指令如下:
如上圖所示,修改了 “Number of Threads”, “Ramp-Up” 和 “Loop Count” 的參數值,根據 YAML 檔案設定了測試持續時間,并添加了2個監聽器以存儲測試名額以及有關錯誤的詳細資訊。
除了這些基準更改之外,還可以:
添加(或覆寫)任何屬性(包括 JMeter 屬性和系統屬性);
添加(或覆寫)使用者自定義變量;
啟用/禁用從線程組開始并以監聽器結束的任何測試元素;
修改任何測試元素值;
我們看到 Taurus 能夠修改基準線程組參數(以及其他測試屬性)。但是,如果我們在 JMeter 測試計劃中有多個線程組怎麼辦?
我們使用上例相同的 YAML 檔案,以及幾乎相同的 .jmx 腳本,讓我們添加第二個線程組,複制現有的線程組并将其粘貼到下面:
讓我們再次運作 Taurus,并選擇它顯示生成檔案的JMeter gui:
如圖所示,第一個線程組的線程數現在減少到 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分半鐘)覆寫線程數配置,如下所示:
長時間來 JMeter 使用者必須不斷嘗試測試,找到确切的線程數和計時器延遲,以産生期望的TPS,并且認為時間可能很耗時并且并不總是準确的而JMeter提供了 <code>ConstantThroughputTimer</code> 和 <code>ThroughputShapingTimer</code>。
而 Taurus 建構固定 TPS 場景非常簡單,能夠為壓測測試腳本精确設定所需的TPS。
讓我們從一個非常簡單的示例場景開始,一個10使用者壓測,啟動時間為1分鐘,測試持續時間為2分鐘30秒。相關的 Taurus YAML 配置檔案為:
<code>cover_exist_jmx_conifg_win.yml</code>:
通過 Taurus 運作:
在我們的案例中可以看到,TPS 平均為 10 左右,讓我們通過 Taurus 将其 TPS 限制為5:
編寫 <code>cover_exist_jmx_conifg_limit_tps.yml</code>:
重新啟動測試後,我們可以看到 TPS 受到限制,并在1分鐘的啟動時間内 TPS 負載逐漸增加到 5。
我們在JMeter GUI中以下方式打開此測試腳本:
我們将看到 <code>ThroughputShapingTimer</code> 已添加到測試計劃中,并且其配置與啟動周期和目标 TPS 相比對。
我們已經注意到 TPS 是通過兩個步驟添加的:
在60秒内将負載從1 TPS 增加到 5 TPS(啟動)
将負載以5 TPS的速度保持150秒(保持)
我們也可以使用 Taurus 中的 steps 參數來控制所需的步驟數。是以,如果我稍微修改測試并添加 5個步驟,如下所示:
然後,将導緻以下 <code>ThroughputShapingTimer</code> 配置:
是以,隻需要設定步數,Taurus 就會在定義的加速期内自動按比例配置設定目标TPS。
本文我們介紹了幾種複雜場景的使用方法 ,其中包括:
複雜場景統一測試
多個JMeter JMX測試;
YAML 配置檔案;
覆寫JMeter測試參數
單線程組;
多線程組;
多個線程組和不同線程數;
多個JMeter JMX測試腳本;
控制測試中的TPS
總結其核心思想,就是我們可以使用 YAML 來統一描述性能測試,這就是我們想要的 test as code。
大家可以關注公衆号:7DGroup