Apidog Docs
🇨🇳 简体中文
  • 🇺🇸 English
  • 🇯🇵 日本語
  • 🇪🇸 Español
  • 🇰🇷 한국인
  • 🇨🇳 简体中文
  • 🇵🇹 Português (Portugal)
  • 🇮🇩 Bahasa Indonesia
  • 🇧🇷 Português (Brasil)
  • 🇻🇳 Tiếng Việt
  • 🇨🇳 繁體中文
🇨🇳 简体中文
  • 🇺🇸 English
  • 🇯🇵 日本語
  • 🇪🇸 Español
  • 🇰🇷 한국인
  • 🇨🇳 简体中文
  • 🇵🇹 Português (Portugal)
  • 🇮🇩 Bahasa Indonesia
  • 🇧🇷 Português (Brasil)
  • 🇻🇳 Tiếng Việt
  • 🇨🇳 繁體中文
🇨🇳 简体中文
  • 🇺🇸 English
  • 🇯🇵 日本語
  • 🇪🇸 Español
  • 🇰🇷 한국인
  • 🇨🇳 简体中文
  • 🇵🇹 Português (Portugal)
  • 🇮🇩 Bahasa Indonesia
  • 🇧🇷 Português (Brasil)
  • 🇻🇳 Tiếng Việt
  • 🇨🇳 繁體中文
