2015-06-02 35 views
14

Używam projektu maven w Eclipse do moich testów ogórek. Moja klasa Test biegacz wygląda następująco:Właściwość znacznika Get @CucumberOptions przy użyciu System.getProperty()

@RunWith(Cucumber.class) 
@CucumberOptions(
     tags = { "@Now" },  
//  tags = { "@Ready" }, 
//  tags = { "@Draft" }, 
     features = { "src/test/java/com/myCompany/FaultReporting/Features" }, 
     glue = { "com.myCompany.myApp.StepDefinitions" } 
     ) 
public class RunnerTest { 
} 

Zamiast ciężkiej kodu tagów do biegacza testowym, jestem zapalonym przekazać je za pomocą pliku .command. (Czyli przy użyciu System.getProperty („cucumber.tag”)

Jednakże pojawia się błąd po dodaniu wiersza kodu do powyższego testu biegacza:

@RunWith(Cucumber.class) 
@CucumberOptions(
     tags = { System.getProperty("cucumber.tag") } 
//  tags = { "@Now" },  
//  tags = { "@Ready" }, 
//  tags = { "@Draft" }, 
     features = { "src/test/java/com/myCompany/FaultReporting/Features" }, 
     glue = { "com.myCompany.myApp.StepDefinitions" } 
     ) 
public class RunnerTest { 
} 

Błąd pojawia się: „wartość adnotacji CucumberOptions.tags atrybut musi być stałym wyrażeniem”.

wydaje się więc tylko chce stałe zamiast wartości parametryzacji. Każdy wie, okrągłe to sprytny sposób?

Odpowiedz

13

można użyć środowiska cucumber.options al zmienna, aby określić znaczniki w czasie wykonywania:

mvn -D"cucumber.options=--tags @Other,@Now" test 

To zastępuje znaczniki już zawarte w kodzie testowym.

0

robie tak: -

cucmberOption.properties

#cucumber.options=--plugin html:output/cucumber-html-report 
#src/test/resources 
cucumber.options.feature =src/test/resources 
cucumber.options.report.html=--plugin html:output/cucumber-html-report 

Java Class: CreateCucumberOptions.java

Metoda załadować pliku właściwości: -

private static void loadPropertiesFile(){ 
    InputStream input = null; 
    try{ 
     String filename = "cucumberOptions.properties"; 
     input = CreateCucumberOptions.class.getClassLoader().getResourceAsStream(filename); 
     if(input==null){ 
      LOGGER.error("Sorry, unable to find " + filename); 
      return; 
     } 
     prop.load(input); 
    }catch(IOException e){ 
     e.printStackTrace(); 
    }finally{ 
     if(input!=null) { 
      try { 
       input.close(); 
      } catch (IOException e) { 
       e.printStackTrace(); 
      } 
     } 
    } 
} 

metoda aby uzyskać i ustawić CucumberOptions

private String createAndGetCucumberOption(){  
StringBuilder sb = new StringBuilder(); 
String featureFilesPath = 
prop.getProperty("cucumber.options.feature"); 
LOGGER.info(" featureFilesPath: " +featureFilesPath); 
String htmlOutputReport = 
    prop.getProperty("cucumber.options.report.html"); 
LOGGER.info(" htmlOutputReport: " +htmlOutputReport); 
sb.append(htmlOutputReport); 
sb.append(" "); 
sb.append(featureFilesPath); 
return sb.toString(); 
} 

private void setOptions(){ 
    String value = createAndGetCucumberOption(); 
    LOGGER.info(" Value: " +value); 
    System.setProperty(KEY, value); 
    } 

i metoda głównym, aby uruchomić to: -

public static void main(String[] args) { 
    CreateCucumberOptions cucumberOptions = new CreateCucumberOptions(); 
    JUnitCore junitRunner = new JUnitCore(); 
    loadPropertiesFile(); 
    cucumberOptions.setOptions(); 
    junitRunner.run(cucumberTest.runners.RunGwMLCompareTests.class); 
} 

I RunGwMLCompareTests.class jest moja klasa Ogórek

@

RunWith(Cucumber.class) 
@CucumberOptions(
     monochrome = true, 
     tags = {"@passed"}, 
     glue = "cucumberTest.steps") 
public class RunGwMLCompareTests { 

    public RunGwMLCompareTests(){ 

    } 
} 

Więc w zasadzie teraz przygotuj raport i wyjście udostępniać foldery poprzez pliki właściwości i inne opcje, takie jak definicje kleju klasa java. Aby uruchomić przypadki testowe, po prostu uruchom swoją główną klasę.

Pozdrawiam,

Vikram Pathania