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

时间:2016-03-14 16:02:45

标签: scala load-testing gatling

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

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

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

2 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:0)

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

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

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

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