我是scala的新手,我正在尝试编写一个自定义的gatling馈线,用于从url读取csv文件(类似jsonUrl-Feeder)。
我不确定如何做到这一点。我尝试了以下方法,但现在我需要实现其他方法:
package common
import scala.io.Source
import scala.collection.mutable.ListBuffer
class CsvURLFeeder(url: String) extends Map[String, String] {
val source = Source.fromURL(url)
val reader = source.bufferedReader()
val attributeName = reader.readLine()
var list : ListBuffer[Map[String, String]] = new ListBuffer[Map[String, String]]()
val input = Stream.continually(reader readLine)
for( line <- input){
list += Map(attributeName-> line)
}
def getFeeder() : Iterator[Map[String, String]] = {
return list.iterator
}
}
缺少方法:
// Members declared in scala.collection.immutable.Map
def +[B1 >: String](kv: (String, B1)): scala.collection.immutable.Map[String,B1] = ???
// Members declared in scala.collection.MapLike
def -(key: String): scala.collection.immutable.Map[String,String] = ???
def get(key: String): Option[String] = ???
1def iterator: Iterator[(String, String)] = ???
另外,我不知道如何使迭代器随机。我不想逐一浏览列表。
是不是有类似的喂食器为我做同样的事情? 或者实施这种进料器的最佳方法是什么?
提前致谢。
更新
拿走部分&#34;扩展Map [String,String]&#34;因为它显然没有做任何事情。现在 - 当然 - 我不再需要实施这些方法了。
现在我可以看到for循环出了问题......它永远不会停止打印&#34; null&#34;。另外,第一行是错误的。它是&#34; Stream(&#34;实际第一行&#34;,?)&#34;。
更新2 我把阅读部分改为
var list : ListBuffer[Map[String, String]] = new ListBuffer[Map[String, String]]()
var line = "";
while ( {line = reader.readLine ; line != null} ){
list += Map(attributeName-> line)
}
......现在这个有效!!凉。
但它看起来很难看。有更优雅的方式吗?