Learning Center
HomeSupport CenterAPI ReferencesDownloadChangelog
Learning Center
HomeSupport CenterAPI ReferencesDownloadChangelog
  1. 使用脚本
  • Apidog 学习中心
  • 入门
    • Apidog 简介
    • Apidog 中的基本概念
    • 导航 Apidog
    • 快速开始
      • 概述
      • 创建端点
      • 发送请求
      • 添加断言
      • 创建测试场景
      • 共享 API 文档
      • 探索更多
    • 迁移到 Apidog
      • 概述
      • 手动导入
      • 定时导入(绑定数据源)
      • 导入选项
      • 导出数据
      • 导入自
        • 从 Postman 导入
        • 导入 OpenAPI 规范
        • 导入 cURL
        • 导入 Markdown
        • 从 Insomnia 导入
        • 从 apiDoc 导入
        • 导入 .har 文件
        • 导入 WSDL
  • Mock API 数据
    • 概述
    • Smart Mock
    • 自定义模拟
    • 模拟优先级顺序
    • 模拟脚本
    • 云端模拟
    • 自托管 Runner 模拟
    • 模拟语言(区域设置)
  • 账号与偏好设置
    • 账户设置
    • 生成 OpenAPI 访问令牌
    • 通知
    • 语言设置
    • 快捷键
    • 网络代理配置
    • 备份数据
    • 更新 Apidog
    • 删除账户
    • 实验性功能
  • 发送请求
    • 概述
    • SSE 调试
    • MCP 客户端
    • Socket.IO
    • WebSocket
    • Webhook
    • SOAP 或 WebService
    • GraphQL
    • gRPC
    • 使用请求代理 Agent 进行调试
    • 创建请求
      • 请求历史
      • 请求基础
      • 参数和主体
      • 请求头部
      • 请求设置
      • 调试请求
      • 将请求保存为端点
      • HTTP/2
    • 身份验证与授权
      • 概述
      • CA 和客户端证书
      • 授权类型
      • Digest Auth
      • OAuth 1.0
      • OAuth 2.0
      • Hawk 身份验证
      • Kerberos
      • NTLM
      • Akamai EdgeGrid
    • 响应和 Cookie
      • 查看 API 响应
      • 管理 Cookie
      • 概述
  • 开发和调试 API
    • 概述
    • 生成请求
    • 发送请求
    • 调试用例
    • 测试用例
    • 动态值
    • 验证响应
    • Design-First vs Request-First
    • 生成代码
    • 环境与变量
      • 概览
      • 使用变量
      • 环境管理
    • Vault 密钥
      • 概述
      • HashiCorp Vault
      • Azure Key Vault
      • AWS Secrets Manager
    • 动态值模块
      • Airline
      • 动物
      • 颜色
      • 商务
      • Company
      • 数据库
      • 数据类型
      • 日期
      • Finance
      • 食物
      • Git
      • Hacker
      • Helpers
      • 图像
      • Internet
      • 位置
      • Lorem
      • 音乐
      • 数字
      • Person
      • 电话
      • 科学
      • String
      • System
      • Vehicle
      • Word
    • 前置和后置处理器
      • 概述
      • 断言
      • 提取变量
      • 等待
      • 安全
      • 数据库操作
        • 概述
        • MySQL
        • MongoDB
        • Redis
        • Oracle 客户端
      • 使用脚本
        • 概述
        • 预处理器脚本
        • 后处理器脚本
        • 公共脚本
        • Postman 脚本参考
        • 调用其他编程语言
        • 使用 JS 库
        • 可视化响应
        • 脚本示例
          • 断言脚本
          • 使用变量
          • 修改请求
          • 其他示例
    • API 调试
      • AI Agent Debugger
      • A2A 调试器
  • 设计 API
    • 概述
    • 创建新的 API 项目
    • 端点基础
    • API 设计指南
    • 模块
    • 配置多个请求主体示例
    • 组件
    • 通用字段
    • 全局参数
    • 端点变更历史
    • 评论
    • 批量端点管理
    • 自定义协议 API
    • Spec-first 模式(Beta)
    • 安全方案
      • 概述
      • 创建安全方案
      • 使用安全方案
      • 在线文档中的安全方案
    • 高级功能
      • 自定义端点字段
      • 关联的测试场景
      • 端点状态
      • 参数列表的外观
      • 端点唯一标识
    • Schemas
      • 概述
      • 创建新 Schema
      • 构建 Schema
      • 从 JSON 等生成 Schema
      • oneOf, allOf, anyOf
      • 使用 Discriminator
  • Apidog Europe
    • Apidog Europe
  • API 测试
    • 概述
    • 测试场景
      • 创建测试场景
      • 在请求之间传递数据
      • 流程控制条件
      • 从端点和端点用例同步数据
      • 从其他项目导入端点和端点用例
      • 导出测试场景
    • 测试报告
      • 测试报告
    • 运行测试场景
      • 运行测试场景
      • 批量运行测试场景
      • 数据驱动测试
      • 共享测试数据
      • 定时任务
      • 管理来自其他项目的 API 运行环境
    • 测试套件
      • 概述
      • 创建测试套件
      • 编排测试套件
      • 本地运行测试套件
      • 通过 CLI 运行测试套件
      • 定时任务
    • 测试 API
      • 集成测试
      • 性能测试
      • 端到端测试
      • 回归测试
      • 契约测试
    • Apidog CLI
      • 概述
      • 安装和运行 Apidog CLI
      • Apidog CLI 选项
    • CI/CD
      • 概述
      • 与 Github Actions 集成
      • 与 Gitlab 集成
      • 与 Jenkins 集成
      • 通过 Git Commit 触发测试
  • 发布 API 文档
    • 概述
    • 支持的 API 技术
    • 快速分享
    • 查看 API 文档
    • Markdown 文档
    • 发布文档站点
    • 自定义登录页面
    • 自定义布局
    • 自定义 CSS、JavaScript、HTML
    • 自定义域名
    • AI 功能
    • SEO 设置
    • 高级设置
      • 文档搜索
      • CORS 代理
      • 集成 Google Analytics
      • 文件夹树设置
      • 可见性设置
      • 在文档 URL 中嵌入值
    • API 版本
      • 概述
      • 创建 API 版本
      • 发布 API 版本
      • 共享带有 API 版本的端点
  • 分支
    • 概述
    • 创建 Sprint 分支
    • 在分支中测试 API
    • 在分支中设计 API
    • 合并 Sprint 分支
    • 管理 Sprint 分支
    • AI Branch(Beta)
  • AI 功能
    • 概述
    • 启用 AI 功能
    • 生成测试用例
    • 使用 AI 修改 Schema
    • 端点合规性检查
    • API 文档完整性检查
    • AI 驱动的字段命名
    • 常见问题
  • Apidog MCP 服务器
    • 概述
    • 将 Apidog 项目连接到 AI
    • 将已发布的文档连接到 AI
    • 将 OpenAPI 文件连接到 AI
  • 最佳实践
    • 处理 API 签名
    • 访问受 OAuth 2.0 保护的 API
    • 协作工作流
    • 管理身份验证状态
  • 离线空间
    • 概述
  • 管理
    • 管理项目
      • 管理项目
      • 通知设置
      • 管理项目成员
      • 项目资源
        • 数据库连接
        • Git 连接
    • 管理团队
      • 管理团队
      • 管理团队成员
      • 团队活动
      • 团队角色与权限
      • 团队资源
        • General Runner
        • 团队变量
        • 请求代理 Agent
      • 实时协作
        • 团队协作
    • 入门检查清单
      • 基本概念
      • 入门指南
    • 管理组织
      • 管理组织
      • 组织角色与权限
      • 套餐管理
        • 组织中的账单管理员
      • 单点登录 (SSO)
        • SSO 概述
        • 配置 Microsoft Entra ID
        • 配置 Okta
        • 为组织配置 SSO
        • 管理用户账户
        • 将组映射到团队
      • SCIM 配置
        • SCIM 预配简介
        • Microsoft Entra ID
        • Okta
      • 组织资源
        • 自托管 Runner
  • 计费
    • 概述
    • 积分
    • 升级您的套餐
    • 替代支付方式
    • 管理订阅
    • 将付费团队移入组织
  • 附加组件
    • API Hub
    • Apidog Intellij IDEA 插件
    • 浏览器扩展
      • Chrome
      • Microsoft Edge
    • 请求代理
      • Web 中的请求代理
      • 共享文档中的请求代理
      • 客户端中的请求代理
  • 数据与安全
    • 数据存储和安全
    • 用户数据隐私与安全
    • 请求路由与数据安全
  • 参考
    • API 设计优先方法
    • Apidog OpenAPI 规范扩展
    • JSONPath
    • XPath
    • 正则表达式
    • JSON Schema
    • CSV 文件格式
    • 安装 Java 环境
    • Runner 部署环境
    • Apidog Markdown 语法
    • Apidog Swagger 扩展
      • 概述
      • x-apidog-folder
      • x-apidog-status
      • x-apidog-name
      • x-apidog-maintainer
    • Apidog JSON Schema 扩展
      • 概述
      • x-apidog-mock
      • x-apidog-orders
      • x-apidog-enum
  • 支持中心
  1. 使用脚本

