Karate框架如何将多个测试步骤封装为单个自定义测试语句
该需求完全可以实现,Karate原生支持将多步测试操作封装为单条可调用语句,以下是两种落地性最强的实现方式:
方案1:JS函数封装(轻量场景首选)
这是Karate官方推荐的复用方式,不需要额外写Java代码,直接在feature文件中即可完成定义,适合绝大多数常规封装场景。
- 你可以把封装逻辑写在公共通用feature文件中(比如
common.feature),供所有业务测试用例复用:
Feature: 公共测试步骤库 Background: # 封装GET请求+200状态校验逻辑,入参为请求体对象 * def sendGetAndCheckOk = """ function(req) { // 对应原步骤 And request Req karate.set('request', req); // 对应原步骤 When method get karate.method('get'); // 对应原步骤 Then status 200 karate.status(200); } """
- 在业务测试用例中引入公共步骤库后,即可单语句调用:
Feature: 用户信息查询接口测试 # 引入公共封装步骤 * call read('classpath:common.feature') Scenario: 正常查询用户信息返回200 # 构造请求参数 * def Req = { userId: 1001, channel: 'app' } # 单语句完成原3步操作 * sendGetAndCheckOk(Req)
如果不需要跨用例复用,你也可以直接在当前测试feature的Background块中定义封装函数,不需要单独抽公共文件。
方案2:Java自定义关键字(复杂逻辑场景适用)
如果封装逻辑中涉及复杂运算、第三方工具调用等JS不好实现的逻辑,可以通过Java实现自定义关键字:
- 新建Java类实现Karate的
Kw接口,写入多步操作逻辑 - 在
karate-config.js中完成关键字注册 - 后续即可在feature中像原生Karate语句一样直接调用
示例代码如下:
package com.test.karate; import com.intuit.karate.core.Kw; import com.intuit.karate.core.ScenarioRuntime; public class GetRequestKw implements Kw { @Override public Object execute(ScenarioRuntime sr, Object... args) { Object requestParams = args[0]; sr.set("request", requestParams); sr.method("get"); sr.status(200); return null; } }
在karate-config.js中注册关键字:
function fn() { // 注册自定义关键字 karate.registerKeyword('sendGetAndCheckOk', new (Java.type('com.test.karate.GetRequestKw'))()); // 其余原有配置逻辑 return config; }
注册完成后,在feature中直接调用即可:
* def Req = { userId: 1001 } * sendGetAndCheckOk(Req)
小提示:如果你的请求体、预期状态码都是固定值不需要动态传参,封装函数/方法可以去掉入参,调用时直接执行
* sendGetAndCheckOk()即可。
内容的提问来源于stack exchange,提问作者kadir
相关产品推荐
相关产品推荐

