You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Karate所有feature文件执行完毕后调用API?

Karate全局后置清理方案(所有Feature执行完后删除共享用户)

方法1:借助测试框架的全局生命周期钩子(推荐)

Karate本身没有全局后置钩子,但可以通过它集成的JUnit/TestNG实现全局清理。以JUnit 5为例:

  • 编写一个测试套件类,把所有需要运行的Feature纳入其中
  • 在类中添加带@AfterAll注解的方法,该方法会在所有测试执行完毕后自动触发
  • 在这个方法里,要么直接调用API删除用户,要么调用Karate执行专门的清理Feature

示例代码:

import org.junit.jupiter.api.AfterAll;
import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.TestInstance;
import com.intuit.karate.junit5.Karate;

@TestInstance(TestInstance.Lifecycle.PER_CLASS)
@DisplayName("测试套件")
public class TestSuite {

    @Karate.Test
    Karate runAllFeatures() {
        return Karate.run("classpath:features/").relativeTo(getClass());
    }

    @AfterAll
    void cleanUpUsers() {
        // 方式1:直接用Java代码调用删除API
        // 读取之前存在全局变量/系统属性里的用户ID列表,遍历调用删除接口
        
        // 方式2:调用Karate的清理Feature
        String createdUsers = System.getProperty("createdUsers");
        Karate karate = Karate.run("classpath:features/cleanup-users.feature")
                .systemProperty("createdUsers", createdUsers)
                .relativeTo(getClass());
        karate.results(); // 确保清理逻辑执行完成
    }
}

方法2:用Karate全局变量存储用户信息,配合清理Feature

  • 在karate-config.js里初始化全局数组,用来存创建的用户ID:
    var config = {
        baseUrl: 'http://your-api-url'
    };
    karate.set('createdUsers', []); // 全局变量存储用户ID列表
    return config;
    
  • 每次创建用户后,把ID加入这个全局数组:
    * def userId = response.id
    * karate.set('createdUsers', karate.get('createdUsers').concat(userId))
    
  • 最后通过测试框架钩子或单独运行清理Feature,遍历数组删除所有用户:
    Feature: 清理测试用户
    
      Scenario: 删除所有创建的测试用户
        * def users = karate.get('createdUsers')
        * karate.forEach(users, 
            function(user) {
                karate.call('delete-user.feature', { userId: user })
            }
        )
    

注意事项

  • 确保用户信息能在全局范围传递,比如用karate.set()存全局变量,或者存入系统属性
  • 如果是并行测试,要注意线程安全,避免用户信息串库

内容的提问来源于stack exchange,提问作者Marie Lem

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.06 14:02:38