调用其他编程语言

Apidog 允许你从 Javascript 环境中执行外部程序(脚本、JAR、二进制文件)。这使你能够利用 Java、Python、PHP、Go、Shell 等语言中的现有代码。
安全提示
外部程序在 Apidog 沙箱之外运行,并且拥有对你系统的完整访问权限。请确保你信任正在执行的代码。

支持的语言#

Apidog 会根据文件扩展名推断执行命令:
语言扩展名命令前缀
Java.jarjava -jar
Python.pypython
Node.js.jsnode
PHP.phpphp
Go.gogo run
Shell.shsh
Ruby.rbruby
Lua.lualua

如何调用外部程序#

1.
打开外部程序目录:点击脚本编辑器中的文件夹图标,打开应放置外部脚本的目录。
外部程序目录
2.
通过脚本执行:使用 pm.executeAsync 调用程序。

API 参考#

pm.executeAsync#

filePath string 外部程序路径
args string[] 参数。调用 jar 包中的指定方法时,将使用 JSON.stringify 进行转换。除此之外,非 string 类型会被隐式转换为 string。
options Object
command string 外部程序的执行命令,“命令前缀”的第一部分就是执行命令。可选,默认值会自动推断(见上方“命令前缀”表),也可以自定义为任意程序。
cwd string 子进程的工作目录。可选,默认是“外部程序目录”。
env Record<string, string> 子进程的环境变量。可选,默认是 {}。
windowsEncoding string Windows 系统上使用的编码。可选,默认是 "cp936"。
className string 指定要在 jar 包中调用的类名,例如 "com.apidog.Utils"。
method string 指定要在 jar 包中调用的方法名,例如 "add"。
paramTypes string[] 指定要在 jar 包中调用的方法的参数类型,例如 ["int", "int"]。
返回:Promise<string>
command 参数的用法
默认情况下,Apidog 使用 python 来执行 .py 文件。如果计算机上已经安装了 python3,可以将 command 指定为 python3。

pm.execute#

建议使用 pm.executeAsync。
pm.execute(filePath, args, options)
filePath string 外部程序路径
args string[] 参数。调用 jar 包中的指定方法时,将使用 JSON.stringify 进行转换。除此之外,非 string 类型会被隐式转换为 string。
options Object
windowsEncoding string Windows 系统上使用的编码。可选,默认是 "cp936"。
className string 指定要在 jar 包中调用的类名,例如 "com.apidog.Utils"。
method string 指定要在 jar 包中调用的方法名,例如 "add"。
paramTypes string[] 指定要在 jar 包中调用的方法的参数类型,例如 ["int", "int"]。
返回:string

执行与日志#

执行程序时,已执行的命令会打印在控制台中(仅供参考)。如果结果不符合预期,你可以复制该命令并粘贴到 Shell/CMD 中进行调试。
控制台还会打印已执行进程的“标准输出(stdout)”和“标准错误输出(stderr)”。stdout 内容(不包括末尾的换行符)将作为执行的最终结果。
TIP
由于历史原因,当 stderr 中存在内容时,pm.execute 会将执行视为失败。这会导致某些程序在输出警告或错误消息时失败。pm.executeAsync 改为使用进程的退出码来判断执行是否失败。

外部程序的输入与输出#

参数#

由于指定的外部程序通过命令行执行,它只能通过命令行参数获取传入的参数。
例如,在脚本 pm.executeAsync('add.js', [2, 3]) 中,实际执行的命令是 node add.js 2 3。要在外部脚本 add.js 中获取参数:
TIP
1.
不同编程语言获取命令行参数的方式不同,请参考对应语言的文档。
2.
命令行参数的类型始终是 string,需要根据实际类型进行转换。

