你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

使用 Azure 负载测试从 JMeter 中的 CSV 文件读取数据

本文介绍如何使用 Azure 负载测试从测试脚本中的逗号分隔值 (CSV) 文件中读取数据。 使用外部 CSV 文件中的数据使 JMeter 或 Locust 测试脚本可配置。 例如,可以循环访问 CSV 文件中的所有客户,以将客户详细信息传递到 API 请求中。

在 JMeter 中,可以使用测试脚本中的 CSV 数据集配置元素 从 CSV 文件读取数据。 在 Locust 中,可以在测试脚本中打开 CSV 文件,读取所需的数据,并将其传递给请求。

若要从 Azure 负载测试中的外部文件读取数据,必须在负载测试中将外部文件与测试脚本一起上传。 如果跨多个并行测试引擎实例横向扩展测试,可以选择跨这些实例均匀拆分输入数据。

首先从 GitHub 克隆或下载示例项目

先决条件

  • 拥有有效订阅的 Azure 帐户。 如果没有 Azure 订阅,请在开始之前创建一个免费帐户
  • 一个 Azure 负载测试资源。 若要创建负载测试资源,请参阅创建并运行负载测试
  • Apache JMeter 测试脚本(JMX)或 Locust 脚本。
  • (可选)用于创作测试脚本的 Apache JMeter GUI。 若要安装 Apache JMeter,请参阅 Apache JMeter 入门

更新测试脚本以读取 CSV 数据

在本部分中,将测试脚本配置为引用外部 CSV 文件。 使用 CSV 数据集配置元素 从 CSV 文件读取数据。

重要

Azure 负载测试将上传单个文件夹中的 JMX 文件和所有相关文件。 在 JMeter 脚本中引用外部文件时,请验证测试脚本中没有文件路径引用。

对于基于 JMeter 的测试,请使用 Apache JMeter GUI 修改 JMeter 脚本:

  1. 在测试脚本中选择 CSV 数据集配置 元素。

  2. 更新 文件名 信息并删除任何文件路径引用。

  3. (可选)在 “变量名称”中输入 CSV 字段名称,在将 CSV 文件拆分为测试引擎时。

    拆分 CSV 文件时,Azure 负载测试不会保留标头行。 在 CSV 数据集配置 元素中提供变量名称,而不是使用标题行。

    显示用于配置 C S V 数据集配置元素的 JMeter UI 的屏幕截图。

  4. 对脚本中的每个 CSV 数据集配置 元素重复上述步骤。

  5. 保存 JMeter 脚本并将脚本上传到负载测试。

对于基于 Locust 的测试,请通过将其打开所选编辑器来更新 Locust 脚本。

  1. 在打开文件的部分中,更新 文件名 信息并删除任何文件路径引用。

  2. 保存 Locust 脚本并将脚本上传到负载测试。

将 CSV 文件上传到负载测试

从测试脚本引用外部文件时,请确保将所有这些文件与测试脚本一起上传。 负载测试启动时,Azure 负载测试会将所有文件复制到每个测试引擎实例上的单个文件夹。

重要

拆分 CSV 文件时,Azure 负载测试不会保留标头行。 将 CSV 文件添加到负载测试之前,请从文件中删除标头行。

若要使用 Azure 门户将 CSV 文件添加到负载测试,

  1. Azure 门户中,转到 Azure 负载测试资源。

  2. 在左窗格中,选择“ 测试 ”以查看测试列表。

  3. 通过选中复选框从列表中选择测试,然后选择“ 编辑”。

    显示负载测试列表和“编辑”按钮的屏幕截图。

  4. “测试计划 ”选项卡上,从计算机中选择 CSV 文件,然后选择“ 上传 ”以将文件上传到 Azure。

    如果使用基于 URL 的负载测试,则可以在 “变量 ”列中以逗号分隔的列表的形式输入变量名称。

    “编辑测试”窗格上的“测试计划”选项卡的屏幕截图。

    如果 CSV 文件的大小大于 50 MB,请压缩文件。 zip 文件的大小应小于 50 MB。 Azure 负载测试会在测试运行期间自动解压缩文件。 每个 zip 中最多允许有 5 个 zip 项目,每个 zip 文件最多 1000 个,总大小为 1 GB。

  5. 选择 “应用 ”以修改测试,并在重新运行测试时使用新配置。

小窍门

如果使用基于 URL 的负载测试,则可以使用 $(variable) 语法从 HTTP 请求中的 CSV 输入数据文件引用值。

跨测试引擎拆分 CSV 输入数据

默认情况下,Azure 负载测试会在所有测试引擎实例中复制和处理未经修改的输入文件。 默认情况下,每个测试引擎都会处理整个 CSV 文件。 或者,Azure 负载测试允许跨所有引擎实例均匀拆分 CSV 输入数据。 如果有多个 CSV 文件,则系统会均匀地拆分每个文件。

例如,如果你有一个大型客户 CSV 输入文件,并且负载测试在 10 个并行测试引擎上运行,则每个实例处理 1/10 的客户。

重要

拆分 CSV 文件时,Azure 负载测试不会保留标头行。

  1. 将测试脚本 配置为在读取 CSV 文件时使用变量名称。
  2. 在将标头行添加到负载测试之前,请从 CSV 文件中删除该行。

若要配置负载测试以拆分输入 CSV 文件,

  1. 转到负载测试的“ 测试计划 ”选项卡。

  2. 选择“ 在测试引擎之间均匀拆分 CSV”。

    显示用于在 Azure 门户中配置测试时启用拆分输入 C S V 文件的复选框的屏幕截图。

  3. 选择 “应用” 以确认配置更改。

    下次运行测试时,Azure 负载测试会跨测试引擎平均拆分并处理 CSV 文件。

故障排除

测试状态失败,并且测试日志具有 File {my-filename} must exist and be readable

当负载测试完成并显示“失败”状态时,可以 下载测试日志

在测试日志中收到错误消息 File {my-filename} must exist and be readable 时,在运行测试脚本时找不到输入 CSV 文件。

Azure 负载测试将所有输入文件与测试脚本一起存储。 在测试脚本中引用输入 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>