如何将响应中的值写入加特林中的文件?

问题描述 投票:0回答:3

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

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

提取referenceId。现在,即使我将其作为负载测试运行,如何将其写入/附加到文件而不影响脚本?

scala load-testing gatling
3个回答
4
投票

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

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

3
投票

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

首先不要使用

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

其次,在每次执行中打开一个文件可能(可能不会)减慢负载测试速度。这很大程度上取决于您提出请求的速率。在较高的速率下,当更多并发执行尝试写入同一文件时,您可能会遇到争用。最简单的解决方案是写入不同的文件,但您仍然可能会用完最大可能的打开文件数。另一种解决方案是使用共享的

java.io.FileOutputStream
java.io.FileWriter
到具有适当同步的所需目标文件(将从各个线程访问),这仍然是阻塞 IO。另一种解决方案是使用 Java NIO API 通过
Channel
(非阻塞)或
OutputStream
(不确定是否非阻塞)写入共享文件。

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


0
投票

如果上面的代码示例“scala.tools.nsc.io.File”不起作用 试试这个....

.exec(session => {      scala.reflect.io.File("E://refenceId.csv").appendAll(session("responseBody").as[String] + "\n")
  session
}
© www.soinside.com 2019 - 2024. All rights reserved.