从csv创建jmeter groovy动态json请求

时间:2019-06-11 09:24:41

标签: json csv groovy jmeter

我需要从csv文件动态创建一个JSON请求。 csv的格式如下:

TEST_ID;TEST_DESC;RQ_FIELD1;RQ_FIELD2;RQ_FIELD3;RS_FIELD1;RS_FIELD2
TC1;TEST 1;input1;input2;input3;output1;output2
TC2;TEST 2;input1;;input3;output1;output2
TC3;TEST 3;input1;input2;missing;output1;output2

请求必须仅由RQ_FIELDS *和:

组成

如果该字段为空,则请求中的FIELD必须保留为空。 如果该字段等于“缺少”,则不应将FIELD添加到请求中。

TC1
    { "FIELD1": "input1",
      "FIELD2": "input2",
      "FIELD3": "input3"
    }
TC2
    { "FIELD1": "input1",
      "FIELD2": "",
      "FIELD3": "input3"
    }
TC3
    { "FIELD1": "input1",
      "FIELD2": "input2"
    }

我尝试了一些操作,但是无法动态创建请求。

有什么建议吗?

提前谢谢

1 个答案:

答案 0 :(得分:0)

类似的东西:

def csv = '''TEST_ID;TEST_DESC;RQ_FIELD1;RQ_FIELD2;RQ_FIELD3;RS_FIELD1;RS_FIELD2 
TC1;TEST 1;input1;input2;input3;output1;output2 
TC2;TEST 2;input1;;input3;output1;output2 
TC3;TEST 3;input1;input2;missing;output1;output2​'''

def m = [:]
def rqIndexes = []
csv.eachLine{ aLine, cnt ->
    if ( cnt == 0 ) {
        rqIndexes = aLine.tokenize( ';' ).findIndexValues{ it.startsWith( 'RQ' ) }
    }
    else {
        def k
        aLine.split( ';' ).eachWithIndex{ token, idx ->
            if ( idx == 0 ) {
                k = token
                m.put( k, [:] )
            }
            else{
                if ( rqIndexes.contains( idx as Long ) && token != 'missing' ){
                    m.get( k ).put( "FIELD${idx-1}", token )
                }
            }
        }
    }
}
groovy.json.JsonOutput.prettyPrint(groovy.json.JsonOutput.toJson(m))​