gpt4 book ai didi

java - 在 TestNg 框架执行 Citrus 测试用例时无法获取 citrus TestContext 对象

转载 作者:太空宇宙 更新时间:2023-11-04 10:35:40 24 4
gpt4 key购买 nike

我正在使用 TestNg 框架来执行柑橘框架测试用例。在下面的代码中,我无法获取柑橘文本上下文对象,在执行测试用例时出现错误

import org.testng.annotations.Optional;
import org.testng.annotations.Parameters;
import org.testng.annotations.Test;
import com.consol.citrus.annotations.CitrusResource;
import com.consol.citrus.annotations.CitrusXmlTest;
import com.consol.citrus.context.TestContext;
import com.consol.citrus.dsl.testng.TestNGCitrusTestRunner;
public class GenricTest extends TestNGCitrusTestRunner {
static
{
System.setProperty("citrus.spring.application.context", "file:G:\\Citrus\\citrus-context.xml");
}
@Test @Parameters("context")
@CitrusXmlTest(packageScan = "file:C:\\xitrus")

public void CitrusTest(@Optional @CitrusResource TestContext context)
{

}
}

在执行上述代码以获取柑橘文本上下文对象时,我收到以下错误

[Utils] [ERROR] [Error] org.testng.TestNGException: 
Unsupported type parameter : class com.consol.citrus.context.TestContext
at org.testng.internal.Parameters.convertType(Parameters.java:318)
at org.testng.internal.Parameters.createParameters(Parameters.java:203)
at org.testng.internal.Parameters.createParameters(Parameters.java:443)
at org.testng.internal.Parameters.handleParameters(Parameters.java:569)
at org.testng.internal.Invoker.handleParameters(Invoker.java:1308)
at org.testng.internal.Invoker.createParameters(Invoker.java:1036)
at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1126)
at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:126)
at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:109)
at org.testng.TestRunner.privateRun(TestRunner.java:744)
at org.testng.TestRunner.run(TestRunner.java:602)
at org.testng.SuiteRunner.runTest(SuiteRunner.java:380)
at org.testng.SuiteRunner.runSequentially(SuiteRunner.java:375)
at org.testng.SuiteRunner.privateRun(SuiteRunner.java:340)
at org.testng.SuiteRunner.run(SuiteRunner.java:289)
at org.testng.SuiteRunnerWorker.runSuite(SuiteRunnerWorker.java:52)
at org.testng.SuiteRunnerWorker.run(SuiteRunnerWorker.java:86)
at org.testng.TestNG.runSuitesSequentially(TestNG.java:1301)
at org.testng.TestNG.runSuitesLocally(TestNG.java:1226)
at org.testng.TestNG.runSuites(TestNG.java:1144)
at org.testng.TestNG.run(TestNG.java:1115)
at org.testng.remote.AbstractRemoteTestNG.run(AbstractRemoteTestNG.java:114)
at org.testng.remote.RemoteTestNG.initAndRun(RemoteTestNG.java:251)
at org.testng.remote.RemoteTestNG.main(RemoteTestNG.java:77)

最佳答案

我不知道您在 Citrus 上下文中配置了什么,因此我将发布一个完整的示例。

Citrus 测试是使用 TestNG 运行的,但 Citrus 本身是一个 Spring 应用程序。这意味着您可以像在 Spring 应用程序中一样在配置类中配置 Bean,然后可以使用 @Autowired 来访问测试中的 Bean。

这是一个示例配置类,我在其中配置了测试所需的 bean:

@Import({})// you can import more configuration classes here
public class CitrusConfiguration {

@Value("${inbound.service.url}")
private String serviceUrl;
@Value("${external.api.mock.port}")
private int externalApiMockPort;

@Bean
public HttpClient inboundClient() {
return CitrusEndpoints.http()
.client()
.requestUrl("http://" + serviceUrl)
.contentType(MediaType.APPLICATION_JSON_UTF8_VALUE)
.build();
}

@Bean
public HttpServer externalApiMock() {
return CitrusEndpoints.http()
.server()
.port(externalApiMockPort)
.autoStart(true)
.timeout(10000)
.build();
}
}

之后,我们需要告诉 Citrus 哪个类是属性文件中的主要配置类,如下所示:src/test/resources/citrus-application.properties

citrus.spring.java.config=<your.package>.CitrusConfiguration

现在我们可以编写这样的测试:

@Test
public class InboundApiControllerIT extends TestNGCitrusTestRunner {

@Autowired
private HttpClient httpClient;

@CitrusTest
public void okTest() {

http(action -> action.client(httpClient)
.send()
.post("/inbound")
.payload("{" +
"\"userName\": \"Bruce.Wayne\"," +
"\"operation\": \"call-a-pizza\"" +
"}"));

http(action -> action.client(httpClient)
.receive()
.response(HttpStatus.OK)
.contentType(MediaType.APPLICATION_JSON_UTF8_VALUE)
.payload("{" +
"\"success\": true" +
"}"));
}
}

请不要使用 static block 来配置 Citrus(或任何一般内容)并使用如上所述的设置。如果documentation无法帮助您,您可以随时查看 sample here .

Citrus 测试组件在测试中非常灵活,因此您不需要动态更改它们的任何配置值。我也不建议这样做。如果您需要更改测试组件(例如 HttpClient)内无法在测试操作内显式配置的任何内容,那么我建议您使用该特殊配置创建一个新组件。

关于java - 在 TestNg 框架执行 Citrus 测试用例时无法获取 citrus TestContext 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49509872/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com