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

使用 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. 更新 Filename 信息并删除任何文件路径引用

  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 中最多允许有 5 个 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>