使用groovy的每个SoapUI请求的唯一属性

使用groovy的每个SoapUI请求的唯一属性,groovy,soapui,Groovy,Soapui,我正在使用SoapUI的开源版本进行一些SOAPWeb服务负载测试 我希望每个请求尽可能不同于以前的请求,我不希望使用相同的属性进行负载测试 我有一个属性文件,它有几个属性,每个属性值调用groovy脚本从文件中读取一个随机值,并将其分配给测试用例属性,即在值字段中: ${=(DynamicPropertyScript)} 脚本: // Load property from file def file = new File('path') // Create empty list for fi

我正在使用SoapUI的开源版本进行一些SOAPWeb服务负载测试

我希望每个请求尽可能不同于以前的请求,我不希望使用相同的属性进行负载测试

我有一个属性文件,它有几个属性,每个属性值调用groovy脚本从文件中读取一个随机值,并将其分配给测试用例属性,即在值字段中:

${=(DynamicPropertyScript)}

脚本

// Load property from file
def file = new File('path')

// Create empty list for file contents
def list = [];

// Populate list with file contents
addURLstoList = {list.add(it)};
file.eachLine(addURLstoList);

// Pick a random item from list
def randomIndex = (int)Math.random()*list.size;
def randomValue = list.get(randomIndex);

// Assign random value to property
def tc = testRunner.testCase;
tc.setPropertyValue('property', randomValue);
log.info(randomValue)
<inc:ID>No such property: DynamicPropertyScript for class: Script4</inc:>
如果我在测试用例开始时调用该脚本,那么该脚本工作得很好。我关心的是,在启动时生成的属性对于每个后续请求都是相同的,这是我想要避免的

我尝试了几件事,但最终失败了(因为我缺乏使用Groovy和SoapUI的经验)

我在请求中尝试了一些东西

<inc:ID>${Properties#property}</inc:ID>

<inc:ID>${=(DynamicPropertyScript)}</inc:ID>
${Properties#property}
${=(DynamicPropertyScript)}
我遇到的错误

// Load property from file
def file = new File('path')

// Create empty list for file contents
def list = [];

// Populate list with file contents
addURLstoList = {list.add(it)};
file.eachLine(addURLstoList);

// Pick a random item from list
def randomIndex = (int)Math.random()*list.size;
def randomValue = list.get(randomIndex);

// Assign random value to property
def tc = testRunner.testCase;
tc.setPropertyValue('property', randomValue);
log.info(randomValue)
<inc:ID>No such property: DynamicPropertyScript for class: Script4</inc:>
类:Script4没有这样的属性:DynamicPropertyScript
任何帮助都将不胜感激,此外,如果有其他方法也会有所帮助(我知道发送大量请求&每次从磁盘读取都不理想)


谢谢:)

我希望将数据列表加载到内存中一次,以避免重复IO,然后使用Groovy表达式从测试步骤中需要它的列表中选择随机项。可以使用上下文变量将数据保存在内存中

下面的Groovy脚本将读取位于项目根目录中名为
data1.txt
的数据文件的内容,并将其加载到上下文变量中。context.data变量将数据项作为列表保存,context.dataCount保存项目数

您可能希望将其添加为一个设置脚本(针对TestSuite或TestCase),而不是在Groovy测试步骤中,以便它只运行一次。上下文变量保留在相应的套件/案例运行程序的范围内,所以可以在后续任何步骤中引用

def projectDir = context.expand('${projectDir}') + File.separator
def dataFile = "data1.txt"

try 
{
    File file = new File(projectDir + dataFile)
    context.data = file.readLines()
    context.dataCount = context.data.size
} 
catch (Exception e) 
{
    testRunner.fail("Failed to load " + dataFile + " from project directory.")
    return
}
然后,要从context.data变量中获取随机数据项,请根据需要输入以下表达式作为参数值或嵌入到请求体中

${=context.data.get((int)(Math.random()*context.dataCount))}