JMeter-如何将当前行数据从“ CSV数据集配置”传递到“ JSR 223断言”

时间:2019-08-22 13:43:51

标签: csv jmeter jsr223 jmeter-5.0

我是JMeter的新手。我在“ While Controller”中使用“ CSV数据集配置”。 CSV文件的示例数据如下 例-     Id,BobId,TarFulDate,SSRId,EDPNumber,SiteCode,CrBy,CrDate,ModBy,ModDate,Status,Version,ToolVer,ShipDate,TMDate,MaintComments,ParentId,TOName     990:548254,18ATR0002,2018-04-02T10:00:00 + 05:30,548254,MEATLM-18ATR0002-001,NEATOM,LVerlli,2018-03-01T16:12:37.7230000 + 05:30,PFibacher,2018- 05-15T12:19:33 + 05:30,已提交,12,0,1,2018-04-02T10:00:00 + 05:30,,547011,18ATR0002-0600-0-2

在“ While Controller”中,我有一个“ If Controller”。从“ If Controller”内部,我使用csv数据集的属性“ $ {Id}”之一发送“ Http Request”。到目前为止,一切都很好。 HTTP请求每次在一组csv数据中正确地占用一行,并获得Json响应。由于必须验证Json响应的多个属性,因此我使用“ JSR 223断言”。

“ JSR 223断言”正确处理CSV数据集的第一行。但是,对于任何后续行,它仅采用csv文件第一行的值。因此,仅第一行的断言是成功的。对于其余的行,它将失败。 代码如下-

import groovy.json.JsonSlurper;

def failureMessage = "";
def jsonResponse = null;
rawId = "${Id}"; //I tried this also. Didn't work.


JsonSlurper JSON = new JsonSlurper ();

try {
    jsonResponse = JSON.parseText(prev.getResponseDataAsString());
    } catch (Exception e) {
    failureMessage += "Invalid JSON.\n"
}


if(!"200".equals(prev.getResponseCode())){ 
failureMessage += "Expected <response code> [200] but we got         ["      + prev.getResponseCode() + "]\n\n" ;
}

if ((jsonResponse.createdBy !="${CreatedBy}")) {
failureMessage += "Expected:[" + jsonResponse.createdBy + " Found:"     + "${CreatedBy}" +  "]\n\n";
} 
if ((jsonResponse.id !=rawId)) {
    failureMessage += "Expected:[" + jsonResponse.id + " Found:" + rawId +  "]\n\n";
} 

期望的是“ JSR 223断言”应访问CSV数据集的当前数据行。由于“ Http Request”在同一“ If Controller”中正确选择了当前行,因此“ JSR223断言”也应执行相同的操作。

2 个答案:

答案 0 :(得分:1)

答案来得很晚;您可能已经得到了答案。我仍在发布我的答案,以便像我这样的其他人在寻找对此要求的解决方案时,可能会发现有帮助。

遇到这种需要时,我在JSR223断言脚本设置中使用了 args设置

由于您的CSV有很多列,因此我使用了一个较小的CSV来演示该解决方案,一个只有2列。

Id,Name
1,New Delhi
2,Calcutta
3,Chennai

enter image description here

现在,像这样在Groovy脚本中按索引访问它们:

println( "Id: " + args[ 0 ] )
println( "Name: " + args[ 1 ] )

答案 1 :(得分:0)

在JSR223脚本中不要使用${}语法,它将缓存值,而应使用vars.get

 vars.get("Id");