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

通过在 Azure 虚拟网络中部署 Azure 负载测试来测试专用终结点

本文介绍如何使用 Azure 负载测试测试测试专用应用程序终结点。 创建 Azure 负载测试资源,并使它能够从虚拟网络(虚拟网络注入)中生成负载。

此功能具有以下用途:

  • 将负载生成到 Azure 虚拟网络中部署的终结点。
  • 将负载生成到具有访问限制的公共终结点,例如限制的客户端 IP 地址。
  • 将负载生成到通过 ExpressRoute 连接到 Azure 的本地服务(不可公开访问)。

详细了解在虚拟网络中部署 Azure 负载测试的方案。

下图提供了技术概述:

Diagram that shows the Azure Load Testing virtual network injection technical overview.

启动负载测试时,Azure 负载测试服务会在包含应用程序终结点的虚拟网络中注入以下 Azure 资源:

  • 测试引擎虚拟机。 这些 VM 在负载测试期间调用应用程序终结点。
  • 公共 IP 地址。
  • 网络安全组 (NSG)。
  • Azure 负载均衡器。

这些资源是临时的,仅在负载测试运行时存在。 如果对子网中的公共 IP 地址、Azure 负载均衡器或网络安全组的部署有限制,则可以禁用这些资源的部署。 有关详细信息,请参阅 配置负载测试

如果限制对虚拟网络的访问,则需要配置虚拟网络,以启用这些 Azure 负载测试和注入的 VM 之间的通信。

先决条件

配置虚拟网络

若要测试专用终结点,请将 Azure 负载测试连接到 Azure 虚拟网络。 虚拟网络应至少有一个子网,并允许出站流量流向 Azure 负载测试服务。

如果还没有虚拟网络,请按照以下步骤在Azure 门户中创建 Azure 虚拟网络。

重要

虚拟网络必须与负载测试资源位于同一订阅和同一区域。

创建子网

在虚拟网络中部署 Azure 负载测试时,建议针对 Azure 负载测试和应用程序终结点使用单独的子网。 使用此方法,可以专门针对每种用途配置网络流量访问策略。 详细了解如何将子网添加到虚拟网络

(可选)配置流量规则

Azure 负载测试要求允许虚拟网络中注入的 VM 对 Azure 负载测试服务进行出站访问。 默认情况下,创建虚拟网络时,已允许出站访问。

如果打算使用网络安全组进一步限制对虚拟网络的访问,或者如果已有网络安全组,则需要配置出站安全规则以允许从测试引擎 VM 发往 Azure 负载测试服务的流量。

若要为 Azure 负载测试配置出站访问,请执行:

  1. 登录 Azure 门户

  2. 转到网络安全组。

    如果还没有 NSG,请按照创建网络安全组中的步骤操作。

    请在与虚拟网络相同的区域中创建 NSG,然后将其与子网关联。

  3. 在左侧导航中选择“出站安全规则”

    Screenshot that shows the network security group overview page in the Azure portal, highlighting Outbound security rules.

  4. 选择“+ 添加”,添加新的出站安全规则。 输入以下信息以创建新规则。

    字段
    Source 任意
    源端口范围 *
    目标 任意
    目标端口范围 *
    Name azure-load-testing-outbound
    描述 用于协调负载测试所涉及的各种操作
  5. 选择“ 添加” ,将出站安全规则添加到网络安全组。

配置负载测试脚本

运行 JMeter 脚本的测试引擎 VM 已注入到包含应用程序终结点的虚拟网络中。 现在,可以使用专用 IP 地址或使用网络中的名称解析直接引用 JMX 文件中的终结点。

例如,在子网范围为 10.179.0.0/18 的虚拟网络中,对于 IP 地址为 10.179.0.7 的终结点,JMX 文件可能包含以下信息:

<HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="Internal service homepage" enabled="true">
  <elementProp name="HTTPsampler.Arguments" elementType="Arguments" guiclass="HTTPArgumentsPanel" testclass="Arguments" testname="Service homepage" enabled="true">
    <collectionProp name="Arguments.arguments"/>
  </elementProp>
  <stringProp name="HTTPSampler.domain">10.179.0.7</stringProp>
  <stringProp name="HTTPSampler.port">8081</stringProp>
  <stringProp name="HTTPSampler.protocol"></stringProp>
  <stringProp name="HTTPSampler.contentEncoding"></stringProp>
  <stringProp name="HTTPSampler.path"></stringProp>
  <stringProp name="HTTPSampler.method">GET</stringProp>
</HTTPSamplerProxy>

配置负载测试

若要在负载测试中包含专用托管终结点,则需要为负载测试配置虚拟网络设置。 可以在Azure 门户中配置虚拟网络设置,也可以在 CI/CD 管道的 YAML 测试配置文件中指定这些设置。

重要

在虚拟网络中部署 Azure 负载测试时,会产生额外费用。 Azure 负载测试会在订阅中部署 Azure 负载均衡器公共 IP 地址,生成的流量可能会产生费用。 有关详细信息,请参阅虚拟网络定价信息

