当前位置: 首页 > news >正文

CNAS软件测评机构【Gatling查询参数和表单数据queryParam、formParam和multipartFormData参数处理方式】

Gatling的queryParam、formParam和multipartFormData是构建HTTP请求参数的三种主要方式,分别对应不同的协议标准和数据格式。

1. queryParam:构建URL查询字符串

queryParam 用于构建URL中的查询字符串(?key1=value1&key2=value2),主要应用于GET请求,也可用于POST、PUT等。

基础和动态用法

import io.gatling.core.Predef._ import io.gatling.http.Predef._ // 基础静态参数 http("基础查询请求") .get("/api/search") .queryParam("category", "books") // ?category=books .queryParam("sort", "price_desc") // 动态参数(从Session中提取) .exec( http("动态查询请求") .get("/api/search") .queryParam("userId", "${userId}") // EL表达式引用Session变量 .queryParam("page", "${currentPage}") .queryParam("query", "#{randomString(10)}") // 使用Gatling内置函数 )

高级用法-参数列表和条件参数

// 构建多值参数(数组) .queryParam("tags", "java,scala,performance") // 方式1:逗号分隔 .queryParam("tags", Seq("java", "scala", "performance")) // 方式2:Scala序列 // 条件性添加参数 .exec(session => { val userLevel = session("userLevel").as[String] val params = if (userLevel == "vip") { Map("vip_only" -> "true", "premium" -> "yes") } else { Map("standard" -> "true") } session.set("queryParams", params) }) .exec( http("条件查询") .get("/api/content") .queryParam("basic", "always") // 动态添加多个参数 .queryParamList("#{queryParams}") )

2. formParam-标准表单编码

formParam 用于 application/x-www-form-urlencoded 格式,这是HTML表单的默认提交格式。

基础和批量提交

// 基础表单提交(模拟登录) http("用户登录") .post("/login") .header("Content-Type", "application/x-www-form-urlencoded") .formParam("username", "${username}") .formParam("password", "${password}") .formParam("remember_me", "true") // 批量添加参数(适用于参数数量动态变化) .exec(session => { val formData = Map( "name" -> "测试用户", "email" -> "test@zmtests.com", "age" -> "30", "subscription" -> "premium" ) session.set("formDataMap", formData) }) .exec( http("批量表单提交") .post("/profile/update") .formParamList("#{formDataMap}") // 批量添加所有参数 )

编码和特殊字符处理

// Gatling自动进行URL编码,但需注意特殊情况 .formParam("search_query", "Gatling & Performance Testing") // 编码为:Gatling%20%26%20Performance%20Testing // 处理已编码值(使用原始字符串) .formParam("pre_encoded", RawFileBodyPart("已编码的数据.txt")) // 或手动控制编码 .exec(session => { val rawValue = "特殊&字符=测试" val encodedValue = java.net.URLEncoder.encode(rawValue, "UTF-8") session.set("safeValue", encodedValue) })

3. multipartFormData-混合表单数据(含文件上传)

multipartFormData 用于 multipart/form-data 格式,支持混合文本字段和二进制文件上传。

基础文件上传

// 基本文件上传(小文件) http("上传单文件") .post("/upload") .bodyPart(RawFileBodyPart("file", "test.pdf")) // 从resources文件夹读取 .bodyPart(StringBodyPart("description", "性能测试报告PDF文档")) // 指定MIME类型和字符集 http("上传带元数据的文件") .post("/upload") .bodyPart( RawFileBodyPart("document", "report.pdf") .contentType("application/pdf") // 指定MIME类型 .fileName("性能报告.pdf") // 自定义客户端文件名 ) .bodyPart( StringBodyPart("notes", "这是最终版本的报告") .charset("UTF-8") // 指定字符集 )

高级用法-动态多文件和流式处理

// 动态构建多文件上传 val fileFeeder = csv("test_files.csv").random // 从CSV文件获取文件信息 exec(feed(fileFeeder)) .exec( http("动态多文件上传") .post("/batch-upload") .bodyPart(RawFileBodyPart("file1", "${file1_path}")) .bodyPart(StringBodyPart("category1", "${file1_category}")) .bodyPart(RawFileBodyPart("file2", "${file2_path}")) .bodyPart(StringBodyPart("category2", "${file2_category}")) .bodyPart(StringBodyPart("uploader", "${userId}")) ) // 大文件处理和流式上传(避免内存溢出) http("流式上传大文件") .post("/upload-large") .processRequestBody( bodyParts => bodyParts.map { case part: RawFileBodyPart => part.toStream // 转换为流处理 case other => other } ) .bodyPart( RawFileBodyPart("video", "large_video.mp4") .contentType("video/mp4") .transferEncoding("binary") // 二进制传输编码 ) .bodyPart(StringBodyPart("comment", "大文件测试"))

内存优化和性能配置

