如何使用 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/下各测试集目录,跳过reports和testReports目录;某测试集目录下没有tests子文件夹时跳过,并记录No tests found. Skipping export.。 - 只读取
tests/里的.yaml和.json测试用例文件;空文件和无法解码的用例会跳过并记录 warning。 - 同一测试集内内容完全相同的请求会去重,只保留一份。
- 结果写入当前目录的
output.json(若已存在则覆盖),集合info.name取当前目录名,info.schema为https://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-1、test-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),仅供参考