有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

rest CitrusFramework无法通过java运行

我试图使用cucumber为REST和SOAP调用创建一个Citrus API框架。在创建了所需的所有类和功能之后,我开始运行runner类,在运行runnerclass时,我收到了一个错误消息Unrecognized plugin: com.consol.citrus.cucumber.CitrusReporter 完整错误将附在下面

我的Runner类在com.consol.citrus.demo.voting.rest包中

package com.consol.citrus.Petstore.rest;

import org.junit.runner.RunWith;

import cucumber.api.CucumberOptions;
import cucumber.api.junit.Cucumber;

@RunWith(Cucumber.class)
@CucumberOptions(glue = { "com.consol.citrus.Petstore.rest",
                 "com.consol.citrus.cucumber.step.runner.core",
                 "com.consol.citrus.cucumber.step.runner.http" },
plugin = { "com.consol.citrus.cucumber.CitrusReporter" })
public class PetstorerestIT {

}

我的Stepdef在com.consol.citrus.demo.voting.rest包中

package com.consol.citrus.Petstore.rest;

import org.springframework.http.HttpStatus;

import com.consol.citrus.annotations.CitrusEndpoint;
import com.consol.citrus.annotations.CitrusResource;
import com.consol.citrus.dsl.builder.HttpActionBuilder;
import com.consol.citrus.dsl.runner.TestRunner;
import com.consol.citrus.http.client.HttpClient;


import cucumber.api.java.en.And;
import cucumber.api.java.en.Given;
import cucumber.api.java.en.Then;
import cucumber.api.java.en.When;

public class Petstoresteps {

    @CitrusEndpoint
    private HttpClient votingClient;

    @CitrusResource
    private TestRunner runner;


    @Given("^i set variables to configure$")
    public void i_set_variables_to_configure() throws Throwable {

            runner.variable("id", "citrus:randomUUID()");
            runner.variable("name", "ArunKumar");
            runner.variable("photoUrls", "photo.jpg");
            runner.variable("status", "available");

    }

    @Given("^i send the payload request$")
    public void i_send_the_payload_request() throws Throwable {
        // Write code here that turns the phrase above into concrete actions

        runner.http(action -> action.client(votingClient)
                .send()
                .post("/voting")
                .contentType("application/json")
                .payload("{\r\n" + 
                        "  \"id\": \"${id}\",\r\n" + 
                        "  \"category\": {\r\n" + 
                        "    \"id\": \"${id}\",\r\n" + 
                        "    \"name\": \"${name}\"\r\n" + 
                        "  },\r\n" + 
                        "  \"name\": \"${name}\",\r\n" + 
                        "  \"photoUrls\": [\r\n" + 
                        "    \"${photoUrls}\"\r\n" + 
                        "  ],\r\n" + 
                        "  \"tags\": [\r\n" + 
                        "    {\r\n" + 
                        "      \"id\": \"${id}\",\r\n" + 
                        "      \"name\": \"${name}\"\r\n" + 
                        "    }\r\n" + 
                        "  ],\r\n" + 
                        "  \"status\": \"${status}\"\r\n" + 
                        "}"));


    }

    @And("^i check for the content type$")
    public void i_check_for_the_content_type() throws Throwable {
        // Write code here that turns the phrase above into concrete actions
        runner.http(action -> action.client(votingClient)
                .receive()
                .response().contentType("application/json"));

    }

    @Then("^receive status (\\d+) OK$")
    public void receive_status_OK(int arg1) throws Throwable {
        // Write code here that turns the phrase above into concrete actions

        HttpActionBuilder arg = runner.http(action -> action.client(votingClient)
                .receive()
                .response(HttpStatus.OK));
        String argg = arg.toString();
        System.out.println(argg);

    }


}

我的CitrusEndpointConfig在com.consol.citrus.Petstore包中

package com.consol.citrus.Petstore;

import com.consol.citrus.dsl.endpoint.CitrusEndpoints;
import com.consol.citrus.http.client.HttpClient;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;


@Configuration
public class CitrusEndpointConfig {

    @Bean
    public HttpClient votingClient() {
        return CitrusEndpoints.http()
                .client()
                .requestUrl("https://petstore.swagger.io/v2")
                .build();
    }


}

错误消息:

cucumber.runtime.CucumberException: Unrecognized plugin: com.consol.citrus.cucumber.CitrusReporter
    at cucumber.runtime.RuntimeOptions$ParsedPluginData.addPluginName(RuntimeOptions.java:372)
    at cucumber.runtime.RuntimeOptions.parse(RuntimeOptions.java:125)
    at cucumber.runtime.RuntimeOptions.<init>(RuntimeOptions.java:85)
    at cucumber.runtime.RuntimeOptions.<init>(RuntimeOptions.java:78)
    at cucumber.runtime.RuntimeOptions.<init>(RuntimeOptions.java:70)
    at cucumber.runtime.RuntimeOptionsFactory.create(RuntimeOptionsFactory.java:25)

请指导我解决这个问题!我非常需要它

黄瓜。属性: Cucumber.properties

柑橘应用。属性:

Citrus-application.properties


共 (1) 个答案

  1. # 1 楼答案

    您是否已将CitrusObjectFactory属性添加到cucumber.properties文件中?根据the documentation

    In order to enable Citrus Cucumber support we need to specify a special object factory in cucumber.properties.

    cucumber.api.java.ObjectFactory=cucumber.runtime.java.CitrusObjectFactory
    

    The object factory takes care on creating all step definition instances. The object factory is able to inject @CitrusResource annotated fields in step classes.

    The usage of this special object factory is mandatory in order to combine Citrus and Cucumber capabilities.