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

使用execute_curl函数时Bats测试返回97错误的修复需求

解决Mock Curl脚本无法匹配execute_curl函数调用的问题

直接调用curl测试通过,但通过execute_curl函数调用时返回错误码97,核心原因是mock脚本的参数匹配逻辑没有覆盖execute_curl调用curl的实际参数格式。以下是具体修改方案:

问题诊断

execute_curl作为封装函数,通常会给curl添加额外选项(比如Header、请求方法),或者对URL做动态拼接(比如添加查询参数),而原始mock脚本可能只硬匹配固定的URL字符串,导致无法命中匹配逻辑,返回预设的错误码97。

修改后的Mock Curl脚本

版本1:适配带额外选项的curl调用

该版本会自动跳过curl的选项参数(如-H、-X),定位到实际的URL参数,支持精确或模糊匹配:

#!/bin/bash
# 遍历参数,提取实际请求的URL
target_url=""
for arg in "$@"; do
  # 识别URL:以http/https开头,或非选项参数(不以-开头)
  if [[ "$arg" =~ ^https?:// || "$arg" != -* ]]; then
    target_url="$arg"
    break
  fi
done

# 匹配目标URL(可根据需求修改为你的目标地址)
if [[ "$target_url" == "https://your-target-domain.com/api" || "$target_url" == "https://your-target-domain.com/api?*" ]]; then
  # 返回模拟的响应内容
  echo '{"code": 200, "msg": "success"}'
  exit 0
else
  # 可选:添加调试日志,记录未匹配的参数
  echo "Unmatched args: $*" >> /tmp/mock_curl_debug.log
  exit 97
fi

版本2:支持动态URL的正则匹配

如果execute_curl调用的URL带有动态参数(如时间戳、token),可以用正则匹配URL前缀:

#!/bin/bash
# 提取URL参数
target_url=""
for arg in "$@"; do
  if [[ "$arg" =~ ^https?:// ]]; then
    target_url="$arg"
    break
  fi
done

# 用正则匹配URL前缀,忽略后续动态参数
if [[ "$target_url" =~ ^https://your-target-domain.com/api ]]; then
  echo '{"code": 200, "msg": "success"}'
  exit 0
else
  exit 97
fi

后续操作

  1. 将mock目录下的curl脚本替换为上述修改后的版本
  2. 确保脚本有执行权限:chmod +x mock/curl
  3. 重新运行bats测试:bats test.bats

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 16:22:20