你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn。
本文介绍如何使用 Azure 负载测试从测试脚本中的逗号分隔值 (CSV) 文件中读取数据。 使用外部 CSV 文件中的数据使 JMeter 或 Locust 测试脚本可配置。 例如,可以循环访问 CSV 文件中的所有客户,以将客户详细信息传递到 API 请求中。
在 JMeter 中,可以使用测试脚本中的 CSV 数据集配置元素 从 CSV 文件读取数据。 在 Locust 中,可以在测试脚本中打开 CSV 文件,读取所需的数据,并将其传递给请求。
若要从 Azure 负载测试中的外部文件读取数据,必须在负载测试中将外部文件与测试脚本一起上传。 如果跨多个并行测试引擎实例横向扩展测试,可以选择跨这些实例均匀拆分输入数据。
先决条件
- 拥有有效订阅的 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 脚本:
在测试脚本中选择 CSV 数据集配置 元素。
更新 文件名 信息并删除任何文件路径引用。
(可选)在 “变量名称”中输入 CSV 字段名称,在将 CSV 文件拆分为测试引擎时。
拆分 CSV 文件时,Azure 负载测试不会保留标头行。 在 CSV 数据集配置 元素中提供变量名称,而不是使用标题行。
对脚本中的每个 CSV 数据集配置 元素重复上述步骤。
保存 JMeter 脚本并将脚本上传到负载测试。
对于基于 Locust 的测试,请通过将其打开所选编辑器来更新 Locust 脚本。
在打开文件的部分中,更新 文件名 信息并删除任何文件路径引用。
保存 Locust 脚本并将脚本上传到负载测试。
将 CSV 文件上传到负载测试
从测试脚本引用外部文件时,请确保将所有这些文件与测试脚本一起上传。 负载测试启动时,Azure 负载测试会将所有文件复制到每个测试引擎实例上的单个文件夹。
重要
拆分 CSV 文件时,Azure 负载测试不会保留标头行。 将 CSV 文件添加到负载测试之前,请从文件中删除标头行。
- Azure 门户
- Azure Pipelines/GitHub Actions
若要使用 Azure 门户将 CSV 文件添加到负载测试,
在 Azure 门户中,转到 Azure 负载测试资源。
在左窗格中,选择“ 测试 ”以查看测试列表。
通过选中复选框从列表中选择测试,然后选择“ 编辑”。
在 “测试计划 ”选项卡上,从计算机中选择 CSV 文件,然后选择“ 上传 ”以将文件上传到 Azure。
如果使用基于 URL 的负载测试,则可以在 “变量 ”列中以逗号分隔的列表的形式输入变量名称。
如果 CSV 文件的大小大于 50 MB,请压缩文件。 zip 文件的大小应小于 50 MB。 Azure 负载测试会在测试运行期间自动解压缩文件。 每个 zip 中最多允许有 5 个 zip 项目,每个 zip 文件最多 1000 个,总大小为 1 GB。
选择 “应用 ”以修改测试,并在重新运行测试时使用新配置。
小窍门
如果使用基于 URL 的负载测试,则可以使用 $(variable) 语法从 HTTP 请求中的 CSV 输入数据文件引用值。
跨测试引擎拆分 CSV 输入数据
默认情况下,Azure 负载测试会在所有测试引擎实例中复制和处理未经修改的输入文件。 默认情况下,每个测试引擎都会处理整个 CSV 文件。 或者,Azure 负载测试允许跨所有引擎实例均匀拆分 CSV 输入数据。 如果有多个 CSV 文件,则系统会均匀地拆分每个文件。
例如,如果你有一个大型客户 CSV 输入文件,并且负载测试在 10 个并行测试引擎上运行,则每个实例处理 1/10 的客户。
若要配置负载测试以拆分输入 CSV 文件,
- Azure 门户
- Azure Pipelines/GitHub Actions
故障排除
测试状态失败,并且测试日志具有 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>