我有一个采用特殊格式XML的终结点。我正在尝试使用与提要的XML文件上的通函类似的功能。我可以使用CSV文件来执行此操作,但似乎无法通过XML文件来执行此操作。这甚至有可能吗?
我也读过这篇文章:https://gatling.io/docs/3.0/session/feeder/?highlight=feeder#file-based-feeders
我在加特林还很新,到目前为止只写了一个负载测试。
这是我的示例代码:
object ProcessXml {
val createProcessHttp = http("Process XML")
.post("/myEndpointPath")
.body(RawFileBody("data/myXml.xml"))
.asXML
.check(status is 200)
val createProcessShipment = scenario("Process Shipment XML")
.feed(RawFileBody("data/myXml.xml).circular) // feed is empty after first user
.exec(createProcessHttp)
}
由于某种原因,csv的.feed()参数起作用(csv(Environment.createResponseFeedCsv).circular;其中createResponseFeedCsv在我的环境文件中的utils下定义)。
在此问题上的任何帮助将不胜感激。 预先感谢。
答案 0 :(得分:0)
CSV馈送器仅适用于逗号分隔的值,因此从理论上讲,您可以仅用一列准备CSV文件,并且该列可以是XML文件的单行表示形式的列表(假设这些不包含任何逗号)。但是,根据您的情况,最好使用Feeder[T]
只是Iterator[Map[String, T]]
的别名这一事实,以便您可以定义自己的供料器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 EL提取)来调用filePath
:
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
fe从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
)