在Azure 门户中配置虚拟网络

可以在负载测试创建/更新向导中指定虚拟网络配置设置。

  1. 使用 Azure 订阅的凭据登录到 Azure 门户

  2. 转到 Azure 负载测试资源,然后从左侧窗格中选择“测试”

  3. 通过以下两种方式之一打开负载测试创建/更新向导:

    • 如果要创建新的测试,请选择“+ 创建”>“上传 JMeter 脚本”

      Screenshot that shows the Tests page, highlighting the button for creating a new test.

    • 从列表中选择一个现有测试,然后选择“编辑”

      Screenshot that shows the Tests page, highlighting the button for editing a test.

  4. 在“负载”选项卡上,选择“专用”流量模式,然后选择虚拟网络和子网。

    如果虚拟网络中有多个子网,请确保选择的子网将托管注入的测试引擎 VM。

    Screenshot that shows the Load tab for creating or updating a load test.

    重要

    确保有足够的权限来管理虚拟网络。 需要网络参与者角色。

  5. (可选)如果不想在子网中部署公共 IP 地址、负载均衡器和网络安全组,请检查 “禁用公共 IP 部署 ”。

    选择此选项时,请确保有一种替代机制,例如 Azure NAT 网关Azure 防火墙网络虚拟设备(NVA),以启用来自子网的出站流量路由。

  6. 查看或填写负载测试信息。 按照以下步骤创建或管理测试

  7. 选择“查看 + 创建”,然后选择“创建”(或在更新现有测试时选择“应用”)

    负载测试启动时,Azure 负载测试会在虚拟网络和子网中注入测试引擎 VM。 测试脚本现在可以访问虚拟网络中的专用托管应用程序终结点。

为 CI/CD 管道配置虚拟网络

若要通过虚拟网络设置配置负载测试,请更新 YAML 测试配置文件

  1. 打开终端,使用 Azure CLI 登录到 Azure 订阅:

    az login
    az account set --subscription <your-Azure-Subscription-ID>
    
  2. 检索子网 ID 并复制结果值:

    az network vnet subnet show -g <your-resource-group> --vnet-name <your-vnet-name> --name <your-subnet-name> --query id
    
  3. 使用自己偏好的编辑器打开 YAML 测试配置文件。

  4. subnetId 属性添加到配置文件,提供先前复制的子网 ID:

    version: v0.1
    testName: SampleTest
    testPlan: SampleTest.jmx
    description: 'Load test the website home page'
    engineInstances: 1
    subnetId: <your-subnet-id>
    publicIPDisabled: False
    

    (可选)可以将属性设置为 publicIPDisabledTrue。 有关 YAML 配置的详细信息,请参阅测试配置 YAML 参考

    重要

    确保有足够的权限来管理虚拟网络。 需要网络参与者角色。

  5. 保存 YAML 配置文件,并将所做的更改提交到源代码存储库。

  6. CI/CD 工作流触发后,负载测试将启动,现在可以访问虚拟网络中的专用托管应用程序终结点。

疑难解答

创建或更新负载测试失败并显示 Subscription not registered with Microsoft.Batch (ALTVNET001)

在虚拟网络中配置负载测试时,必须将订阅注册到 Microsoft.Batch

  1. 尝试在几分钟后再次创建或更新负载测试。

  2. 如果错误仍然存在,请按照以下步骤手动向 Microsoft.Batch 资源提供程序注册订阅

创建或更新负载测试失败并显示 Subnet is not in the Succeeded state (ALTVNET002)

用于负载测试的子网未处于 Succeeded 状态,并且尚未准备好将负载测试部署到其中。

  1. 验证子网的状态。

    运行以下 Azure CLI 命令来验证状态。 结果应为 Succeeded

    az network vnet subnet show -g MyResourceGroup -n MySubnet --vnet-name MyVNet
    
  2. 解决子网的任何问题。 如果刚刚创建了子网,请几分钟后再次验证状态。

  3. 或者,选择另一个子网进行负载测试。

创建或更新负载测试失败并显示 Subnet is delegated to other service (ALTVNET003)

用于部署负载测试的子网不能委托给其他 Azure 服务。 删除现有委派,或选择未委托给服务的另一个子网。

详细了解如何添加或删除子网委托

更新或启动负载测试失败 User doesn't have subnet/join/action permission on the virtual network (ALTVNET004)

若要更新或启动负载测试,必须有足够的权限将 Azure 负载测试部署到虚拟网络。 需要在虚拟网络上具有网络参与者角色或此角色的父级。

  1. 请参阅检查用户对 Azure 资源的访问权限以验证权限。

  2. 请按照以下步骤为帐户分配“网络参与者”角色

创建或更新负载测试失败并显示 IPv6 enabled subnet not supported (ALTVNET005)

Azure 负载测试不支持已启用 IPv6 的子网。 选择未启用 IPv6 的另一个子网。

