我正在尝试使用黄瓜创建用于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)
请指导我解决此问题!我非常需要它!
Citrus-application.properties:
您是否已将CitrusObjectFactory
属性添加到cucumber.properties
文件?按照the documentation:
为了启用Citrus Cucumber支持,我们需要在Cucumber.properties中指定一个特殊的对象工厂。
cucumber.api.java.ObjectFactory=cucumber.runtime.java.CitrusObjectFactory
对象工厂会谨慎创建所有步骤定义实例。对象工厂能够在步骤类中注入@CitrusResource带注释的字段。
为了结合柑橘和黄瓜功能,必须使用此特殊对象工厂。