Karate 如何在测试套件设置/拆卸中执行某些操作?

Karate 如何在测试套件设置/拆卸中执行某些操作?,karate,Karate,空手道API中是否有测试套件设置/拆卸之类的东西? 基本上,我想在一切开始之前和完成之后做一些事情。如果您使用Java/JUnit作为入口点,这非常简单,只需在之前/之后添加代码行即可 另请参考此答案:ExecutionHook(仍然需要编写Java代码)具有beforeAll()和afterAll()回调 实际上,在karate config.js中使用callSingle()并进行预清理可能是最简单的方法。如果使用Java/JUnit作为入口点,这非常简单,只需在前后添加代码行即可 另请参考

空手道API中是否有测试套件设置/拆卸之类的东西?
基本上,我想在一切开始之前和完成之后做一些事情。

如果您使用Java/JUnit作为入口点,这非常简单,只需在之前/之后添加代码行即可

另请参考此答案:
ExecutionHook
(仍然需要编写Java代码)具有
beforeAll()
afterAll()
回调


实际上,在
karate config.js
中使用
callSingle()
并进行预清理可能是最简单的方法。

如果使用Java/JUnit作为入口点,这非常简单,只需在前后添加代码行即可

另请参考此答案:
ExecutionHook
(仍然需要编写Java代码)具有
beforeAll()
afterAll()
回调

实际上,在
karate config.js
中使用
callSingle()
并进行预清理可能是最简单的方法。

通过下面的代码修复

<...truncated imports...>
@KarateOptions()
public class TestRunner {
  @Test
  public void testParallel() {
    Results results = Runner.path("classpath:THISCLASS").hook(new ExecHook()).parallel(1);
    generateReport(results.getReportDir());
    assertTrue(results.getErrorMessages(), results.getFailCount() == 0);
  }
}

class ExecHook implements ExecutionHook {
  @Override
  public void afterAll(Results results) {
    System.out.println("DO SOMETHING HERE");
  }  

  @Override
  public boolean beforeScenario(Scenario scenario, ScenarioContext context) {
    return true;
  }

  @Override
  public void afterScenario(ScenarioResult result, ScenarioContext context) {

  }    

  @Override
  public boolean beforeFeature(Feature feature, ExecutionContext context) {
    return true;
  }

  @Override
  public void afterFeature(FeatureResult result, ExecutionContext context) {
      
  }    

  @Override
  public void beforeAll(Results results) {

  }     

  @Override
  public boolean beforeStep(Step step, ScenarioContext context) {
    return true;
  }

  @Override
  public void afterStep(StepResult result, ScenarioContext context) {

  }        
      
  @Override
  public String getPerfEventName(HttpRequestBuilder req, ScenarioContext context) {
    return null;
  }    
  
  @Override
  public void reportPerfEvent(PerfEvent event) {
      
  }
  
}


@卡拉特选项()
公共类测试运行程序{
@试验
公共void testParallel(){
Results=Runner.path(“classpath:THISCLASS”).hook(newexechook()).parallel(1);
generateReport(results.getReportDir());
assertTrue(results.getErrorMessages(),results.getFailCount()==0);
}
}
类ExecutionHook实现ExecutionHook{
@凌驾
毕竟公共无效(结果){
System.out.println(“在这里做点什么”);
}  
@凌驾
公共布尔前置场景(场景场景、场景上下文){
返回true;
}
@凌驾
场景后公共无效(场景结果、场景上下文){
}    
@凌驾
公共布尔beforeFeature(功能、ExecutionContext上下文){
返回true;
}
@凌驾
public void afterFeature(功能结果、ExecutionContext上下文){
}    
@凌驾
之前的公共无效(结果){
}     
@凌驾
公共布尔beforeStep(步骤,场景上下文){
返回true;
}
@凌驾
public void afterStep(步骤结果、场景上下文){
}        
@凌驾
公共字符串getPerfEventName(HttpRequestBuilder请求,场景上下文){
返回null;
}    
@凌驾
公共作废报告PerfEvent(PerfEvent事件){
}
}
只有一个问题,对于我不使用的方法,是否有办法取消
@覆盖?

通过下面的代码修复

<...truncated imports...>
@KarateOptions()
public class TestRunner {
  @Test
  public void testParallel() {
    Results results = Runner.path("classpath:THISCLASS").hook(new ExecHook()).parallel(1);
    generateReport(results.getReportDir());
    assertTrue(results.getErrorMessages(), results.getFailCount() == 0);
  }
}

class ExecHook implements ExecutionHook {
  @Override
  public void afterAll(Results results) {
    System.out.println("DO SOMETHING HERE");
  }  

  @Override
  public boolean beforeScenario(Scenario scenario, ScenarioContext context) {
    return true;
  }

  @Override
  public void afterScenario(ScenarioResult result, ScenarioContext context) {

  }    

  @Override
  public boolean beforeFeature(Feature feature, ExecutionContext context) {
    return true;
  }

  @Override
  public void afterFeature(FeatureResult result, ExecutionContext context) {
      
  }    

  @Override
  public void beforeAll(Results results) {

  }     

  @Override
  public boolean beforeStep(Step step, ScenarioContext context) {
    return true;
  }

  @Override
  public void afterStep(StepResult result, ScenarioContext context) {

  }        
      
  @Override
  public String getPerfEventName(HttpRequestBuilder req, ScenarioContext context) {
    return null;
  }    
  
  @Override
  public void reportPerfEvent(PerfEvent event) {
      
  }
  
}


@卡拉特选项()
公共类测试运行程序{
@试验
公共void testParallel(){
Results=Runner.path(“classpath:THISCLASS”).hook(newexechook()).parallel(1);
generateReport(results.getReportDir());
assertTrue(results.getErrorMessages(),results.getFailCount()==0);
}
}
类ExecutionHook实现ExecutionHook{
@凌驾
毕竟公共无效(结果){
System.out.println(“在这里做点什么”);
}  
@凌驾
公共布尔前置场景(场景场景、场景上下文){
返回true;
}
@凌驾
场景后公共无效(场景结果、场景上下文){
}    
@凌驾
公共布尔beforeFeature(功能、ExecutionContext上下文){
返回true;
}
@凌驾
public void afterFeature(功能结果、ExecutionContext上下文){
}    
@凌驾
之前的公共无效(结果){
}     
@凌驾
公共布尔beforeStep(步骤,场景上下文){
返回true;
}
@凌驾
public void afterStep(步骤结果、场景上下文){
}        
@凌驾
公共字符串getPerfEventName(HttpRequestBuilder请求,场景上下文){
返回null;
}    
@凌驾
公共作废报告PerfEvent(PerfEvent事件){
}
}

只有一个问题,对于我不使用的方法,有没有办法去掉
@Override
s?

我尝试使用
ExecutionHook
,但我注意到一件事是它不允许我并行使用
公共静态结果(类clazz,int threadCount)
用于并行执行的格式,它在生成cucumber测试报告时给了我错误我尝试使用
ExecutionHook
,但我注意到,它不允许我并行使用
公共静态结果(类clazz,int threadCount)
并行执行的格式,生成cucumber测试报告时会出现错误我已经接受了您的答案,不用担心。我已经接受了你的答案,不用担心。只是把代码明确地贴在了我是如何解决它的上面。