JMeter 环境特定配置

2022-09-04 06:54:56

我有几个JMeter测试计划,应该在不同的环境中执行,比如Dev,Test,UAT,Live。在每个测试计划中,我希望有一个简单的方法来指定要使用的环境。每个环境都有很多配置,例如主机名,端口,ssl证书,用户名,密码,帐号和其他测试数据。

我试图实现的一件事是,在使用JMeter GUI或从构建脚本运行场景时,可以轻松切换环境。

我的一个想法是使用“包含控制器”来包含另一个jmx文件,该文件具有用户定义的变量和其他配置元素的列表。但是,JMeter 不支持包含的文件名中的变量,因此我无法通过环境名称对方案进行参数化。Include Controller支持JMeter参数“includecontroller.prefix”,但它不是很灵活,例如,我无法从JMeter GUI更改它,我应该更改JMeter配置文件并重新启动它。

我尝试过使用Switch Controller,但没有运气,它不会切换配置元素,只会切换采样器。

从测试方案中外部化特定于环境的配置并在多个方案之间共享它的最佳做法是什么?


答案 1

我建议用JMeter属性替换所有特定于环境的变量或值。请参阅以下函数以供参考:

例如,您可以定义在 jmeter.properties 文件中调用的属性,也可以定义为 JMeter 命令行参数,如下所示hostname

jmeter -Jhostname=169.140.130.120 -n -t yourscript.jmx -l yourscriptresults.jtl

并在脚本中引用以下内容:

  • ${__P(hostname,)}
  • ${__property(hostname,,)}

有关更多详细信息,请参阅 Apache JMeter 属性自定义指南


答案 2

就像Manish Sapariya提到的,参数化控制器对于为多个环境准备配置非常有用。我在以前工作的地方使用它,现在在新的地方开始配置。一开始有点费劲,以后维护起来就容易了。上面提供的链接中有一些教程,但它不会考虑到您一次只想运行一个env。我将在下面描述一下,也许它会有用。所以,慢慢地一步一步:Env Profiler

  1. 首先 - 你需要两个线程组 - 一个用于环境配置文件(第一个屏幕截图中没有1 - Env Profiler),另一个用于测试用例,包括测试计划等(没有2 - API请求)。后者必须禁用,因为它是不应直接从此处执行的容器(右键单击 ->禁用或 Ctrl+T)
  2. 然后你需要你的用户定义的变量元素(没有3) - 我使用其中的三个:
    • 首先用于定义将执行哪个环境(环境类型var)和登录名/密码,令牌等。
    • 第二个带有测试所需项目的ID
    • 第三个带有IP,端口,路径前缀等。

这里最重要的是,我现在用变量名称中的前缀将它们分开,因此在一个UDV元素中,我有像dev.serverIP,dev.serverPort,preprod.serverIP等变量(第二个屏幕截图)填充了与该环境相关的值。此外,在其中一个UDV中,我有默认值“dev”的环境类型变量(前面提到过)(您可以在此处手动更改,或者在通过命令行/ CI或其他方式启动时提供不同的值)

UDVs

  1. 现在在Env Profiler中,我有If控制器(第一个屏幕截图上没有4)。对于开发环境,我有(第一个屏幕上没有5):

    “${environmentType}” == “dev”

对于每个环境(如果控制器),您必须提供如上所述的适当条件。

  1. 每个 IfController 都包含前面提到的“jp@gc - 参数化控制器”(顺便说一句,您可以将其作为 Extras Set 的一部分下载)。在每个参数控制器中,您分配给在测试计划中使用的变量特定于该环境的变量,例如名称:serverIP,值:${dev.serverIP}用于开发环境(第三个屏幕截图)

Parametrized Controller

  1. 现在最后一件事 - 您要执行的测试和计划。
    • 在该禁用的线程组(API 请求)中,您可以添加包含测试的简单控制器或包含从其他文件导入某些测试的控制器
    • 当您进行这些测试时,对于要在该特定环境中运行的每个测试,您必须在参数化控制器中添加模块控制器,并带有该测试的路径(下面的屏幕截图)

Module Controller

而且差不多就是这样。现在维护:

  • 要添加新变量,您必须在UDV中添加前缀(dev.newVar,preprod.newVar)并填充相关值,然后在参数化控制器中添加适当的条目(那些newVar = ${dev.newVar}),仅此而已
  • 从其他测试计划添加新测试 - 添加包含控制器以及该文件的路径,并在每个参数化控制器中添加模块控制器,以将其定向到该包含控制器
  • 要添加新环境,只需复制您已经拥有的环境,更改其If contr.,参数化控制器并在UDV中填充值 这里的好处是,如果您想要,例如,开发所有测试,而另一个仅使用一些somke测试,您可以准备一个副本,更改If控制器以采用env变量的其他一些值(例如所有测试的dev, devsmoke for smoke test),并在该新配置文件中添加或删除一些模块控制器。当然,您可以稍微构建它,并且可以为系统的不同部分使用不同的线程,以便于维护,只是不要忘记禁用那些作为容器工作的线程。

我知道当你开始时要做很多事情,但是以后只是添加一些东西时,情况就不那么糟糕了 - 这可能是最简单的方法。


推荐