web-dev-qa-db-ja.com

System.getProperty()を使用して@CucumberOptionsタグプロパティを取得します

キュウリのテストのためにEclipseでMavenプロジェクトを実行しています。私のテストランナークラスは次のようになります。

@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環境変数を使用して、実行時にタグを指定できます

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

これは、テストコードにすでに含まれているタグに優先します。

18
Reimeus

私はこのようにやっています:-

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(){

    }
}

つまり、基本的には、プロパティファイルやglue definations Java classなどのオプションを介して、設定された出力レポートと機能フォルダを取得します。テストケースを実行するには、メインクラスを実行するだけです。

よろしく、

ヴィクラム・パタニア

1
Vikram Pathania