返回值#

如上所述,Apidog 使用 stdout 内容作为程序执行结果。因此,将内容打印到 stdout 即可返回结果。
例如,在脚本 const result = await pm.executeAsync('add.js', [2, 3]) 中,可以通过以下方式返回结果:
1.
不同编程语言打印到 stdout 的方式不同,请参考对应语言的文档。
2.
返回类型是 string,需要根据实际类型进行转换。
3.
结果末尾的换行符会被去除。
4.
调用 jar 包中的指定方法时,被调用方法的返回值将作为最终返回值。

抛出错误#

抛出错误可以使当前任务失败并停止执行。例如:
1.
不同编程语言抛出错误的方式不同,请参考对应文档。
2.
在 JavaScript 中,console.error('Error') 只会打印到 stderr,而不会抛出错误。使用其他语言时也请注意这一点。

调试信息#

由于 pm.executeAsync 使用退出码而不是 stderr 来判断是否成功,因此可以使用 stderr 打印调试信息,而不影响执行。
例如:
TIP
1.
只有 pm.executeAsync 支持这种打印调试信息的方式。
2.
不同编程语言打印到 stderr 的方式不同,请参考对应文档。

从 pm.execute 迁移到 pm.executeAsync#

由于 pm.executeAsync 的返回值是 Promise 类型,因此不能直接将 execute 改为 executeAsync。但你可以使用 async/await 以最小改动进行迁移。
TIP
Apidog 版本 2.3.24 或更高版本(CLI 版本 1.2.38 或更高版本)支持顶层 await。
步骤:
1.
将 execute 改为 executeAsync
2.
在函数调用前添加 await

调用 .jar 包中的指定方法#

TIP
此功能要求 Apidog 版本为 2.1.39 或更高版本。它仅支持通过反射调用 jar,不支持像 Spring Boot 这样使用内部运行时反射的 jar。
默认情况下,调用 jar 会调用 Main 类中的 main 方法。如果指定了 options.className,它将覆盖默认行为,改为调用 jar 中的指定方法。
调用 jar 中的指定方法与其他外部程序不同。Apidog 会使用内置执行器,通过反射在 jar 中查找该方法并调用它。如果被调用的方法有返回值,它会在转换为字符串后作为最终返回值。否则,其工作方式与其他调用相同,使用 stdout 内容作为返回值。
例如:
实际执行的命令是:
其中 <app-dist>/assets/JarExecuter-1.1.0-jar-with-dependencies.jar 是内置执行器,负责通过反射在用户程序 ./scripts/jar-1.0-SNAPSHOT.jar 中查找方法 com.apidog.Test.combine(String,String),并使用参数(JSON 字符串)"hello" 和 "world" 调用它。
TIP
paramTypes 是可选的。如果未指定,将根据参数自动推断类型。整数会被推断为 "int",浮点数为 "double",布尔值为 "boolean",字符串为 "String",数组会根据第一个元素推断,例如 [3] 推断为 "int[]",[3.14] 推断为 "double[]",以此类推。
如果推断出的类型与被调用方法的实际参数类型不匹配,则需要手动指定 paramTypes。
paramTypes 数组中支持的值:"Number"、"int"、"Integer"、"long"、"Long"、"short"、"Short"、"float"、"Float"、"double"、"Double"、"boolean"、"Boolean"、"String"、"Number[]"、"int[]"、"Integer[]"、"long[]"、"Long[]"、"short[]"、"Short[]"、"float[]"、"Float[]"、"double[]"、"Double[]"、"boolean[]"、"Boolean[]"、"String[]"
因此,上面示例中的 paramTypes 可以省略:

示例#

1. PHP 程序#

脚本:
test.php:

2. Jar 程序#

脚本:
com.apidog.utils.jar:

常见问题#

1. 某些程序需要项目配置文件,缺失时会报错#

Rust 和 Go:
Rust:
could not find `Cargo.toml` in `<...>/ExternalPrograms` or any parent directory
Go:
go.mod file not found in current directory or any parent directory; see 'go help modules'
解决方案:使用 pm.executeAsync 并指定 cwd。

2. MacOS 内置 Python 3,但没有 Python 2#

使用 pm.executeAsync 并将 command 设置为 "python3"。

3. Command xxx not found#

安装对应程序,并将必要目录添加到系统 PATH。有关 Java 安装,请参阅 docs。

4. 在某些 Windows 系统上调用外部脚本时输出乱码#

将 windowsEncoding 设置为 'utf-8'
Modified at 2026-06-09 08:55:47
Previous
Postman 脚本参考
Next
使用 JS 库
Built with