你当前正在访问 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>