如何使用 Gatling 遍历目录中的所有文件?
Posted
技术标签:
【中文标题】如何使用 Gatling 遍历目录中的所有文件?【英文标题】:How to iterate over all files within a directory with Gatling? 【发布时间】:2021-05-06 06:57:02 【问题描述】:我需要遍历目录中的多个文件,以便对每个文件执行文件上传。该目录位于src/test/resources
。
我了解 Gatling 的文件馈送器,但我没有看到任何允许我从目录中查找文件的文件(文件的名称是任意的,如果可能的话,不应该是测试中的硬代码) .
最好的方法是什么?
【问题讨论】:
你能不能 - 列出文件夹中的所有文件 - 制作地图列表,例如List(Map("file", file01.txt), Map("file", file02.txt) ...
) - 使用 Iterator(myList)
(检查 API)?
【参考方案1】:
首先,您需要带文件的进纸器。那是由Map
s 组成的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 个文件,GET 被执行了 2 次。现在你需要弄清楚如何上传。
我拥有的进口商品:
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
,即从展开的项目运行,而不是打包的jar。想知道是否可以使用类路径解析。
@pocza 您的解决方案似乎有效,但我很好奇为什么第二个代码 sn-p 中有嵌套的 exec
调用?以上是关于如何使用 Gatling 遍历目录中的所有文件?的主要内容,如果未能解决你的问题,请参考以下文章