试图编写一个groovy脚本来构建动态变量,以便在SoapUI中运行测试用例



我们已经有了groovy runner脚本,我正在尝试修改它,使团队更容易选择和取消选择要运行的环境和测试。

在承载groovy脚本的测试用例中,所有可能的测试和环境都有自己的自定义属性。如果自定义属性设置为0,则测试将不会运行。如果为0,则测试将运行。

我的脚本通过查看每个环境和测试自定义属性来构建2个变量,它运行良好,直到脚本的其余部分在构建脚本的第一部分读取变量。

以下是其中一个变量生成器脚本。

runEnv =  "["
// Env. 7031
if (testRunner.testCase.getPropertyValue( 'Env-7031' ) == '1')
{runEnv = runEnv + "'7031'"}
// Env. 7131
if (testRunner.testCase.getPropertyValue( 'Env-7031' ) == '1')
// runs if a comma is needed to separate values
{if (testRunner.testCase.getPropertyValue( 'Env-7131' ) == '1')
{runEnv = runEnv + ",'7131'"}}
else
// runs if value is the first in line and doesnt need comma
{if (testRunner.testCase.getPropertyValue( 'Env-7131' ) == '1')
{runEnv = runEnv + "'7131'"}}
// Adding the end of runEnv
runEnv = runEnv + "]"
// Verification message confirming what environment(s) will be tested
log.info 'Environment Selection is: ' + runEnv
runEnvironment = runEnv

此脚本的预期结果是,如果env-7031的自定义属性设置为1,env-7131设置为0 ,则runEnvironmet的值将为['7031']

当我运行这个脚本时,我会得到以下日志:

Wed May 06 07:09:38 EDT 2020:INFO:Environment Selection is: ['7031']
Wed May 06 07:09:38 EDT 2020:INFO:Test Case Selection is: ['Build-Deploy - All Tables']
Wed May 06 07:09:38 EDT 2020:INFO:Release Artifact Runner
Wed May 06 07:09:38 EDT 2020:INFO:Start Test Runner
Wed May 06 07:09:38 EDT 2020:INFO:Environment: [

我们可以看到,环境并没有像它应该看到的那样。[而非'7031']

有可能使用groovy以这种方式构建变量吗?

TL:博士

试图获得硬编码的变量

runEnvironment = ['7031']

使用自定义属性从头开始构建该变量的脚本。像这个模拟

runEnvironment = '[' + "'7031'" + ']'

我的问题是构建了一个文本字符串。脚本需要一个数组来遍历。

这就是我如何学会创建我的数组。如何在Groovy soapUI中定义数组?

这是我结束时的脚本:

def maxEnv = 0  
// defining how many environments the array will include
// Env. 7031
if (testRunner.testCase.getPropertyValue( 'Env-7031' ) == '0'){}else{
testRunner.testCase.setPropertyValue( 'Env-7031', '1' ) 
maxEnv = maxEnv + 1 }
// Env. 7131
if (testRunner.testCase.getPropertyValue( 'Env-7131' ) == '0'){}else{
testRunner.testCase.setPropertyValue( 'Env-7131', '1' ) 
maxEnv = maxEnv + 1 }
log.info maxEnv ("Environments")
// Building runEnv array
def runEnv = new Object[maxEnv]
curEnv = 99
// Env. 7031
if (testRunner.testCase.getPropertyValue( 'Env-7031' ) == '1')
{if (curEnv == 99){curEnv = 0}else{curEnv = curEnv + 1)
runEnv[curEnv] = '7031'} else {}
// Env. 7131
if (testRunner.testCase.getPropertyValue( 'Env-7131' ) == '1')
{if (curEnv == 99){curEnv = 0}else{curEnv = curEnv + 1)
runEnv[curEnv] = '7131'} else {}
runEnvironment = runEnv