在最近的测试中,有时候参数化数据需要传空值,故尝试了下,如参数化文件第一行为空值时,
想在 入参中传空值,发现并不是想要的效果
查看jmeter源码中发现CSVDataSet中有如下代码
if (lineValues.length == 0) {// i.e. EOF if (getStopThread()) { throw new JMeterStopThreadException("End of file:"+ getFilename()+" detected for CSV DataSet:" +getName()+" configured with stopThread:"+ getStopThread()+", recycle:" + getRecycle()); } for (String var :vars) { threadVars.put(var, EOFVALUE); } }
即,如果行数值的长度==0,会发生如下动作:
1)getStopThread()方法返回是true的话,抛出如下异常:
end of file:xxx....,这里参数化策略中设置了以下
jmeter GUI界面日志打开,返回类似如下日志:
2022-10-31 23:25:59,171 INFO o.a.j.s.FileServer: Stored: D:/apache-jmeter-5.3/data.txt
2022-10-31 23:25:59,171 INFO o.a.j.t.JMeterThread: Stop Thread seen for thread 线程组 1-1, reason: org.apache.jorphan.util.JMeterStopThreadException: End of file:D:/apache-jmeter-5.3/data.txt detected for CSV DataSet:CSV 数据文件设置 configured with stopThread:true, recycle:true
2022-10-31 23:25:59,171 INFO o.a.j.t.JMeterThread: Thread finished: 线程组 1-1
2022-10-31 23:25:59,171 INFO o.a.j.e.StandardJMeterEngine: Notifying test listeners of end of test
出现异常程序即终止
2)如果getStopThread()没有被赋值true,则接着往下执行,给参数化赋值为EOFVALUE,即为<EOF>
private static final String EOFVALUE = // value to return at EOF JMeterUtils.getPropDefault("csvdataset.eofstring", "<EOF>"
那么到这里我们参数化传值为空怎么实现呢,换个思路,参考如下:
1)参数化长度不为0,如可以和其他参数一起使用,其中一个为空是可行的,如下第一行第二列的值即可传值为空
2)为空的传参作为单独的一个单独的请求和传值的请求按照权重进行分配
如上方法仅供参考,欢迎交流