概述:
作為性能測試的一部分,我不得不為我們的應用程序提供各種用例/業務工作流程的性能測試腳本。當我設計我的性能測試腳本時,我將確保我有本文中提到的可重用測試腳本。
如果您尚未閱讀本文,我會請您先閱讀本文,然后繼續閱讀本文!作為上述文章的一部分,您可以了解如何正確設計性能測試腳本/測試計划。
在高級別,我在“測試片段”下維護了一個可重復使用的“測試腳本”模塊。然后我使用Module Controller調用特定模塊來創建工作流。
我還為每個業務功能/工作流創建了多個“線程組”。
一旦你有一個如上所述的多個線程組的測試計划,那么讓我們看看如何使用Property文件維護JMeter測試計划並在本文中的特定環境中運行特定的線程組!
創建一個簡單的測試計划:
讓我們考慮具有以下業務功能的應用程序。
- 新用戶注冊
- 用戶登錄和訂單創建
- 用戶登錄和產品視圖
- 現有訂單編輯/取消
- 用戶搜索
讓我們假設我們已經提出了具有多個線程組的性能測試計划,如上所示。每個線程組將執行特定功能。
樣品性能測試要求:
現在讓我們假設我們有性能要求,比如
- 獨立測試每個模塊(一次只運行1個線程組)。
- 測試模塊組合(超過1個線程組/全部)。
- 在不同環境中進行測試(在不同環境中進行相同測試 - 在我的項目中,我還在兩個不同的環境中運行相同的測試 - 質量保證和臨時測試)。
參數化環境詳細信息:
- 首先,讓我們創建包含每個環境的測試環境詳細信息的不同屬性文件。
# QA.properties test.environment.hostname=10.11.12.14 test.environment.port=8080 test.environment.protocol=http
# Staging.properties test.environment.hostname=10.11.12.13 test.environment.port=443 test.environment.protocol=https
- 現在添加一個“ 屬性文件讀取器 ”以在運行時讀取特定的環境詳細信息。
- 然后從測試計划中的HTTP請求/采樣器中刪除所有服務器名稱/ IP,端口,協議詳細信息。
- 讓HTTP采樣器只有Path,Parameters,其他特定於請求的信息。
- 在測試計划下添加HTTP請求默認值,如下所示。
(如果HTTP請求缺少信息,JMeter將從HTTP請求默認值中獲取。因此,在一個地方更新IP,端口詳細信息將反映在整個測試中)。
注意:
- $ {__ P(test.environment.hostname)}將檢索屬性文件中給出的ip地址或主機名的值。
現在,您的測試計划已修改為在任何給定的測試環境中運行腳本。
參數化線程組詳細信息:
- 我們的測試計划中有多個線程組。
- 我們將通過屬性文件將線程組用戶數,加速期,線程組持續時間信息傳遞給測試。讓我們創建一個屬性文件,如下所示。
# Anonymous User - Product Search group1.usercount=10 group1.rampup=10 group1.duration=600 # New User Registration group2.usercount=10 group2.rampup=10 group2.duration=600 # User Login & Order Creation group3.usercount=10 group3.rampup=10 group3.duration=600 # User Login & Existing Product View group4.usercount=10 group4.rampup=10 group4.duration=600 # BackOffice Admin User Activities - Existing Order Edit/Cancel group5.usercount=10 group5.rampup=10 group5.duration=600
- 應修改所有線程組以使用下面給出的屬性。
- 要運行1個特定線程組,我們可以更改線程組的用戶數(用戶數)屬性。例如,如果我們只需要運行“新用戶注冊”模塊,則所有其他模塊的用戶計數屬性可以設置為0。
注意:
如果線程組用戶計數為0,則JMeter無法執行線程組。通過將線程組用戶計數屬性更新為0,可以禁用線程組。
- 讓我們根據您的興趣創建具有不同組合的多個屬性文件。例如, anonymoususers-only.properties 將具有以下屬性。
# Anonymous User - Product Search - Only # Anonymous User - Product Search group1.usercount=100 group1.rampup=100 group1.duration=3600 # New User Registration group2.usercount=0 group2.rampup=0 group2.duration=0 # User Login & Order Creation group3.usercount=0 group3.rampup=0 group3.duration=0 # User Login & Existing Product View group4.usercount=0 group4.rampup=0 group4.duration=0 # BackOffice Admin User Activities - Existing Order Edit/Cancel group5.usercount=0 group5.rampup=0 group5.duration=0
因此,我創建了多個屬性文件來控制特定的線程組執行。
- registration-only.properties
- ordercreation-only.properties
- all-modules.properties ..等
再添加一個“屬性文件讀取器”來讀取您感興趣的特定模塊。
通過命令行控制線程組和環境:
- 此時,我們已經使用2個屬性文件讀取器創建了一個JMeter測試計划,如上所述。
- 現在,讓我們使用我將在運行時通過命令行傳遞的屬性來參數化環境和模塊。
休息很簡單!!!
- 在Staging環境中運行所有模塊
jmeter -n -t test.jmx -l result.jtl -Jenvionment=staging -Jmodule=all-module
- 要在QA環境中運行所有模塊,
jmeter -n -t test.jmx -l result.jtl -Jenvionment=QA -Jmodule=all-module
- 要在Staging上運行訂單創建模塊,
jmeter -n -t test.jmx -l result.jtl -Jenvionment=staging -Jmodule=ordercreation-only
要在QA上運行注冊模塊,
jmeter -n -t test.jmx -l result.jtl -Jenvionment=QA -Jmodule=registration-only
通過Jenkins觸發線程組:
如果我們使用Jenkins運行我們的測試,這些測試環境和模塊可以是包含可能值的下拉列表,並作為參數從Jenkins傳遞給JMeter。
因此,我們可以在特定環境中運行特定的線程組,而無需修改JMeter測試,如下所示。
有關JMeter-Jenkins集成的更多詳細信息,請訪問此處。
摘要:
通過使用可重用的測試腳本,多個線程組和Property File Reader等正確設計JMeter測試計划,我們能夠在運行時控制特定的線程組執行。
因此,我們可以專注於特定模塊的性能相關問題,而不是每次都運行整個測試計划。