2013-09-05 8 views
2

나는 셀레늄과 통합 된 jbehave를 가지고 있습니다. 아래 명령 줄을 통해 테스트를 실행합니다. C:\eclipse_workspace\MySeleniumTests>mvn clean test -Dwebdriver.firefox.bin="C:\Program Files\Mozilla\Firefox\firefox.exe"jbehave는 특정 이야기 만 실행합니다.

jbehave-maven-plugin을 사용했습니다. Maven은 소스 디렉토리에서 모든 Embedder impl (내 사례의 JunitStories)을 선택하고 하나씩 실행합니다. 그 구성은 pom.xml에 <include>**/*Stories.java</include>입니다.

그런 다음 지정된 dir에있는 관련 .story 파일을 찾아 실행합니다. 말해봐, 나는 하나의 스토리 파일 두 개를 가지고있다. 스토리와 두 개의 스토리. 둘 다 실행된다.

시간이 지남에 따라 스토리 파일 수가 늘어날 것입니다. 특정 스토리 파일을 실행하려는 경우에만이 작업을 수행 할 수 있습니까? 특정 이야기 파일 이름을 런타임 매개 변수로 전달할 생각이지만 그렇게하려면 무엇이 필요한지 알지 못합니다.

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

또한 사용해야하는 사용자 정의 테스트 스위트 구현 :

답변

2

을 나는()가 아래 코드

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

무시 storyPaths 작업 있어요 메소드를 다음과 같이 embedder 클래스에 추가합니다.

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

나는 당신의 코드를 시도했지만 반환하는 storiesToRun 크기는 0으로 생각했다. 나는 그것을 얻고있다. – SacTan

+0

@SachinB는 코드를 분석하지 않고는 말할 수 없습니다. –

+0

@ 카이저, JBehaveRunnerStories를 사용하여 JUnitStories {}를 확장하고 Configuration 구성(), InjectableStepsFactory stepsFactory() 및 제공 한 메서드를 재정의합니다. 그것은 실행 구성에서 매개 변수의 이야기를 가지고 있지만 (String storyName : storyNames) for 루프에서 왔을 때 반복문은 두 번만 전달되었지만 반환 storyToRun이 0 일 때 반복 횟수는 0입니다. – SacTan

0

다음 시도

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

이것은 Thucydides에서 작동하지만 어떤 프레임 워크도 사용하지 않습니다. 그러나 나는 당신의 접근 방식과 유사한 방법으로 그럭저럭 할 수 있었다. –