0

我的故事文件夹中的 jbehave 故事文件很少。每当我执行它按字母顺序执行的脚本时。

例如:当前执行

aaa.story

bbb.story

ccc故事

我希望执行是

ccc故事

bbb.story

并跳过 aaa.story

有没有办法以特定的顺序运行特定的故事。在宁静 BDD + Jbehave

4

2 回答 2

3

您可以使用Meta:来标记故事/场景。如果您只想运行故事/场景的子集或跳过其中一些,这很有用。例子:

Meta: @sometag

Scenario: some scenario
Given something 

然后,您可以使用元过滤故事映射来包含/排除标有某些标签的场景。

您可以更改故事文件名,以便它们的字典顺序与您希望它们执行的顺序相匹配:

1_aaa.story  
2_bbb.story
3_ccc.story

或创建单独的文件夹:

a/aaa.story
a/bbb.story
c/ccc.story

如果您需要在另一个故事之前执行某个故事,那么有更好的解决方案,GivenStories:子句:

GivenStories: aaa.story

Scenario: requires aaa to run
Given something

这将首先执行 aaa.story 然后这个故事。您可以在 中指定多个故事GivenStories

于 2016-08-29T14:01:41.783 回答
1

我有一些类似的场景,我所做的是创建一个自定义的 ThucydidesJUnitStories,在我的情况下,我只需要加载每个故事的步骤以避免冲突,但在你的情况下,你可以在你的故事列表中添加任何类型。例子

public class CustomThucydidesJUnitStories extends ThucydidesJUnitStories   {

    Logger logger = LoggerFactory.getLogger(CustomThucydidesJUnitStories.class);

    private Configuration configuration;
    private List<Format> formats = Arrays.asList(CONSOLE, STATS, HTML);

    @Test
    @Override
    public void run() throws Throwable {
        List<String> storyPaths = storyPaths();
    logger.info("Total stories to run are {}", storyPaths.size());
        //HERE YOU CAN SORT THE storyPaths as you wish 
        for(String storyPath : storyPaths) {
            Embedder embedder = configuredEmbedder();
            embedder.useConfiguration(configuration());
            String storyName =   storyPath.substring(storyPath.lastIndexOf("/") + 1,   storyPath.indexOf(".story"));
            logger.info("Running story {}", storyName);
           embedder.useStepsFactory(ThucydidesStepFactory.withStepsFromPackage(getRootPackage() + "." + storyName,   configuration()).andClassLoader(getClassLoader()));
            embedder.useEmbedderControls(ignoreFailsEmbedderControls());
            embedder.runStoriesAsPaths(Lists.newArrayList(storyPath));
        }
    }

    public EmbedderControls ignoreFailsEmbedderControls() {
        return new EmbedderControls().doIgnoreFailureInStories(true).doIgnoreFailureInView(true);
    }

    @Override
    public Configuration configuration() {
        if (configuration == null) {
             net.thucydides.core.webdriver.Configuration thucydidesConfiguration = getSystemConfiguration();
             configuration = ThucydidesJBehave.defaultConfiguration(thucydidesConfiguration, formats, this);
        }
        return configuration;
    }

}
于 2017-01-25T11:09:35.823 回答