CSV-фидер работает только со значениями, разделенными запятыми, поэтому теоретически вы можете подготовить CSV-файл только с одним столбцом, и этот столбец может быть списком однострочных представлений ваших файлов XML (при условии, что они не содержат запятых).Но в вашем случае было бы лучше использовать тот факт, что Feeder[T]
это просто псевдоним для Iterator[Map[String, T]]
, чтобы вы могли определить свой собственный фидер, например.читает список файлов из определенного каталога и постоянно перебирает список их путей:
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()
с этим атрибутом filePath
(извлеченным с помощью Gatling EL ):
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
с File
объект, так что он может быть использован в большем количестве случаев использования.Поскольку он не возвращает String
путь, нам нужно извлечь его из File
с помощью SessionExpression[String]
fe:
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
)