最近在研究Jmeter做接口测试,在使用数据驱动的时候遇到一个问题就是:ERROR o.a.j.c.CSVDataSet: java.io.IOException: Cannot have quote-char in plain field:[{"],这个问题之所以会出现,是因为用例写在csv中,而请求data是json格式,所以在设置读取时一般会选择“是否允许带引号”,如图:
这个操作其实就是引发这个错误的直接导火索,但是设置False也不行,因为json里面不可能没有引号。当这里选择True后,允许就会报错,提示“在{没有引号”,虽然提示很郁闷,这里则呢么会有引号?但是当你用notepad++打开csv文件时,你会看到:
这里有引号?是的,“CSV格式是分隔的数据格式,有字段/列分隔的逗号字符和记录/行分隔换行符。字段包含特殊字符(逗号,换行符,或双引号),必须以双引号括住。行内包含一个项目是空字符串,可以以双引号括住。字段的值包含双引号时,要双写这个双引号(就像把一个双引号当做转义符一样)。”再看看所有有{}出现的地方,发现:
这里少了引号,也就是错误提示中指出的没有引号。单独的{}不能被csv文件解读,所以只能当字段处理,就需要加引号:
需要注意的是,引号要成对出现,否则还会提示:ERROR o.a.j.c.CSVDataSet: java.io.IOException: Missing trailing quote-char in quoted field:[" 这样的错。OK,修改完毕再次运行,一切妥当!再用excel打开csv,发现数据并没有变化,可见这个引号不是真的字符,是修饰的。所以这里有个坑,就是表面上看起来一模一样的csv数据,有的可以运行,有的却不行。原因就在这——我就碰到了。。。
这里还有一个小疑惑就是如果csv数据太多的话手动修改是不明智的,目前还没有找到好办法可以一次修改或者避免引号遗漏,有知道的大神还请赐教下。