2015-06-02 2 views
14

Я запускаю проект maven в Eclipse для моих тестов на огурцы. Мой класс тест бегун выглядит следующим образом:Получить свойство тега @CucumberOptions, используя 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 { 
} 

Вместо того, чтобы жестко закодировать метки в тест бегун, я заинтересован, чтобы передать их в использовании файла .command. (Т.е. с использованием System.getProperty («cucumber.tag»)

Однако я получаю сообщение об ошибке, когда я добавить строку кода в вышеприведенном тест бегун:

@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 { 
} 

Ошибки я получаю: «значение для аннотирования CucumberOptions.tags атрибута должно быть константным выражением».

Так, кажется, он хочет только константы, а не параметризованные значения. Кто-нибудь знает умный способ обойти это?

ответ

13

Вы можете использовать cucumber.options среду al для указания тегов во время выполнения

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

Это отменяет теги, которые уже содержатся в тестовом коде.

0

Я делаю так: -

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 Класс: CreateCucumberOptions.java

Метод загрузки файла свойств: -

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

метод для получения и установки 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); 
    } 

И основной способ запуска этого: -

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

И RunGwMLCompareTests.class мой класс Огурцы

@

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

    public RunGwMLCompareTests(){ 

    } 
} 

Так в основном теперь вы получите набор вывода отчета и папок функций через файлы свойств и другие параметры, такие как определение классов java class. А для запуска тестовых случаев просто запускайте свой основной класс.

С уважением,

Викрам Pathania

Смежные вопросы