当前位置: 首页 > 知识库问答 >
问题:

Gatling负载测试-XML文件是否尽可能提供?

郑高驰
2023-03-14

我有一个接受特定格式的XML的endpoint。我正在尝试在XML文件上使用类似于循环的函数作为提要。我可以使用CSV文件做到这一点,但我似乎无法使用XML文件做到这一点。这可能吗?

我也读过:https://gatling.io/docs/3.0/session/feeder/?highlight=feeder#file-基于网络的馈线

我也是加特林的新手,到目前为止只写过一次负载测试。

以下是我的示例代码:

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 works的feed()参数(csv(Environment.createResponseFeedCsv)。圆形的其中createResponseFeedCsv在我的环境文件中的utils下定义)。

在这个问题上的任何帮助将不胜感激。提前感谢。

共有1个答案

梁丘书
2023-03-14

CSV feeder仅适用于逗号分隔的值,因此理论上,您可以只使用一列来准备CSV文件,该列可以是XML文件的单行表示列表(假设这些文件不包含任何逗号)。但在您的情况下,最好使用这样一个事实,Feeder[T]只是Iterator[Map[String,T]]的别名,这样您就可以定义自己的Feeder了。从特定目录中读取文件列表,并不断迭代其路径列表:

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类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属性,以便在更多用例中使用它。由于它不返回Stringpath,我们需要使用SessionExpression[String]fe从File中提取它:

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
  )
 类似资料:
  • 假设我需要编写一个gatling负载测试脚本,它需要调用两个api A1和A2。它首先需要调用A1,A1将返回一个JSON负载,它需要在JSON负载中提取一个字段,并在调用第二个API时使用该字段值。有人能告诉我怎么做吗?此脚本用于负载测试通过HTTP的服务器restful API。

  • 伙计们对BrowserStack还不熟悉。 任何建议都将得到高度赞赏,因为它将解决我前面的路障

  • 我目前在AWS中使用Gatling加载测试我的服务。我使用HTTP做了几次负载测试,我的服务工作得很好。没有TLS握手错误。当我们移动到HTTPS时,负载测试结果显示TLS握手超时异常到处都是,最后因为未处理的请求排队而抛出OOM。 其他信息: Gatling场景如下:发送三个请求,然后使用头发送一个请求。我想模拟发送三个保持活动状态的请求,并在最后关闭它 我的服务由Kubernetes管理 我所

  • 我想单击单击时下载文件的按钮,并测试是否已下载预期的文件。 我已经用谷歌搜索过这个,但不幸的是没有找到关于这个主题的任何具体答案,我找到的很多帖子都已经过时了(2014 年),我敢打赌 Selenium 现在一定已经改变了 API 定义。

  • 问题内容: 我正在使用某些文件,并且想知道是否存在一种检查文件是否为图像的方法? 问题答案: 这对我来说很好。希望我能帮上忙

  • 本文向大家介绍性能测试和负载测试之间的区别,包括了性能测试和负载测试之间的区别的使用技巧和注意事项,需要的朋友参考一下 性能测试 在软件上执行性能测试,以测试其在特定工作负载下的性能,灵敏度,反应时间和稳定性。 负载测试 负载测试检查软件的性能,以检查在基于实际负载的负载下的性能。 以下是性能测试和负载测试之间的一些重要区别。 序号 键 性能测试 负载测试 1 目的 性能测试可以测试各种负载下的系