jenkinsgradlecucumbercucumber-jvmhp-alm

Select a different runner for cucumber.api.cli.Main?


Is it possible to define/specify a runner when starting tests from cucumber's command line(cucumber.api.cli.Main)? My reason for this is so i can generate xml reports in Jenkins and push the results to ALM Octane.

I kind of inherited this project and its using gradle to do a javaexect and call cucumber.api.cli.Main I know its possible to do this with @RunWith(OctaneCucumber.class) when using JUnit runner + maven (or only JUnit runner), otherwise that tag is ignored. I have the custom runner with that tag but when i run from cucumber.api.cli.Main i can't find a way to run with it and my tag just gets ignored.


Solution

  • What @Grasshopper suggested didn't exactly work but it made me look in the right direction.

    Instead of adding the code as a plugin, i managed to "hack/load" the octane reporter by creating a copy of the cucumber.api.cli.Main, using it as a base to run the cli commands and change a bit the run method and add the plugin at runtime. Needed to do this because the plugin required quite a few parameters in its constructor. Might not be the perfect solution, but it allowed me to keep the gradle build process i initially had.

    public static byte run(String[] argv, ClassLoader classLoader) throws IOException {
        RuntimeOptions runtimeOptions = new RuntimeOptions(new ArrayList<String>(asList(argv)));
    
        ResourceLoader resourceLoader = new MultiLoader(classLoader);
        ClassFinder classFinder = new ResourceLoaderClassFinder(resourceLoader, classLoader);
        Runtime runtime = new Runtime(resourceLoader, classFinder, classLoader, runtimeOptions);
    
        //====================Added the following lines ================
        //Hardcoded runner(?) class. If its changed, it will need to be changed here also
        OutputFile outputFile = new OutputFile(Main.class);
        runtimeOptions.addPlugin(new HPEAlmOctaneGherkinFormatter(resourceLoader, runtimeOptions.getFeaturePaths(), outputFile));
        //==============================================================
    
        runtime.run();
    
        return runtime.exitStatus();
    }