我正在使用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)
答案 0 :(得分:0)
我不知道你在Citrus环境中配置了什么,所以我将发布一个完整的例子。
Citrus测试使用TestNG运行,但Citrus本身是Spring应用程序。这意味着您可以像在Spring应用程序中那样在配置类中配置Beans,然后您可以使用@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
块来配置Citrus(或一般的任何东西)并使用如上所述的设置。如果documentation无法帮助您,您可以随时查看样本here。
Citrus测试组件在测试中非常灵活,因此您不需要动态更改任何配置值。我也不建议这样做。如果您需要更改无法在测试操作中显式配置的测试组件(如HttpClient)内的任何内容,那么我建议您使用该特殊配置创建一个新组件。