SuperAPI AI 工具集

connekt-script-writer

测试与质量

查看项目

更新于 10-15 15:23

技能介绍

Connekt Script Writer 用于编写 .connekt.kts 脚本,即基于 Kotlin 的 HTTP 自动化与测试脚本,使用 Connekt DSL。当用户想要编写、创建此类脚本时可使用该技能。

用途 Connekt 是由 Kotlin 脚本驱动的 HTTP 客户端。脚本使用 .connekt.kts 扩展名,顶层可直接使用完整的 Connekt DSL——没有样板代码,没有 main 函数,只有声明和请求。生成脚本时,始终从 connekt.env.json 读取基础 URL 和密钥,使用 val x: String by env,而不是硬编码值。脚本保存为 .connekt.kts 扩展名。

执行模型 脚本只注册请求——由运行器决定执行哪个请求。脚本不会像普通程序那样自上而下运行。这意味着:请求之间没有命令式代码。没有 println,没有 if/else,没有 then 或 useCase 块之外的变量赋值。断言仅允许位于 then { } 块或 useCase { } 块内——绝不在请求之间的顶层。绝不将其他请求的结果直接插值到 URL 中。改用 pathParam,以便运行器在执行时解析值。顶层允许:val x by env、data class、configureClient、val x by oauth(...)、扩展函数(例如在 RequestBuilder 上用于共享请求头)、请求声明(val x by GET/POST/...)以及 useCase 块。

脚本结构 .connekt.kts 文件遵循以下常规顺序:文件级注解(imports、dependencies);第三方 imports(如需要);来自 connekt.env.json 的环境变量;用于类型化反序列化的 data classes;全局客户端配置;OAuth 设置(如需要);HTTP 请求;用于分组相关请求的 use cases。

关键约定:val x by env 从 connekt.env.json 读取——属性名即查找键;val response by GET(...) 委托执行并绑定结果;then { ... } 链式响应处理——块内 this 是 OkHttp Response;val result by GET(...) then { expr } 捕获 then 块的返回值;decode<T>(jsonPath) 从响应体反序列化 JSON;useCase("name") { ... } 分组请求,最后一个表达式为返回值;assertSoftly { assert(...) } 在报告前收集所有断言失败;请求之间无代码——断言和逻辑只放在 then 或 useCase 内;通过 pathParam 传递请求结果,绝不插值进 URL 字符串。

DSL 参考 HTTP 方法:GET、POST、PUT、PATCH、DELETE、HEAD、OPTIONS、TRACE。每个方法接受可选 name 参数和配置 lambda。

请求配置:Headers(header、headers、contentType、accept);查询参数(queryParam、queryParams);路径参数(在 URL 中使用 {name} 占位符,配合 pathParam);请求选项(noRedirect、noCookies、http2)。

请求体:JSON body;表单数据(formData,Content-Type 自动设置);Multipart(multipart、part、file);字节数组。

认证:Basic 和 Bearer(basicAuth、bearerAuth);OAuth2 授权码流程(oauth,自动打开浏览器登录并启动本地回调服务器,auth 对象提供 accessToken 和 refreshToken);Keycloak 简写(KeycloakOAuthParameters)。

响应处理:then 块内 this 是 OkHttp Response,可用 code、body、header("Name") 等。validate 和提取可用 assert;类型化反序列化用 decode<T>()(JSONPath 提取,无 JSONPath 时默认根对象);原始 JSONPath 访问用 jsonPath()。链式请求——通过 pathParam 将一个请求的结果传递到下一个请求。

Use Cases useCase 仅在场景包含多个请求且请求间传递结果时使用(例如创建资源然后验证其存在)。单个 HTTP 请求(即使带 then 块)绝不包装进 useCase。如果用户描述的场景看起来是业务用例(多个步骤),该技能必须询问“这是多步骤业务场景——要包装进 useCase 吗?”并在生成代码前等待回答。

环境变量 使用属性委托从 connekt.env.json 读取,属性名即查找键。支持类型:String、Int、Long、Double、Boolean。缺失键会抛出错误。

断言 Kotlin assert(使用 --kotlin-power-assert 时带 Power Assert 诊断);AssertJ(需要 import,已弃用,不要在新脚本中使用);软断言 assertSoftly 在报告前收集所有失败。

脚本导入与依赖 使用 @file:Import 导入另一个脚本(路径相对于导入脚本),被导入的顶层声明可用,支持传递导入。使用 @file:DependsOn 引入外部 Maven 依赖。

SSL/TLS 与客户端配置 全局客户端配置 configureClient,支持 insecure()、addX509Certificate、addKeyStore、readTimeout 等;也可在单请求中覆盖。

常见模式 包括:带断言的简单 GET;带 JSON body 和响应提取的 POST;CRUD 工作流;OAuth2 认证请求;表单登录后调用 API;文件上传(multipart);分页循环;使用 @file:Import 的多脚本复用;软断言响应验证。

限制 请求之间不得有命令式代码;断言仅在 then 或 useCase 块内;不得将请求结果插值进 URL,须用 pathParam;insecure() 仅用于本地开发;AssertJ 已弃用不应在新脚本中使用。该技能的具体安装命令与平台信息暂未提供。