SoapUI负载测试groovy顺序读取txt文件

时间:2015-03-09 03:52:01

标签: groovy soapui

我正在使用免费版的soapui。在我的负载测试中,我想从文本文件中读取请求字段值。该文件如下所示

0401108937
0401109140
0401109505
0401110330
0401111204
0401111468
0401111589
0401111729
0401111768

在负载测试中,对于每个请求,我想按顺序读取此文件。我正在使用Unique property per SoapUI request using groovy中提到的代码来读取文件。如何以顺序方式使用文件中的值?

我有以下测试设置脚本来读取文件

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

    try 
    {
        File file = new File(projectDir + dataFile)
        context.data = file.readLines()
        context.dataCount = context.data.size
        log.info "     data count" + context.dataCount
        context.index = 0; //index to read data array in sequence
    } 
    catch (Exception e) 
    {
        testRunner.fail("Failed to load " + dataFile + " from project directory.")
        return
    }

在我的测试中,我将以下脚本作为测试步骤。我想从数组中读取当前索引记录,然后递增索引值

def randUserAccount = context.data.get(context.index);
context.setProperty("randUserAccount", randUserAccount)
context.index = ((int)context.index) + 1;

但是使用这个脚本,我总是获得数组的第二条记录。索引值没有递增。

3 个答案:

答案 0 :(得分:0)

您将变量context.index定义为0并且只执行+1

您可能需要一个循环来读取所有值。

类似的东西:

for(int i=0; i <context.data.size; i++){
    context.setProperty("randUserAccount", i);
    //your code
}

答案 1 :(得分:0)

您可以将此安装脚本添加到安装脚本部分以进行负载测试,并使用以下命令访问groovy脚本测试步骤中的值:

context.LoadTestContext.index =((int)context.LoadTestContext.index)+1

答案 2 :(得分:0)

这可能是一个迟到的回复,但我的负载测试有一段时间我遇到了同样的问题。使用index作为全局属性为我解决了这个问题。

最初将索引设置为-1。下面的代码会将索引递增1,将递增的值设置为全局属性,然后选择该索引的上下文数据。

<confirmationNumber>${=com.eviware.soapui.SoapUI.globalProperties.setPropertyValue( "index", (com.eviware.soapui.SoapUI.globalProperties.getPropertyValue( "index" ).toLong()+1 ).toString()); return (context.data.get( (com.eviware.soapui.SoapUI.globalProperties.getPropertyValue( "index" )).toInteger())) }</confirmationNumber>