创建或更新负载测试失败并显示 NSG attached to subnet is not in Succeeded state (ALTVNET006)

附加到子网的网络安全组 (NSG) 未处于 Succeeded 状态。

  1. 验证 NSG 的状态。

    运行以下 Azure CLI 命令来验证状态。 结果应为 Succeeded

    az network nsg show -g MyResourceGroup -n MyNsg
    
  2. 解决 NSG 的任何问题。 如果刚刚创建了 NSG 或子网,请在几分钟后再次验证状态。

  3. 或者,选择另一个 NSG。

创建或更新负载测试失败并显示 Route Table attached to subnet is not in Succeeded state (ALTVNET007)

附加到子网的路由表未处于 Succeeded 状态。

  1. 验证路由表的状态。

    运行以下 Azure CLI 命令来验证状态。 结果应为 Succeeded

    az network route-table show -g MyResourceGroup -n MyRouteTable
    
  2. 解决路由表的任何问题。 如果刚刚创建了路由表或子网,请几分钟后再次验证状态。

  3. 或者,选择另一个路由表。

创建或更新负载测试失败并显示 Inbound not allowed from AzureLoadTestingInstanceManagement service tag (ALTVNET008)

不允许从 AzureLoadTestingInstanceManagement 服务标记到虚拟网络的入站访问。

按照以下步骤为 AzureLoadTestingInstanceManagement 服务标记启用流量访问

创建或更新负载测试失败并显示 Inbound not allowed from BatchNodeManagement service tag (ALTVNET009)

不允许从 BatchNodeManagement 服务标记到虚拟网络的入站访问。

按照以下步骤为 BatchNodeManagement 服务标记启用入站访问

创建或更新负载测试失败并显示 Route Table has next hop set for address prefix 0.0.0.0/0

在子网路由表中,路由 0.0.0.0/0 的下一个跃点类型设置为“虚拟设备”。 在子网中预配虚拟机时,此配置将导致网络数据包的路由不对称。

执行以下两个操作之一来解决此错误:

  • 使用不具有自定义路由的其他子网。
  • 修改子网路由表,并将路由 0.0.0.0/0 的下一个跃点类型设置为“Internet”

详细了解虚拟网络流量路由

创建或更新负载测试失败并显示 Subnet is in a different subscription than resource (ALTVNET011)

虚拟网络与 Azure 负载测试资源不在同一订阅和区域中。 将 Azure 虚拟网络或 Azure 负载测试资源移动或重新创建到同一订阅和区域。

预配失败,并显示 An azure policy is restricting engine deployment to your subscription (ALTVNET012)

Azure 策略将负载测试引擎部署限制为订阅。 请查看策略限制,然后重试。 如果对公共 IP 地址、Azure 负载均衡器或网络安全组的部署有策略限制,则可以禁用这些资源的部署。 请参阅 配置负载测试

预配失败,并显示 Engines could not be deployed due to an error in subnet configuration (ALTVNET013)

由于子网配置错误,无法部署负载测试引擎实例。 验证子网配置。 如果问题仍然存在,请提出支持票证以及测试的运行 ID。

  1. 验证子网的状态。

    运行以下 Azure CLI 命令来验证状态。 结果应为 Succeeded

    az network vnet subnet show -g MyResourceGroup -n MySubnet --vnet-name MyVNet
    
  2. 解决子网的任何问题。 如果刚刚创建了子网,请几分钟后再次验证状态。

  3. 如果问题仍然存在,请提出联机客户支持请求

    在支持请求中提供负载测试运行 ID。

启动负载测试失败并显示 Subnet has {0} free IPs, {1} more free IP(s) required to run {2} engine instance load test (ALTVNET014)

用于 Azure 负载测试的子网必须有足够多的未分配 IP 地址来容纳用于测试的负载测试引擎数。

按照以下步骤更新子网设置并增加 IP 地址范围。

启动负载测试失败并显示 Management Lock is enabled on Resource Group of VNET (ALTVNET015)

如果资源组中包含虚拟网络,则服务无法注入虚拟网络中的测试引擎虚拟机。 在运行负载测试之前删除管理锁。 了解如何在Azure 门户中配置锁。

启动负载测试失败并显示 Insufficient public IP address quota in VNET subscription (ALTVNET016)

启动负载测试时,Azure 负载测试在包含应用程序终结点的虚拟网络中注入以下 Azure 资源:

  • 测试引擎虚拟机。 这些 VM 在负载测试期间调用应用程序终结点。
  • 公共 IP 地址。
  • 网络安全组 (NSG)。
  • Azure 负载均衡器。

确保订阅中至少有一个公共 IP 地址的配额可用于负载测试。

启动负载测试失败并显示 Subnet with name "AzureFirewallSubnet" cannot be used for load testing (ALTVNET017)

保留子网 AzureFirewallSubnet ,不能将其用于 Azure 负载测试。 为负载测试选择另一个子网。

后续步骤