CitrusFramework-无法通过黄瓜java运行

问题描述 投票:0回答:1

我正在尝试使用黄瓜创建用于REST和SOAP调用的Citrus API框架。创建了所需的所有类和功能后,我开始运行Runner类,而在运行Runner类时出现错误,提示Unrecognized plugin: com.consol.citrus.cucumber.CitrusReporter完整的错误将在下面附上。

我的赛跑者课程在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 {

}

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

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:Cucumber.properties

Citrus-application.properties:

Citrus-application.properties

java rest api cucumber-java citrus-framework
1个回答
0
投票

您是否已将CitrusObjectFactory属性添加到cucumber.properties文件?按照the documentation

为了启用Citrus Cucumber支持,我们需要在Cucumber.properties中指定一个特殊的对象工厂。

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

对象工厂会谨慎创建所有步骤定义实例。对象工厂能够在步骤类中注入@C​​itrusResource带注释的字段。

为了结合柑橘和黄瓜功能,必须使用此特殊对象工厂。

© www.soinside.com 2019 - 2024. All rights reserved.