我是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断言”也应执行相同的操作。
答案 0 :(得分:1)
答案来得很晚;您可能已经得到了答案。我仍在发布我的答案,以便像我这样的其他人在寻找对此要求的解决方案时,可能会发现有帮助。
遇到这种需要时,我在JSR223断言脚本设置中使用了 args
设置。
由于您的CSV有很多列,因此我使用了一个较小的CSV来演示该解决方案,一个只有2列。
Id,Name
1,New Delhi
2,Calcutta
3,Chennai
现在,像这样在Groovy脚本中按索引访问它们:
println( "Id: " + args[ 0 ] )
println( "Name: " + args[ 1 ] )
答案 1 :(得分:0)
在JSR223脚本中不要使用${}
语法,它将缓存值,而应使用vars.get
:
vars.get("Id");