CitrusFramework - не может пробежать через огурец java - PullRequest
0 голосов
/ 29 марта 2020

Я пытался создать инфраструктуру Citrus API для REST и SOAP вызовов с использованием огурца. После создания всех необходимых классов и функций, и я пришел, чтобы запустить класс бегуна, во время работы класс бегунка получает сообщение о том, что 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 {

}

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

Citrus-application.properties:

Citrus-application.properties

1 Ответ

0 голосов
/ 29 марта 2020

Вы добавили свойство CitrusObjectFactory в файл cucumber.properties? Согласно документации :

Чтобы включить поддержку Citrus Cucumber, нам нужно указать фабрику специальных объектов в cucumber.properties.

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

Фабрика объектов заботится о создании всех экземпляров определений шагов. Фабрика объектов может внедрять аннотированные поля @CitrusResource в классы шагов.

Использование этой специальной фабрики объектов обязательно для объединения возможностей Citrus и Cucumber.

...