加特林负载测试 - 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
  )

或者如果你觉得。想在更多场景下使用可以定义自己的FeederBuilderclass 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 路径,我们需要从FileSessionExpression[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 文件作为饲料可能?的主要内容,如果未能解决你的问题,请参考以下文章

加特林 HTTP 代理

springboot+nginx+https+linux实现负载均衡加域名访问简单测试

nginx作为负载均衡服务器——测试

Nginx+Tomcat负载均衡群集

在构建有效负载时动态设置XML标记值

VS 云负载测试 - 找不到目录/文件