如何使用 keploy export 和 import 在仓库之间迁移测试集?
2026/9/14 17:25:20 网站建设 项目流程

如何使用 keploy export 和 import 在仓库之间迁移测试集?

【免费下载链接】keployOpen-source platform for creating safe, isolated production sandboxes for API, integration, and E2E testing.项目地址: https://gitcode.com/GitHub_Trending/ke/keploy

在 Keploy 中,你通常在 A 仓库里录制了一批 API 测试用例(test set),但需要把它们带到 B 仓库——比如另一个服务的环境、另一个团队的项目,或者一个新的集成测试工程。Keploy 的keploy export/import命令对就是为此设计的:keploy export postman把已录制的测试集转换成一份 Postman 集合文件output.json,把它拷到目标仓库后再用keploy import postman转换回 Keploy 的测试用例。仓库的 AGENTS.md 中对这两个命令的定位即为 “Move test-sets between repos”。

整条迁移链只涉及一个中间文件:

  • 导出端:读取<当前目录>/keploy/<测试集>/tests/下的.yaml/.json测试用例,写出<当前目录>/output.json(Postman collection v2.0.0 格式)。
  • 导入端:读取集合文件,重新写出<当前目录>/keploy/<测试集>/tests/test-N格式的测试用例。

实现分别位于 cli/export.go、pkg/service/export/export.go、cli/import.go、pkg/service/import/import.go。

前置条件

  • 源仓库:在项目根目录下已有keploy文件夹(录制测试集时生成),每个测试集是一个子目录,且子目录内包含tests文件夹。没有keploy目录时导出会直接报错keploy directory does not exist
  • 目标仓库:在目标项目的根目录执行导入命令,导入结果会写入该目录下的keploy/文件夹。
  • 目标环境服务可用:仅当集合中存在没有响应的请求时才需要——导入时 Keploy 会询问是否实时请求服务器来补录响应(见下文)。

第一步:在源仓库导出测试集

在源仓库根目录(即keploy文件夹所在目录)执行:

keploy export postman

注意要带postman子命令:单独执行keploy export只会打印帮助信息。

导出过程的行为(由 pkg/service/export/export.go 定义):

  • 遍历keploy/下各测试集目录,跳过reportstestReports目录;某测试集目录下没有tests子文件夹时跳过,并记录No tests found. Skipping export.
  • 只读取tests/里的.yaml.json测试用例文件;空文件和无法解码的用例会跳过并记录 warning。
  • 同一测试集内内容完全相同的请求会去重,只保留一份。
  • 结果写入当前目录的output.json(若已存在则覆盖),集合info.name取当前目录名,info.schemahttps://schema.getpostman.com/json/collection/v2.0.0/collection.json

验证:命令成功时终端输出✅ Curls successfully exported to output.json 🎉(源码中固定的成功提示)。确认当前目录生成了output.json,打开后可以看到每个顶层item对应一个测试集(名字来自测试集目录名),其下是去重后的请求。

第二步:把 output.json 传到目标仓库

output.json就是唯一的迁移载体,用任意方式(git 提交、拷贝、制品仓库等)放到目标仓库的项目根目录。注意导入时会校验文件类型:路径不是.json结尾会报错invalid file type: expected .json Postman collection,所以传输后保持.json扩展名。

第三步:在目标仓库导入

在目标仓库根目录执行:

keploy import postman

--path参数缺省值就是output.json;如果文件放在别处,用--path指定(例如keploy import postman --path collection.json)。也可以用--base-path替换请求 URL 的基础部分,把集合中的请求指向目标环境的地址。

导入过程的行为(由 pkg/service/import/import.go 定义):

  • 集合中每个顶层文件夹变成一个测试集目录keploy/<文件夹名>/tests/;文件夹为空名时自动生成test-set-N(N 为当前keploy/目录下已有test-set-N的最大编号加一)。

  • 集合里的全局变量(variable数组,disabled的会被忽略)用于解析 URL 中的{{ var }}模板占位符。

  • 集合info.schema与期望值不一致时只记录一条 info 日志,导入继续。

  • 空响应的处理:如果某些请求没有响应,终端会出现交互式提示:

    Some responses are empty. We need to hit the server to record these responses. Is your server running? (yes/no):
    • 回答yes:Keploy 会实际发出这些请求来补录响应(每个请求 60 秒超时),此时目标环境的服务必须可用;
    • 回答no:这些用例被跳过,记录Few test cases will be skipped as responses are missing from the collection
    • 若某个空响应的请求连 URL 都为空,导入会以URL is empty报错。
  • 每个请求按其响应写出测试用例,文件命名为test-1test-2……(扩展名由项目的存储格式配置决定)。

验证:成功时终端输出✅ Postman Collection Successfully Imported To Keploy Tests 🎉。然后到目标仓库检查keploy/<测试集名>/tests/下是否生成了对应的test-N测试用例文件,数量与集合中的请求一一对应。

限制与边界

  • 导出目前只处理 HTTP 测试用例:每个用例会先解码成 HTTP schema,解码失败(即非 HTTP 用例)会跳过并记录错误日志。
  • 导出只搬“请求 + 响应”的静态内容,集合中的顶层文件夹结构会被保留为测试集划分;reports/testReports目录不参与迁移。
  • 导入只是把测试用例文件写回目标仓库,用例能否在目标环境跑通,取决于目标环境与录制环境的行为差异;实际运行测试仍走 Keploy 常规的执行流程。
  • 若两个仓库之间文件命名冲突(同名测试集、同名test-N),导入会写到同一路径下,迁移前建议确认目标仓库keploy/目录是否为空。

【免费下载链接】keployOpen-source platform for creating safe, isolated production sandboxes for API, integration, and E2E testing.项目地址: https://gitcode.com/GitHub_Trending/ke/keploy

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询