web-dev-qa-db-fra.com

Récupère la propriété de balise @CucumberOptions à l'aide de System.getProperty ()

Je dirige un projet maven dans Eclipse pour mes tests de concombre. Ma classe de coureur de test ressemble à ceci:

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

Au lieu d’avoir à coder en dur les balises dans le programme d’essai, je souhaite les transmettre à l’aide du fichier .command. (c'est-à-dire en utilisant System.getProperty ("cucumber.tag")

Cependant, je reçois une erreur lorsque j'ajoute la ligne de code au lanceur de test ci-dessus:

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

L'erreur que j'obtiens est la suivante: "La valeur de l'attribut d'annotation CucumberOptions.tags doit être une expression constante".

Il semble donc qu'il ne veuille que des constantes plutôt qu'une valeur paramétrée. Quelqu'un sait-il comment s'y prendre?

14
Charlie Seligman

Vous pouvez utiliser la variable d'environnement cucumber.options pour spécifier les balises lors de l'exécution.

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

Ceci remplace les étiquettes déjà contenues dans le code de test.

15
Reimeus

Je fais comme ça: -

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

Classe Java: CreateCucumberOptions.Java

Méthode de chargement du fichier de propriétés: -

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

méthode pour obtenir et définir 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);
   }

Et méthode principale pour exécuter ceci: -

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

Et RunGwMLCompareTests.class est ma classe de concombre

@

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

    public RunGwMLCompareTests(){

    }
}

En résumé, vous obtenez maintenant un rapport de sortie défini et des dossiers de fonctionnalités par le biais de fichiers de propriétés et d’autres options telles que la classe Java de définitions de collage. Et pour exécuter les cas de test, exécutez simplement votre classe principale.

Cordialement,

Vikram Pathania

1
Vikram Pathania