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

JMeter-如何从“传递当前行数据”;CSV数据集配置“;至;JSR 223断言;,csv,jmeter,jsr223,jmeter-5.0,Csv,Jmeter,Jsr223,Jmeter 5.0,我是JMeter的新手。我正在使用带有“While Controller”的“CSV数据集配置”。CSV文件的示例数据如下所示 范例- Id、BobId、TarFulDate、SSRId、EDP编号、站点代码、CrBy、CrDate、ModBy、ModDate、状态、版本、工具版本、发货日期、TMDate、维护建议、父Id、TOName 990:548254,18ATR00022018-04-02T10:00:00+05:30548254,MEATLM-18ATR0002-001,尼阿托姆,埃尔

我是JMeter的新手。我正在使用带有“While Controller”的“CSV数据集配置”。CSV文件的示例数据如下所示 范例- Id、BobId、TarFulDate、SSRId、EDP编号、站点代码、CrBy、CrDate、ModBy、ModDate、状态、版本、工具版本、发货日期、TMDate、维护建议、父Id、TOName 990:548254,18ATR00022018-04-02T10:00:00+05:30548254,MEATLM-18ATR0002-001,尼阿托姆,埃尔弗利,2018-03-01T16:12:37.7230000+05:30,普菲巴赫,2018-05-15T12:19:33+05:30,提交,12,0,12018-04-02T10:00+05:30,547011,18ATR0002-0600-0-2

在“While控制器”中,我有一个“If控制器”。从“If Controller”内部,我使用csv数据集的属性“${Id}”之一发送“Http请求”。到目前为止,一切顺利。HTTP请求一次正确地获取csv数据集的一行,并返回Json响应。因为我必须验证Json响应的多个属性,所以我使用“JSR223断言”

“JSR223断言”正确处理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";
} 
import groovy.json.JsonSlurper;
def failureMessage=“”;
def jsonResponse=null;
rawId=“${Id}”//我也试过这个。没用。
JsonSlurper JSON=newjsonslurper();
试一试{
jsonResponse=JSON.parseText(prev.getResponseDataAsString());
}捕获(例外e){
failureMessage+=“无效的JSON。\n”
}
如果(!“200”.equals(prev.getResponseCode()){
failureMessage+=“预期为[200],但我们得到了[“+prev.getResponseCode()+”]\n\n”;
}
if((jsonResponse.createdBy!=“${createdBy}”)){
failureMessage+=“应为:[“+jsonResponse.createdBy+”找到:“+”${createdBy}”+“]\n\n”;
} 
if((jsonResponse.id!=rawId)){
failureMessage+=“预期:[”+jsonResponse.id+“找到:“+rawId+”]\n\n”;
} 

期望“JSR223断言”应该访问CSV数据集的当前数据行。由于“Http请求”在同一个“If Controller”中正确地选择了当前行,“JSR223断言”也应该这样做。

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

 vars.get("Id");

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

 vars.get("Id");

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

当我面对这种需求时,我在JSR223断言脚本设置中使用了
args
设置

因为您的CSV有很多列,所以我使用了一个较小的CSV来演示解决方案,一个只有两列

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

现在,在Groovy脚本中通过索引访问它们,如下所示:

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

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

当我面对这种需求时,我在JSR223断言脚本设置中使用了
args
设置

因为您的CSV有很多列,所以我使用了一个较小的CSV来演示解决方案,一个只有两列

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

现在,在Groovy脚本中通过索引访问它们,如下所示:

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

我的回答有用吗?你可以参加投票。我的回答有用吗?你可以参加投票。看见