如何使用 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
我需要遍历目录中的多个文件,以便对每个文件执行文件上传。该目录位于 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