如何使用 Gatling 遍历目录中的所有文件?

How to iterate over all files within a directory with Gatling?

我需要遍历目录中的多个文件,以便对每个文件执行文件上传。该目录位于 src/test/resources.

我理解 Gatling 的文件供给器,但我没有看到任何允许我从目录中查找文件的东西(文件名是任意的,如果有的话,在测试中不应该是硬编码的)可能)。

解决此问题的最佳方法是什么?

首先你需要带文件的feeder。那是由 Map 组成的 Array。这个地图需要有 String 作为键,每个文件都有自己的地图,里面有我们需要的东西。

假设我们只需要一个名字,那么类似的东西应该可以工作:

def getFilePropsFromDir(dir: String): Array[Map[String, String]] = {
  val d = new File(dir)

  if (d.exists && d.isDirectory) {
    d.listFiles.filter(_.isFile).map(x => Map("path" -> x.toString))
  } else {
    Array()
  }
}

val feederWithFiles = getFilePropsFromDir("src/test/resources/dir_with_files/")

那么你需要这样的场景(我什么都不上传)

val sut = scenario("Just feed files and query google")
    .feed(feederWithFiles)
    .exec(session => {
        val path = session("path").as[String] // get values by key from map - we had only "path" there
        println(path)
        val fileToUpload = getFileToUpload(path) // dummy function

        session.setAll(
          // prepare data for using later. Also k -> v
          ("fileToUpload", fileToUpload), 
          // another entry to illustrate how to use session elements
          ("googleAddress","http://google.com") 
        )
      }
    )
    .exec(
      exec(
          http("Should do something that uploads, but I just GET google")
            .get("${googleAddress}") // access key "googleAddress" from session
        )
    )

  setUp(
    sut.inject(rampUsers(1).during(1.seconds))
  ).protocols(http)

  def getFileToUpload(path: String): String = {
    path
  }

我创建了2个文件,执行了2次GET。现在你需要弄清楚如何上传。

我拥有的进口商品:

import io.gatling.core.Predef._
import io.gatling.core.body.StringBody
import io.gatling.core.structure.ChainBuilder
import io.gatling.http.Predef.http
import java.io.File
import scala.concurrent.duration._
import scala.io.Source