You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Gatling Scala:批量读取文件记录并作为JSON请求体的技术问询

问题解答:批量读取记录并构建JSON请求体

咱们一步步来解决你的两个问题:

1. 记录文件的类型选择(后缀为records.)

最推荐你用 records.json(JSON数组格式),理由很直接:

  • 你的最终需求是把记录转成JSON请求体,JSON数组天然适配多条字符串的存储,格式就是["记录1", "记录2", "记录3", ...],后续读取和转换的成本最低。
  • 如果你的记录是每行一条纯字符串的格式,也可以用records.txt,但读取后需要额外把这些字符串包装成JSON数组,步骤会多一点。

优先选records.json,能帮你省不少转换功夫。

2. 读取X条记录并构建JSON请求体

你的示例代码里用了ElFileBody直接读取整个文件,但现在需要读取指定数量的记录,得先手动读取文件、截取X条,再转成JSON字符串作为请求体。下面分两种文件格式给你示例代码:

情况一:用records.json(JSON数组格式)

import com.fasterxml.jackson.databind.ObjectMapper
import com.fasterxml.jackson.core.type.TypeReference
import java.io.File
import org.apache.http.entity.StringBody
import org.apache.http.entity.ContentType

// 1. 初始化Jackson的ObjectMapper(处理JSON序列化/反序列化)
val objectMapper = ObjectMapper()

// 2. 读取整个JSON数组文件,转成字符串列表
val allRecords: List<String> = objectMapper.readValue(
    File("records.json"),
    object : TypeReference<List<String>>() {}
)

// 3. 定义要读取的记录数X,这里假设是5
val x = 5
// 取前X条记录,如果总记录数不足X,就取所有现有记录
val selectedRecords = allRecords.take(x)

// 4. 把选中的记录转成JSON数组字符串
val requestBodyJson = objectMapper.writeValueAsString(selectedRecords)

// 5. 构建POST请求,把JSON字符串作为请求体传入
val request: HttpRequestBuilder = Utils.createPostBodyRequest(
    "request",
    "localhost:8080/request",
    mapOf(Constants.Content_Type to Constants.Application_Json),
    StringBody(requestBodyJson, ContentType.APPLICATION_JSON)
)

情况二:用records.txt(每行一条字符串)

如果你的记录是每行存一条,就用这个方案:

import com.fasterxml.jackson.databind.ObjectMapper
import java.io.File
import org.apache.http.entity.StringBody
import org.apache.http.entity.ContentType

// 1. 读取txt文件的所有行,直接得到字符串列表
val allRecords: List<String> = File("records.txt").readLines()

// 2. 截取前X条记录
val x = 5
val selectedRecords = allRecords.take(x)

// 3. 转成JSON数组字符串
val objectMapper = ObjectMapper()
val requestBodyJson = objectMapper.writeValueAsString(selectedRecords)

// 4. 构建请求,和上面逻辑一致
val request: HttpRequestBuilder = Utils.createPostBodyRequest(
    "request",
    "localhost:8080/request",
    mapOf(Constants.Content_Type to Constants.Application_Json),
    StringBody(requestBodyJson, ContentType.APPLICATION_JSON)
)

额外提示

  • 如果需要分页读取(比如第一次取1-5条,第二次取6-10条),可以用allRecords.drop(n).take(x),其中n是已经读取过的记录数。
  • 记得加异常处理:比如文件不存在、JSON格式错误、X为0或者负数的情况,避免程序崩溃。比如可以加个判断:
    if (x <= 0) {
        throw IllegalArgumentException("X必须是正整数")
    }
    if (selectedRecords.isEmpty()) {
        println("提示:文件中没有可用记录")
    }
    

内容的提问来源于stack exchange,提问作者Lihi Golan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 04:26:50