public void performInternalCucumberOperations(final Object testInstance, final TEST_NOTIFIER runNotifier) throws Exception { final Class<?> javaTestClass = getTestedClass(); final ClassLoader classLoader = Thread.currentThread().getContextClassLoader(); final InputStream configurationInputStream = classLoader.getResourceAsStream(ClientServerFiles.CONFIG); final Properties cukespaceConfigurationProperties = loadCucumberConfigurationProperties(configurationInputStream); final RuntimeOptions runtimeOptions = loadRuntimeOptions(javaTestClass, cukespaceConfigurationProperties); final boolean reported = Boolean.parseBoolean(cukespaceConfigurationProperties.getProperty(CucumberConfiguration.REPORTABLE, "false")); final StringBuilder reportBuilder = new StringBuilder(); if (reported) { runtimeOptions.addPlugin(new JSONFormatter(reportBuilder)); } final InputStream gluesInputStream = classLoader.getResourceAsStream(ClientServerFiles.GLUES_LIST); final Collection<Class<?>> glues = loadGlues(gluesInputStream, classLoader, javaTestClass); final ArquillianBackend arquillianBackend = new ArquillianBackend( glues, javaTestClass, testInstance, cukespaceConfigurationProperties.getProperty(CucumberConfiguration.OBJECT_FACTORY)); final CucumberRuntime cucumberRuntime = new CucumberRuntime(null, classLoader, singletonList(arquillianBackend), runtimeOptions); final Map<String, Collection<URL>> featuresMap = Features.createFeatureMap(CucumberConfiguration.instance().getTempDir(), cukespaceConfigurationProperties.getProperty(CucumberConfiguration.FEATURE_HOME), javaTestClass, classLoader); final List<CucumberFeature> cucumberFeatures = getCucumberFeatures(runtimeOptions.getFilters(), testInstance, classLoader, featuresMap); final Formatter formatter = runtimeOptions.formatter(classLoader); final Reporter reporter = runtimeOptions.reporter(classLoader); final StepDefinitionReporter stepDefinitionReporter = runtimeOptions.stepDefinitionReporter(classLoader); cucumberRuntime.getGlue().reportStepDefinitions(stepDefinitionReporter); runFeatures(cucumberFeatures, cucumberRuntime, getReporter(reporter, formatter, runtimeOptions), runNotifier); if (reported) { final String path = cukespaceConfigurationProperties.getProperty(CucumberConfiguration.REPORTABLE_PATH); addReportTestIntoFile(path, javaTestClass, reportBuilder); } handleCucumberTestErrors(cucumberRuntime.getErrors(), cucumberRuntime); }