【问题标题】:jbehave run only specific storyjbehave 只运行特定的故事
【发布时间】:2013-09-05 15:37:26
【问题描述】:

我已将 jbehave 与 Selenium 集成。我正在通过命令行运行我的测试,如下所示 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,它们都被执行了。

随着时间的推移,故事文件的数量会增加我只想执行特定的故事文件应该有办法做到这一点吗?我正在考虑将特定的故事文件名作为运行时参数传递,但不知道实现这一点需要什么。

【问题讨论】:

    标签: selenium automated-tests jbehave jbehave-plugin


    【解决方案1】:

    我用下面的代码让它工作

    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;
        }
    

    【讨论】:

    • 我试过你的代码,但它返回的 storiesToRun 大小为 0。你知道吗?
    • @Kaizer,我正在使用 JBehaveRunnerStories extends JUnitStories { } 并覆盖 Configuration configuration()、InjectableStepsFactory stepsFactory() 和您提供的方法。它从运行配置中的参数中获取故事,但是当它进入 for 循环 for (String storyName : storyNames) 时,循环执行了两次,因为我只通过了两个故事,但是当它返回 storiesToRun 时,它的计数/大小为零。跨度>
    • 如果可能的话,我可以和你分享我的代码吗...我的电子邮件 ID 是 stvpr_sachin@yahoo.in
    • 项目中的 .story 文件可能不在正确的位置,因此不在类路径中,因此 StoryFinder 可能无法找到它们。你能分享一下你的项目结构吗?
    • 你能帮我吗,Whare 和我必须检查的内容,以便我确定原因..由于安全原因,我不能在这里分享代码..我可以邮寄给你,我的电子邮件 id 是 stvpr_sachin@yahoo.in.. 提前谢谢您。
    【解决方案2】:

    尝试以下方法:

    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);
        }
    }
    

    【讨论】:

    • 这可以在修昔底德工作,但我没有使用任何框架。但是,我设法做到了与您的方法类似的事情。
    猜你喜欢
    • 2011-09-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多