>

개요 :실행중인 오이 테스트 팩을 중간에 중지하려는 경우가 있습니다 (예 : x ).  테스트 횟수가 실패했습니다.

이 작업은 잘 수행 할 수 있지만 json 파일 ( plugin = {json:...} )을 원합니다 테스트가 중지 될 때 생성됩니다. 이것이 가능합니까?

지금까지 시도한 내용 :

  • 디버깅 및보고/플러그인 생성 위치를 확인하십시오. 이 줄이 실행될 때인 것 같습니다 :

    Cucumber.java: runtime.getEventBus().send.....
        @Override
        protected Statement childrenInvoker(RunNotifier notifier) {
            final Statement features = super.childrenInvoker(notifier);
            return new Statement() {
                @Override
                public void evaluate() throws Throwable {
                    features.evaluate();
                    runtime.getEventBus().send(new TestRunFinished(runtime.getEventBus().getTime()));
                    runtime.printSummary();
                }
            };
        }
    
    

    runtime 에 접속하기를 바랐습니다  필드 그러나 그것은 private 가  수정 자. 또한 reflections 를 통해 액세스하려고했습니다.  하지만 필요한 것을 정확히 얻지 못했습니다.

    • 답변 # 1

      더럽지 만 작동하는 솔루션을 발견하고 필요한 것을 얻었습니다. 누군가가 필요할 수 있도록 여기에 솔루션을 게시하십시오.

      런타임 인스턴스를 가져 오기 위해 커스텀 오이 러너 구현을 만듭니다.

      public final class Foo extends Cucumber {
          static Runtime runtime;
          /**
           * Constructor called by JUnit.
           *
           * @param clazz the class with the @RunWith annotation.
           * @throws IOException         if there is a problem
           * @throws InitializationError if there is another problem
           */
          public Foo(Class clazz) throws InitializationError, IOException {
              super(clazz);
          }
          @Override
          protected Runtime createRuntime(ResourceLoader resourceLoader, ClassLoader classLoader, RuntimeOptions runtimeOptions) throws InitializationError, IOException {
              runtime = super.createRuntime(resourceLoader, classLoader, runtimeOptions);
              return runtime;
          }
      }
      
      

      사용 된 플러그인에 따라 파일을 생성하는 동일한 줄을 호출하십시오 :

      public final class ParentHook {
          @Before
          public void beforeScenario(Scenario myScenario) {
          }
          @After
          public void afterScenario() {
              if (your condition to stop the test) {
                 //custom handle to stop the test
                 myHandler.pleaseStop();
                 Foo.runtime.getEventBus().send(new TestRunFinished(Foo.runtime.getEventBus().getTime()));
              }
          }
      }
      
      

      그러나 Foo.class 를 통해 테스트를 실행해야합니다.  예 : 와이즈 비즈   @RunWith(Foo.class) 대신

      여기서는 그다지 가치가 없지만 지금 필요한 것에 맞습니다. Cucumber가이를 즉시 수행 할 수있는 방법을 제공하기를 바랍니다. 더 좋은 방법이 있다면 여기에 게시하여 확인 후 답변을 수락 할 수 있도록하십시오.

    • 답변 # 2

      종료하지 않은 이유는 무엇입니까?

      @RunWith(Cucumber.class)
      
      

      import cucumber.api.Scenario; import cucumber.api.java.After; import cucumber.api.java.Before; import cucumber.api.java.en.When; public class StepDefinitions { private static int failureCount = 0; private int threshold = 20; @When("^something$") public void do_something() { // something } @After public void after(Scenario s) { if (s.isFailed()) ++failureCount; } @Before public void before() { if (failureCount > threshold) { if (driver !=null) { driver.quit(); driver = null; } } }

  • 이전 integration - WSO2 발레리나는 기본적으로 EI 인스턴스의 카본 서버를 사용합니까? 약간의 의심
  • 다음 node.js - google 웹 로그 분석 - invalid_grant : 유효하지 않은 jwt 서명