ARTICLE DETAIL

资讯详情

深耕网站建设、视觉设计与SEO优化的一线实战洞察。

如何使用 keploy templatize 把测试用例中的动态值替换成模板?

如何使用 keploy templatize 把测试用例中的动态值替换成模板? 如何使用 keploy templatize 把测试用例中的动态值替换成模板【免费下载链接】keployOpen-source platform for creating safe, isolated production sandboxes for API, integration, and E2E testing.项目地址: https://gitcode.com/GitHub_Trending/ke/keployKeploy 录制的测试用例会把当时请求与响应中的具体值固化进测试文件。像自增 ID、会话 Cookie、Bearer token 这类动态值在重放时往往已经变化导致请求构造错误或断言失败。keploy templatize命令扫描测试集中的测试用例把这类在响应中产生、在后续请求中消费的值替换为 Go template 形式的占位符如{{int .id}}并在测试集配置里记录变量与原始值的映射使后续keploy test重放时能使用最新值。前提是你已经用keploy record完成过一次录制本地存在至少一个包含测试用例的测试集目录默认在./keploy/下每个测试集位于./keploy/test-set-id/测试用例文件在test-set-id/tests/子目录中。执行 templatize 命令在包含keploy/录制产物的工作目录下运行keploy templatize不带参数时命令会处理 keploy 目录下所有测试集——注意这会对每个测试集的测试用例文件和配置做改写。只处理指定测试集时使用-t/--testsets参数值为逗号分隔的测试集 IDkeploy templatize -t test-set-1,test-set-3如果测试用例不在默认的./keploy/目录用-p/--path指定keploy templatize -p /path/to/keploy-dir -t test-set-1/path/to/keploy-dir需替换为你实际的 keploy 目录。不传-t时默认值取自keploy.yml中的配置项templatize: testSets: []在testSets里填入测试集 ID 即可省略-t参数该配置定义见 config/default.go 与 config/config.go 中的Templatize结构。命令实际做了什么核心逻辑在 pkg/service/tools/templatize.go入口函数Templatize定义在 pkg/service/tools/tools.go。对每个目标测试集它按以下规则处理读取测试集中的全部测试用例建立值 → 出现位置索引。扫描范围包括请求/响应 Header、请求 URL 的路径分段、以及 JSON 请求/响应 BodyBody 必须可解析为 JSON。Header 中Cookie按namevalue拆分到单个 Cookie 值Authorization只索引Bearer前缀之后的 token 部分Set-Cookie只索引每个 Cookie 的值。对每个值尝试构造链至少有一个出现位置在响应中Response Body 或 Response Header作为 producer且之后某个编号更大的测试用例的请求侧Request Header、Request URL、Request Body作为 consumer出现了同一值。对满足条件的值把 producer 与有效 consumer 处的原始值替换为模板占位符变量名由 producer 的 JSON 路径叶子转成 camelCase如id→.id同一 base key 出现多个链时依次加数字后缀id、id1、id2。写回更新每个被改写的测试用例文件并把变量名 → 记录时的原始值映射写入该测试集的config.yaml的template字段测试集配置的Template字段定义见 pkg/models/config.go落盘逻辑见 pkg/platform/yaml/configdb/testset/db.go。替换只影响请求侧字段以及被识别为 producer 的响应侧字段类型由原始值决定生成{{int .id}}、{{float .price}}或{{string .name}}这类占位符渲染时的类型转换由 pkg/service/tools/templatize.go 中render的int/string/float函数完成。读取运行输出处理完成后控制台会打印链分析结果格式来自logAPIChains函数。以下按源码中的打印格式给出文档示例尖括号内容为按你的测试集实际情况出现的值✨ API Chain Analysis ✨ Chain for {{.id}} (value: 该值在录制时的原始值超过 50 字符会截断) [PRODUCER] 测试用例名 (Response Body at id) ├─ [CONSUMER] 测试用例名 (Request Header Authorization) └─ [CONSUMER] 测试用例名 (Request Body at id) [PRODUCER]行指明变量取自哪个测试用例的响应哪个位置[CONSUMER]行指明后续哪些请求会消费该变量。如果输出中某个你关心的值没有出现说明它不满足成链条件见下文限制。验证替换结果打开./keploy/test-set-id/config.yaml确认出现了template字段且其中每个条目是变量名 → 录制时的原始值。检查./keploy/test-set-id/tests/下的测试用例文件请求部分Header、URL 路径、Body中的动态值应已变为{{...}}占位符。例如原来固定写死的 token在Authorization头中变为保留前缀的形式Bearer {{string .token}}。运行keploy test -c 你的应用启动命令重放。重放时 Keploy 用template中的值渲染请求模板每收到一次应用响应还会用实际响应刷新模板变量Set-Cookie这类头更新也有专门处理后续测试用例的请求随之使用新值。重放能通过且测试报告无因旧值导致的 mismatch即说明模板替换生效。哪些值不会被模板化以下限制直接来自 pkg/service/tools/templatize.go 的实现判断某个值未被替换时先对照这几条true、false、null、nil和数值0永远不会被模板化。值在整个测试集中出现少于 2 次至少需要 producer consumer 各一次时跳过。producer 必须位于响应Response Body 或 Response Header如果值只出现在请求里不构链。consumer 必须出现在编号大于 producer 的测试用例中按测试用例顺序且类型兼容int 与 float 互相兼容其余类型必须完全一致。处理范围限定在单个测试集内部跨测试集的值不会被关联。测试集没有任何测试用例时该测试集会被跳过并记录 debug 日志The test set is empty. Please record some test cases to templatize.整个目录找不到测试集时同样直接返回。可选敏感值与链断言如果测试集中存在 secret 值secret.yamltemplatize 会把/*/secret.yaml追加进.gitignore避免敏感值进入版本库重放渲染时 secret 以{{string .secret.key}}形式引用。此外源码支持环境变量ASSERT_CHAINS_WITH设置其值为一个 fuzzer 基线 YAML 的路径后运行结束会把检测到的链与基线逐条比对并打印PASSED/FAILED报告。这是用于内部验证链检测正确性的调试开关日常使用不需要设置。参考实现位置命令定义与示例cli/templatize.goflag 注册-p、-t/--testsetscli/provider/cmd.go值索引、成链与替换逻辑pkg/service/tools/templatize.go测试集遍历入口pkg/service/tools/tools.go测试集config.yaml含template字段读写pkg/platform/yaml/configdb/testset/db.go命令职责总览AGENTS.md【免费下载链接】keployOpen-source platform for creating safe, isolated production sandboxes for API, integration, and E2E testing.项目地址: https://gitcode.com/GitHub_Trending/ke/keploy创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表