如何使用 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】:

首先,您需要带文件的进纸器。那是由Maps 组成的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 遍历目录中的所有文件?的主要内容,如果未能解决你的问题,请参考以下文章

如何告诉ffmpeg按顺序遍历目录中的所有文件

Android如何遍历特定目录下所有文件

文件目录遍历

如何将值输入到 Gatling 的 json 数组中的字段中?

如何遍历给定目录中的文件?

Python中如何遍历指定目录下的所有文件?