// Gatling配置中调整multipart相关参数 val httpProtocol = http .baseUrl("http://zmtests.com") .multipartBoundary("----WebKitFormBoundaryABC123") // 自定义边界 .disableWarmUp // 对于大文件测试,禁用热身以减少内存波动 .shareConnections // 共享连接提高效率 // 在具体请求中控制缓冲区大小 http("优化文件上传") .post("/upload") .bodyPart( RawFileBodyPart("data", "large.bin") .contentType("application/octet-stream") ) .requestTimeout(60000) // 增加超时时间

注意事项

参数编码一致:Gatling自动处理URL编码,保证测试数据和实际生产数据编码一致

Session变量管理:对于动态参数,合理使用Session来存储和管理参数状态

文章来源:卓码软件测评

精彩推荐:点击蓝字即可
软件负载测试API自动化测试软件测试第三方软件测试软件性能测试软件测试机构

文件资源管理:

// 使用feeder动态选择文件 val fileFeeder = Iterator.continually(Map( "filePath" -> s"data/test_${java.util.UUID.randomUUID().toString}.txt" )) // 测试后清理生成的文件 after { println("测试完成,清理临时文件") // 文件清理逻辑 }

性能监控:

queryParam:注意URL长度和参数解析

formParam:注意编码/解码CPU消耗

multipartFormData:注意内存使用、I/O吞吐和网络延迟

调试

// 1. 打印实际请求详情 .exec { session => // 通过日志或调试器查看实际构建的请求 println(s"请求参数: ${session("requestParams").asOption[String]}") session } // 2. 使用Gatling HTTP日志 val httpProtocol = http .baseUrl("http://zmtests.com") .enableHttp2 .disableCaching .silentResources // 静默资源请求 .silentUri(".*\\.(css|js|png|gif).*") .disableFollowRedirect .maxConnectionsPerHost(10) .acceptHeader("*/*") .userAgentHeader("Gatling/3.0") .warmUp("http://zmtests.com/health") // 预热 .check(status.is(200)) // 基础检查

这三种参数构建方式能精准模拟从简单查询到复杂文件上传的各种实际业务情形。

http://www.zskr.cn/news/142532.html

相关文章:

  • 第三方CMA软件评测机构Gatling超时设置connectionTimeout、requestTimeout参数使用
  • 开题报告写到凌晨三点?百考通AI平台,3分钟给你一份“能过审”的专业初稿!
  • AI训练图片视频数据集供应商—卓特视觉用亿级语料加速模型商业化 - 品牌2026
  • 当10年架构师拿起AI:不是写不动了,是写得太快了
  • 区块链 Web3 项目的费用
  • 智能决策引擎:高效处理来源标签
  • 格(Lattice)
  • 基于SpringBoot家政保洁预约系统设计与实现
  • 选产后康复理疗机器人别乱挑!小理家这 3 大核心优势必看
  • AI助教系统:你的24小时智能学习伙伴
  • 1043 Is It a Binary Search Tree
  • 大部分企业都选错?玄微子揭秘AI智能体开发公司的真实选择标准
  • 苏州二手房翻新大揭秘!这家局部改造公司超绝 - 品牌测评鉴赏家
  • 自动化处理“入群申请”的逻辑判定流
  • 脑机接口(BCI):EEG 信号解析算法实战
  • Ubuntu 24.04 运行 pip install 报 externally-managed-environment
  • 2025最新补血滋补品、补血补充剂、补血营养剂、补血口服液、补血保健品首推复方红衣补血口服液:中华老字号守护全民健康,红衣补血实力出圈 - 全局中转站
  • 2025 十大图库实测!高清免费可下载 正版版权,设计师必藏素材站! - 品牌2026
  • 【课程设计/毕业设计】基于SpringBoot的网球馆管理系统的设计与实现网球场地预订、课程报名【附源码、数据库、万字文档】
  • 2025年皮带输送机厂家实力推荐:带式给料机/传送带输送机/矿用皮带机源头厂家精选 - 品牌推荐官
  • 霍尼韦尔新风净化机:一键掌控健康,解锁家居呼吸新体验 - 海棠依旧大
  • 【计算机毕业设计案例】基于SpringBoot的网球馆管理系统的设计与实现网球俱乐部管理系统(程序+文档+讲解+定制)
  • 5分钟速通:上下文工程核心要点!
  • 【AI模型隐私新威胁】:Open-AutoGLM中隐藏的7大攻击面详解
  • 《2025中国智能营销服务商TOP10权威评测:AI时代下的全域增长伙伴》 - 呼呼拉呼
  • “救命!RAG这么简单?LlamaIndex让大模型开发不再‘卷‘,小白也能5分钟上手检索增强生成!“
  • langchain agent按需使用Skill
  • 银行业网络安全工作的发展历程和主要挑战
  • 2025国内最新补血保健品品牌TOP5评测!优质产品厂家权威榜单发布,呵护全家健康生态 - 全局中转站
  • Open-AutoGLM移动端推理优化秘籍(仅限内部流传的3种压缩算法)