如何将响应中的值写入 Gatling 中的文件?

How to write a value from the response to a file in Gatling?

我有一个脚本,每次执行时都会创建新的 referenceId。我用了

.check(regex("orders.(.*?)\"").saveAs("referenceId")))

提取 referenceId。现在,即使我 运行 它作为负载测试,我如何才能 write/append 它到一个文件而不影响脚本?

我使用 .exec 中的会话将我的值写入文件。这是:

.exec( session => {
                scala.tools.nsc.io.File("../user-files/data/refenceId.csv").appendAll(session("refenceId").as[String]+"\n")
                session}
      )

您的解决方案有效,但是...

首先,不要使用 scala.tools.nsc.io 包中的任何东西(如果不需要的话)。它是仅供 Scala 编译器使用的内部包。它不包含在 Scala 运行time 库(官方 Scaladoc)中 public API。有关主题 here 的更多信息。 Scala 没有任何自己的写入文件的抽象,因此需要使用普通的 java.io.File & co.

其次在每次执行中打开一个文件可以(可能不会)减慢您的负载测试。这在很大程度上取决于您提出请求的速度。在更高的速率下,当更多并发执行尝试写入同一文件时,您可能会遇到争用。最简单的解决方案是写入不同的文件,但您仍然可以 运行 超出最大可能的打开文件数。另一种解决方案是使用 shared java.io.FileOutputStream resp。 java.io.FileWriter 通过适当的同步(将从各种线程访问)到所需的目标文件,这仍然是阻塞 IO。另一种解决方案是使用 Java NIO API 通过 Channel (非阻塞)或 OutputStream (不确定是否非阻塞)写入共享文件。

当然解决方案的实施难度不同。