分享方式:


使用 Azure 負載測試從 JMeter 的 CSV 檔案讀取資料

在本文中,您將了解如何使用 Azure 負載測試從 JMeter 中的逗號分隔值 (CSV) 檔案讀取資料。 使用來自外部 CSV 檔案的資料,讓您的 JMeter 測試腳本可設定。 例如,您可以逐一查看 CSV 檔案中的所有客戶,將客戶詳細資料傳入 API 要求。

在 JMeter 中,您可以在測試指令碼中使用 CSV 資料集組態元素,從 CSV 檔案中讀取資料。

若要在 Azure 負載測試中從外部檔案讀取資料,您必須在負載測試中上傳外部檔案與 JMeter 測試指令碼。 如果您將測試擴增到多個平行測試引擎執行個體,可以選擇跨這些執行個體平均分割輸入資料。

從 GitHub 複製或下載範例專案開始。

必要條件

  • 具有有效訂用帳戶的 Azure 帳戶。 如尚未擁有 Azure 訂用帳戶,請在開始之前先建立免費帳戶
  • Azure 負載測試資源。 若要建立負載測試資源,請參閱建立和執行負載測試
  • Apache JMeter 測試腳本 (JMX)。
  • (選用) Apache JMeter GUI 用於撰寫測試腳本。 若要安裝 Apache JMeter,請參閱 Apache JMeter 快速入門

更新 JMeter 指令碼以讀取 CSV 資料

在本節中,您將設定 Apache JMeter 指令碼參考外部 CSV 檔案。 您將使用 CSV 資料集組態元素從 CSV 檔案讀取資料。

重要

Azure 負載測試會將 JMX 檔案和所有相關檔案上傳至單一資料夾中。 當您在 JMeter 指令碼中參考外部檔案時,請確認在測試指令碼中沒有任何檔案路徑參考。

使用 Apache JMeter GUI 編輯 JMeter 指令碼:

  1. 在測試指令碼中選取 CSV 資料集組態元素。

  2. 更新檔案名稱資訊,並移除任何檔案路徑參考。

  3. 在測試引擎中分割 CSV 檔案時,您可以選擇將 CSV 欄位名稱輸入 [變數名稱]

    分割 CSV 檔案時,Azure 負載測試不會保留標頭資料列。 在 CSV 資料集組態元素中提供變數名稱,而非使用標頭資料列。

    Screenshot that shows the JMeter UI to configure a C S V Data Set Config element.

  4. 針對腳本中的每個 CSV 資料集組態元素重複上述步驟。

  5. 儲存 JMeter 指令碼,並將指令碼上傳至負載測試。

將 CSV 檔案上傳至負載測試

當您從測試指令碼參考外部檔案時,請務必與 JMeter 測試指令碼一起上傳所有這些檔案。 當負載測試啟動時,Azure 負載測試會將所有檔案複製到每個測試引擎執行個體上的單一資料夾。

重要

分割 CSV 檔案時,Azure 負載測試不會保留標頭資料列。 在您將 CSV 檔案新增至負載測試之前,請先從檔案中移除標頭資料列。

如何使用 Azure 入口網站將 CSV 檔案新增至負載測試:

  1. Azure 入口網站中,移至您的 Azure 負載測試資源。

  2. 在左窗格中,選取 [測試] 以檢視測試清單。

  3. 選取核取方塊以從清單中選取您的測試,然後選取 [編輯]

    Screenshot that shows the list of load tests and the 'Edit' button.

  4. 在 [測試計劃] 索引標籤上,從您的電腦中選取 CSV 檔案,然後選取 [上傳] 將檔案上傳至 Azure。

    如果您使用 URL 型負載測試,您可以在 [變數] 欄中以逗號分隔清單輸入變數名稱。

    Screenshot of the Test plan tab on the Edit test pane.

    如果 CSV 檔案的大小大於 50 MB,請壓縮檔案。 ZIP 檔案的大小應小於 50 MB。 Azure 負載測試會在測試回合時自動解壓縮檔案。 最多只能有五個 zip 成品,每個 zip 不得超過 1000 個檔案,且未壓縮的總大小為 1 GB。

  5. 選取 [套用] 以修改測試,並在重新執行時使用新的設定。

提示

如果您使用 URL 型負載測試,可以使用 $(variable) 語法,在 HTTP 要求中參考 CSV 輸入資料檔案的值。

跨測試引擎分割 CSV 輸入資料

根據預設,Azure 負載測試會複製並處理所有測試引擎執行個體中未修改的輸入檔案。 根據預設,每個測試引擎都會處理整個 CSV 檔案。 或者,Azure 負載測試可讓您跨所有引擎執行個體平均地分割 CSV 輸入資料。 如果您有多個 CSV 檔案,則會平均分割每個檔案。

例如,如果您有大型的客戶 CSV 輸入檔,並在 10 個平行測試引擎上有負載測試回合,則每個執行個體都會處理 1/10 的客戶。

重要

分割 CSV 檔案時,Azure 負載測試不會保留標頭資料列。

  1. 設定 JMeter 腳本以在讀取 CSV 檔案時使用變數名稱。
  2. 從 CSV 檔案移除標頭資料列,再新增到負載測試。

如何設定負載測試以分割輸入 CSV 檔案:

  1. 移至負載測試的 [測試計劃] 索引標籤。

  2. 選取 [在測試引擎之間平均分割 CSV]

    Screenshot that shows the checkbox to enable splitting input C S V files when configuring a test in the Azure portal.

  3. 選取 [套用] 以確認組態變更。

    下次執行測試時,Azure 負載測試會平均分割並處理整個測試引擎的 CSV 檔案。

疑難排解

測試狀態失敗,且測試記錄有 File {my-filename} must exist and be readable

當負載測試以「失敗」狀態完成時,您可以下載測試記錄

當您在測試記錄中收到錯誤訊息 File {my-filename} must exist and be readable 時,在執行 JMeter 指令碼時找不到輸入 CSV 檔案。

Azure 負載測試會將所有輸入檔與 JMeter 指令碼一起儲存。 當您在 JMeter 指令碼中參考輸入 CSV 檔案時,請確定「不要」包含檔案路徑,只使用檔案名稱。

下列程式碼片段顯示擷取的 JMeter 檔案部分,使用 CSVDataSet 元素讀取輸入檔。 請注意,filename 不包含檔案路徑。

<CSVDataSet guiclass="TestBeanGUI" testclass="CSVDataSet" testname="Websites CSV" enabled="true">
    <stringProp name="filename">websites.csv</stringProp>
    <stringProp name="fileEncoding">UTF-8</stringProp>
    <stringProp name="variableNames">CustomerId,CustomerName,Url</stringProp>
    <boolProp name="ignoreFirstLine">true</boolProp>
    <stringProp name="delimiter">,</stringProp>
    <boolProp name="quotedData">false</boolProp>
    <boolProp name="recycle">false</boolProp>
    <boolProp name="stopThread">true</boolProp>
    <stringProp name="shareMode">shareMode.all</stringProp>
    <stringProp name="TestPlan.comments">Read all records from the CSV file -  stop thread at end of file</stringProp>
</CSVDataSet>