加特林负载测试 - XML 文件作为饲料可能?
Posted
技术标签:
【中文标题】加特林负载测试 - XML 文件作为饲料可能?【英文标题】:Gatling Load Test - XML file as feed possible? 【发布时间】:2018-09-25 19:57:07 【问题描述】:我有一个接受特定格式 XML 的端点。我正在尝试在提要的 XML 文件上使用与循环类似的功能。我可以用 CSV 文件做到这一点,但我似乎无法用 XML 文件做到这一点。这甚至可以做到吗?
我也读过这个:https://gatling.io/docs/3.0/session/feeder/?highlight=feeder#file-based-feeders
我在 gatling 方面也很新,到目前为止只写过一个负载测试。
这是我的示例代码:
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 下定义)。
对于这个问题的任何帮助将不胜感激。 提前致谢。
【问题讨论】:
【参考方案1】:CSV feeder 仅适用于逗号分隔的值,因此理论上您可以准备仅包含一列的 CSV 文件,并且该列可以是 XML 文件的单行表示形式的列表(假设那些不包含任何逗号)。但是在您的情况下,最好使用 Feeder[T]
只是 Iterator[Map[String, T]]
的别名这一事实,这样您就可以定义自己的馈线 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
这样,这个馈线将使用来自xmls_directory_path
目录的文件路径填充filePath
属性。因此,如果您使用所有示例 XML 加载它,您可以使用 filePath
属性(使用 Gatling EL 提取)调用 RawFileBody()
:
val scn = scenario("Example Scenario")
.feed(fileFeeder)
.exec(
http("Example request")
.post("http://example.com/api/test")
.body(RawFileBody("$filePath"))
.asXML
)
或者如果你觉得。想在更多场景下使用可以定义自己的FeederBuilder
class 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
)
【讨论】:
以上是关于加特林负载测试 - XML 文件作为饲料可能?的主要内容,如果未能解决你的问题,请参考以下文章