jbehave只运行特定的故事

时间:2013-09-05 15:37:26

标签: selenium automated-tests jbehave jbehave-plugin

我已经与Selenium集成了jbe。我正在通过命令行运行我的测试,如下所示 C:\eclipse_workspace\MySeleniumTests>mvn clean test -Dwebdriver.firefox.bin="C:\Program Files\Mozilla\Firefox\firefox.exe"

我使用过jbehave-maven-plugin。 Maven从源目录中获取所有Embedder impl(在我的情况下为JunitStories)并逐个执行它们。其配置为pom.xml中的<include>**/*Stories.java</include>

然后在指定的dir中查找相关的.story文件并执行它们。说,我有两个故事文件one.story和two.story,它们都被执行。

有一段时间,故事文件的数量会增加我只想有办法执行特定的故事文件吗?我想将特定的故事文件名作为运行时参数传递,但不知道实现这一点需要什么。

2 个答案:

答案 0 :(得分:2)

我使用下面的代码

mvn clean test -Dwebdriver.firefox.bin="C:\Program Files\Mozilla\Firefox\firefox.exe" -Dstory=myStory.story

覆盖嵌入类中的storyPaths()方法,如下所示。

public class MyTestStories extends JUnitStories /* InjectableEmbedder */{

    @Override
    protected List<String> storyPaths() {
        List<String> storiesToRun = new ArrayList<String>();
        String storyProperty = System.getProperty("story");

        if (storyProperty == null || storyProperty.isEmpty()) {
           throw new RuntimeException("Please specify which stories to run");
        }

        String[] storyNames = storyProperty.split(",");
        StoryFinder sf = new StoryFinder();
        URL baseUrl = CodeLocations.codeLocationFromClass(this.getClass());

        for (String storyName : storyNames) {
           storiesToRun.addAll(sf.findPaths(baseUrl, storyName, ""));
        }

        return storiesToRun;
    }

答案 1 :(得分:0)

尝试以下方法:

mvn clean test -Dwebdriver.firefox.bin="C:\Program Files\Mozilla\Firefox\firefox.exe" -Djbehave.story.name=<story filename without extension (wildcards are supported)>

您还应该使用自定义测试套件实现:

public abstract class JBehaveTestSuite extends ThucydidesJUnitStories {

    private static final String STORY_NAME_PATTERN = "**/${jbehave.story.name:*}.story";

    public JBehaveTestSuite() {
        findStoriesCalled(storyNamesFromEnvironmentVariable());
    }

    @Override
    public void run() throws Throwable {
        super.run();
    }

    private String storyNamesFromEnvironmentVariable() {
        return SystemPropertyUtils.resolvePlaceholders(STORY_NAME_PATTERN);
    }
}