CSV feeder 仅适用于逗号分隔的值,因此理论上您可以准备仅包含一列的 CSV 文件,并且该列可以是 XML 文件的单行表示的列表(假设那些不包含任何逗号)。但在你的情况下,最好使用 fact thatFeeder[T]
只是一个别名,Iterator[Map[String, T]]
这样你就可以定义你自己的 feeder which fe。从某个目录读取文件列表并不断迭代它们的路径列表:
val fileFeeder = Iterator.continually(
new File("xmls_directory_path") match {
case d if d.isDirectory => d.listFiles.map(f => Map("filePath" -> f.getPath))
case _ => throw new FileNotFoundException("Samples path must point to directory")
}
).flatten
这样,此馈线将使用目录filePath
中文件的路径填充属性xmls_directory_path
。因此,如果您使用所有示例 XML 加载它,您可以RawFileBody()
使用该属性调用它(使用Gatling ELfilePath
提取):
val scn = scenario("Example Scenario")
.feed(fileFeeder)
.exec(
http("Example request")
.post("http://example.com/api/test")
.body(RawFileBody("${filePath}"))
.asXML
)
或者,如果你觉得。想在更多场景中使用它,您可以定义自己的FeederBuilder
类 fe:
class FileFeeder(path: String) extends FeederBuilder[File]{
override def build(ctx: ScenarioContext): Iterator[Map[String, File]] = Iterator.continually(
new File(path) match {
case d if d.isDirectory => d.listFiles.map(f => Map[String, File]("file" -> f))
case _ => throw new FileNotFoundException("Samples path must point to directory")
}
).flatten
}
在这种情况下,逻辑是相似的,我只是将其更改为file
带有对象的 feed 属性,File
以便可以在更多用例中使用它。由于它不返回String
路径,我们需要从 fe 中提取File
它SessionExpression[String]
:
val scn = scenario("Example Scenario")
.feed(new FileFeeder("xmls_directory_path"))
.exec(
http("Example request")
.post("http://example.com/api/test")
.body(RawFileBody(session => session("file").as[File].getPath))
.asXML
)