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

如何修改db.readRows遍历POST响应中动态长度的samples数组

问题描述

POST请求执行完成后,需要验证响应中samples数组的所有元素是否都已存储到数据库中。现有代码仅能检查数组的第一个元素,需修改以支持遍历处理长度动态变化的整个数组。

原有代码(仅处理第一个元素)

请求部分

* request payload
* method POST
* status 200

针对数组第一个元素的数据库检查

* def rows = db.readRows('select * from Database.tablename WHERE attribute_1 = \'' + response.samples[0].toUpperCase().replaceAll('-', '') + '\' ') [0]
* print rows.attribute1
* rows.attribute1 contains response.samples[0]

响应负载示例(内容动态变化)

{
  "samples": [
    "28728jjd-jj22-jkj2k-2kol2k2",
    "28728jjd-jj22-jkj2k-2kol2k1",
    "28728jjd-jj22-jkj2k-2kol2k3",
    "28728jjd-jj22-jkj2k-2kol2k4",
    "28728jjd-jj22-jkj2k-2kol2k5"
  ]
}

查询结果示例

[
"28728JJDJJ22JKJ2K2KOL2K2"
]
修改方案

使用Karate的forEach循环遍历整个数组,对每个元素执行数据库查询与验证:

* def transformedSamples = response.samples.map(x => x.toUpperCase().replaceAll('-', ''))
* forEach transformedSamples 
  * def currentSample = __item
  * def rows = db.readRows('select * from Database.tablename WHERE attribute_1 = ?', currentSample)
  * assert rows.length > 0 : '未找到匹配当前样本的记录: ' + currentSample
  * assert rows[0].attribute1.contains(response.samples[__index])

代码说明

  • 统一转换样本格式:通过map将samples数组的每个元素转成大写并去除横杠,与数据库存储格式对齐,得到transformedSamples数组。
  • 遍历处理每个元素:forEach循环遍历转换后的数组,__item指代当前循环元素,__index对应原数组的索引位置。
  • 安全的参数化查询:用?作为占位符传递参数,避免直接字符串拼接带来的SQL注入风险。
  • 双重验证逻辑:先确认数据库存在匹配记录,再验证查询结果的attribute1包含原样本值。

内容的提问来源于stack exchange,提问作者Minhaaz Mohamed

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 07:03:36