【问题标题】:Upload dynamic CSV file via Gatling通过 Gatling 上传动态 CSV 文件
【发布时间】:2021-05-26 13:53:32
【问题描述】:

我最近对学习一些负载测试工具产生了兴趣,而 Gatling 似乎是一个非常好的选择。与其他工具相关的唯一缺点是缺少用于上传具有动态值的文件的文档/示例。

例如,要上传一个静态 CSV 文件,我可以使用:

val scn: ScenarioBuilder = scenario("My First Test")
.exec(http("Upload CSV")
  .post("/csv-upload")
  .formUpload("file", "file.csv")
  .check(status.is(202))
)

但是,如果我想添加一个 feeder 来为该 CSV 添加值,我希望有类似的东西:

val scn: ScenarioBuilder = scenario("My First Test")
.feed(customFeeder)
.exec(http("Upload CSV")
  .post("/csv-upload")
  .formUpload("file", ElFileBody("file.csv"))
  .check(status.is(202))
)

我已经尝试了多种方法来上传身体部位,例如,如果我做了这样的事情:

val scn: ScenarioBuilder = scenario("My First Test")
.feed(customFeeder)
.exec(http("Upload CSV")
  .post("/csv-upload")
  .bodyPart(ElFileBodyPart("file", "file.csv"))
  .check(status.is(202))
)

我在服务器端收到一个错误: MissingServletRequestPartException: Required request part 'file' is not present

我能够代理 Gatling 所做的请求,生成的 curl 请求是:

curl --location --request POST 'http://localhost:8080/api/v1/resource/csv' \
--header 'accept: application/json' \
--header 'content-length: 310' \
--header 'content-type: multipart/form-data; boundary=UhyANQVVCm0hahnV9JvGEA8tPLU1Kc2Z5Fj' \
--header 'host: localhost:8080' \
--header 'x-tenantid: t1' \
--data-raw '--UhyANQVVCm0hahnV9JvGEA8tPLU1Kc2Z5Fj
Content-Disposition: form-data; name="file"
Content-Type: multipart/form-data; charset=UTF-8

Name,Phone,Address
PersonName,123456,ThatStreet

--UhyANQVVCm0hahnV9JvGEA8tPLU1Kc2Z5Fj--
'

哪个构造正确请求,但服务器端的错误仍然存​​在。

有什么方法可以实现吗?

【问题讨论】:

  • 您是否尝试过让您的自定义馈线返回 List[Map[String, String]],例如List[Map("lines" -> "HelloWorld"]]file.csv 中,使用 ${lines} 引用密钥?
  • 是的,@ccheneson。问题是formUpload 只接收文件路径,所以我不能在formUpload 中有ElFileBody,因为它会返回文件内容而不是方法要使用的文件路径
  • 也许您可以从 customFeeder 函数中添加行并保存文件。可能效率不高 - 或者在执行请求之前生成测试文件

标签: scala performance-testing gatling gatling-plugin


【解决方案1】:

与其他工具相关的唯一缺点是上传具有动态值的文件。

不知道这是从哪里来的。

.formUpload("name", "path") 只是bodyPart(RawFileBodyPart("name", "path")) 的便捷快捷方式。

请阅读official documentation regarding multipart support

【讨论】:

  • 我知道如何上传静态文件。 “具有动态值”部分让我感到困扰。我想要一个类似的 CSV:Name, Number,Address ${name},${number},${address}
  • 是的,我确实点击了文档的链接
猜你喜欢
  • 2017-10-25
  • 2021-09-20
  • 2016-03-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-23
  • 2020-11-14
  • 2021-12-10
相关资源
最近更新 更多