如何在宁静的BDD Jbehave中按特定顺序执行故事文件

时间:2016-08-29 13:41:25

标签: java selenium-webdriver jbehave serenity-bdd thucydides

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

例如: 当前执行

aaa.story

bbb.story

ccc.story

我希望执行

ccc.story

bbb.story

并跳过aaa.story

有没有办法按特定顺序运行特定故事。 在Serenity BDD + Jbehave

2 个答案:

答案 0 :(得分:1)

您可以使用meta filtering标记故事/方案。如果您只想运行故事/方案的子集或跳过其中一些,这非常有用。 例如:

Meta: @sometag

Scenario: some scenario
Given something 

然后,您可以使用story mappingGivenStories:来包含/排除标有某些标记的方案。

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

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

或创建单独的文件夹:

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

如果您需要在另一个sample by Apple here子句之前执行某个故事,还有更好的解决方案:

GivenStories: aaa.story

Scenario: requires aaa to run
Given something

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

答案 1 :(得分: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;
    }

}