2013-04-04 59 views
2

我正在尝试设置JBehave来测试Web服务。JUnit记者没有显示JBehave每个步骤的详细报告

模板故事运行良好,但我只能在JUnit Panel中看到Acceptance套件类的执行结果。我想要的是查看套件中每个故事的执行结果以及故事中的每个步骤的执行结果,例如简单的JUnit测试或Thucydides框架中显示的结果。

这是我的接受套件类:所以也许我没有配置任何东西,或者我必须以其他方式通知我的步骤方法,但是我还没有找到答案。

package ***.qa_webservices_testing.jbehave; 

import java.util.Arrays; 
import java.util.List; 
import java.util.Properties; 

import org.jbehave.core.Embeddable; 
import org.jbehave.core.configuration.Configuration; 
import org.jbehave.core.configuration.MostUsefulConfiguration; 
import org.jbehave.core.io.CodeLocations; 
import org.jbehave.core.io.LoadFromClasspath; 
import org.jbehave.core.io.StoryFinder; 
import org.jbehave.core.junit.JUnitStories; 
import org.jbehave.core.parsers.RegexPrefixCapturingPatternParser; 
import org.jbehave.core.reporters.CrossReference; 
import org.jbehave.core.reporters.Format; 
import org.jbehave.core.reporters.StoryReporterBuilder; 
import org.jbehave.core.steps.InjectableStepsFactory; 
import org.jbehave.core.steps.InstanceStepsFactory; 
import org.jbehave.core.steps.ParameterConverters; 
import org.slf4j.Logger; 
import org.slf4j.LoggerFactory; 

import ***.qa_webservices_testing.jbehave.steps.actions.TestAction; 

/** 
* suite class. 
*/ 
public class AcceptanceTestSuite extends JUnitStories { 
    private static final String CTC_STORIES_PATTERN = "ctc.stories"; 
    private static final String STORY_BASE = "src/test/resources"; 
    private static final String DEFAULT_STORY_NAME = "stories/**/*.story"; 
    private static final Logger LOGGER = LoggerFactory.getLogger(AcceptanceTestSuite.class); 

    private final CrossReference xref = new CrossReference(); 

    public AcceptanceTestSuite() { 
     configuredEmbedder() 
      .embedderControls() 
      .doGenerateViewAfterStories(true) 
      .doIgnoreFailureInStories(false) 
      .doIgnoreFailureInView(true) 
      .doVerboseFailures(true) 
      .useThreads(2) 
      .useStoryTimeoutInSecs(60); 
    } 

    @Override 
    public Configuration configuration() { 
     Class<? extends Embeddable> embeddableClass = this.getClass(); 
     Properties viewResources = new Properties(); 
     viewResources.put("decorateNonHtml", "true"); 
     viewResources.put("reports", "ftl/jbehave-reports-with-totals.ftl"); 
     // Start from default ParameterConverters instance 
     ParameterConverters parameterConverters = new ParameterConverters(); 
     return new MostUsefulConfiguration() 
      .useStoryLoader(new LoadFromClasspath(embeddableClass)) 
      .useStoryReporterBuilder(new StoryReporterBuilder() 
       .withCodeLocation(CodeLocations.codeLocationFromClass(embeddableClass)) 
       .withDefaultFormats() 
       .withViewResources(viewResources) 
       .withFormats(Format.CONSOLE, Format.TXT, Format.HTML_TEMPLATE, Format.XML_TEMPLATE) 
       .withFailureTrace(true) 
       .withFailureTraceCompression(false) 
       .withMultiThreading(false)    
       .withCrossReference(xref)) 
      .useParameterConverters(parameterConverters)      
      // use '%' instead of '$' to identify parameters 
      .useStepPatternParser(new RegexPrefixCapturingPatternParser(
          "%")) 
      .useStepMonitor(xref.getStepMonitor()); 
    } 

    @Override 
    protected List<String> storyPaths() { 
     String storiesPattern = System.getProperty(CTC_STORIES_PATTERN); 
     if (storiesPattern == null) { 
      storiesPattern = DEFAULT_STORY_NAME; 
     } else { 
      storiesPattern = "**/" + storiesPattern; 
     } 
     LOGGER.info("will search stories by pattern {}", storiesPattern); 
     List<String> result = new StoryFinder().findPaths(STORY_BASE, Arrays.asList(storiesPattern), Arrays.asList("")); 
     for (String item : result) { 
      LOGGER.info("story to be used: {}", item); 
     } 
     return result; 
    } 

    @Override 
    public InjectableStepsFactory stepsFactory() { 
     return new InstanceStepsFactory(configuration(), new TestAction()); 
    } 
} 

我的测试方法是这样的:

Customer customer = new cutomer(); 

@Given ("I have Access to Server") 
public void givenIHaveAccesToServer() { 
    customer.haveAccesToServer(); 
} 

所以他们只能通过JBehave符号记谱。

结果在JUnit面板返回是只喜欢在这里(我还没有权利发表图片):

enter image description here

+0

找到了解决问题的方法。 我需要从jbehave扩展Runner类,然后用@RunWith(ReportingRunner.class)通知我的套件 – 2013-04-04 11:39:43

回答

2

是的,codecentric亚军运作非常好。 https://github.com/codecentric/jbehave-junit-runner Eclipse Juno and the CodeCentric Runner.

+0

我想知道如果执行插件只是从IDE测试和创建junit报告,或者我也可以通过maven运行它? – Igal 2015-07-08 08:24:24

+1

在讨论Maven时,假设您想要执行无头(无UI)执行以及可以通过Jenkins等构建服务器显示的报告。因此,有两个工作流用于测试执行:一个用于IDE,因此开发人员可以快速产生测试和功能,以及一个用于maven的自动测试执行与开发团队异步。我看到的大多数团队都使用Surefire插件来执行他们的junit/BDD测试。 https://maven.apache.org/surefire/maven-surefire-plugin/ – 2015-07-10 18:34:52

+0

感谢您的意见,您是对的,我确实需要一个无头执行......我试着用surefire插件工作,但由于某种原因,它不适用于我,可能是由于错误的插件设置 – Igal 2015-07-12 08:57:30