Arquillian Cube REST-Assured集成testing

我试图在docker中用远程tomcat服务器testing我的REST API。 以下是它的细节:

2017年9月21日更新:-START-

发现Arquillian Cube-RESTEasytesting存在一些问题,因为arquillian cube依赖于使用Jersey作为JAXRS提供者的docker-java。 看到更多的细节

我们是否有解决上述问题的方法?

2017年9月21日更新:-END-

arquillian.xml

<?xml version="1.0" encoding="UTF-8"?> <arquillian xmlns="http://jboss.org/schema/arquillian" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://jboss.org/schema/arquillian http://jboss.org/schema/arquillian/arquillian_1_0.xsd"> <extension qualifier="docker"> <property name="serverVersion">1.28</property> <property name="serverUri">http://localhost:2375</property> <property name="definitionFormat">CUBE</property> <property name="dockerContainers"> tomcat: image: tutum/tomcat:7.0 exposedPorts: [8089/tcp] await: strategy: polling stdErr: true env: [TOMCAT_PASS=mypass, JAVA_OPTS=-Dcom.sun.management.jmxremote.port=8089 -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false] portBindings: [8080/tcp] </property> </extension> <container qualifier="tomcat" default="true"> <configuration> <property name="host">localhost</property> <property name="httpPort">8080</property> <property name="user">admin</property> <property name="pass">mypass</property> </configuration> </container> <extension qualifier="cube"> <property name="connectionMode">STARTORCONNECTANDLEAVE</property> </extension> </arquillian> 

testing用例:

 @RunWith(Arquillian.class) @FixMethodOrder(MethodSorters.NAME_ASCENDING) public class GoalTypeServicesTest { @Deployment(testable=false) public static WebArchive createTestArchive() { return ShrinkWrap.create(WebArchive.class, GoalTypeServicesTest.class.getName()+".war") .addClass(CommissionServicesApplication.class) .addClass(GoalTypeServicesTest.class) .addClass(ArquillianAbstractRestApiTest.class) .addClass(GoalTypeServices.class) .addAsWebInfResource("web.xml"); } @ArquillianResource RequestSpecBuilder requestSpecBuilder; @ArquillianResource private DockerClient docker; @Test public void test1_expose_correct_port() throws Exception { assertThat(docker) .container("tomcat") .hasExposedPorts("8080/tcp"); } @Test public void test2_be_able_to_connect_to_my_service() throws Exception { assertThat(docker) .container("tomcat") .isRunning(); } @Test @Produces(MediaType.APPLICATION_JSON + ";charset=UTF-8") public void test3_findGoalTypes() throws Exception { RestAssured.given() .spec(requestSpecBuilder.build()) .when() .get("/admin/goals/types") .then() .assertThat().body("status", equalTo("OK")); } } 

的pom.xml

 <dependencyManagement> <dependencies> <dependency> <groupId>org.jboss.arquillian</groupId> <artifactId>arquillian-bom</artifactId> <version>1.1.13.Final</version> <scope>import</scope> <type>pom</type> </dependency> <dependency> <groupId>org.arquillian</groupId> <artifactId>arquillian-universe</artifactId> <version>1.1.13.7</version> <scope>import</scope> <type>pom</type> </dependency> </dependencies> </dependencyManagement> <dependency> <groupId>org.arquillian.cube</groupId> <artifactId>arquillian-cube-docker</artifactId> <version>1.9.0</version> <scope>test</scope> </dependency> <dependency> <groupId>org.arquillian.cube</groupId> <artifactId>arquillian-cube-docker-restassured</artifactId> <version>1.9.0</version> <scope>test</scope> </dependency> <dependency> <groupId>org.arquillian.cube</groupId> <artifactId>assertj-docker-java</artifactId> <version>1.9.0</version> <scope>test</scope> </dependency> <dependency> <groupId>org.assertj</groupId> <artifactId>assertj-core</artifactId> <version>3.8.0</version> <scope>test</scope> </dependency> <dependency> <groupId>org.jboss.arquillian.container</groupId> <artifactId>arquillian-tomcat-remote-7</artifactId> <version>1.0.0</version> <scope>test</scope> </dependency> <dependency> <groupId>io.rest-assured</groupId> <artifactId>rest-assured</artifactId> <version>3.0.3</version> <scope>test</scope> </dependency> <dependency> <groupId>org.jboss.shrinkwrap.resolver</groupId> <artifactId>shrinkwrap-resolver-impl-maven</artifactId> <scope>test</scope> </dependency> <dependency> <groupId>org.jboss.arquillian.junit</groupId> <artifactId>arquillian-junit-container</artifactId> <scope>test</scope> </dependency> <dependency> <groupId>org.hsqldb</groupId> <artifactId>hsqldb</artifactId> <version>2.4.0</version> <scope>test</scope> </dependency> 

当我用我的embedded式HyperSQL数据库运行这个testing时,出现以下错误:

  java.lang.RuntimeException: Could not auto start container tomcat at org.arquillian.cube.docker.impl.client.CubeSuiteLifecycleController.waitForCompletion(CubeSuiteLifecycleController.java:107) at org.arquillian.cube.docker.impl.client.CubeSuiteLifecycleController.startAllSteps(CubeSuiteLifecycleController.java:80) at org.arquillian.cube.docker.impl.client.CubeSuiteLifecycleController.startAutoContainers(CubeSuiteLifecycleController.java:57) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:498) at org.jboss.arquillian.core.impl.ObserverImpl.invoke(ObserverImpl.java:96) at org.jboss.arquillian.core.impl.EventContextImpl.invokeObservers(EventContextImpl.java:103) at org.jboss.arquillian.core.impl.EventContextImpl.proceed(EventContextImpl.java:85) at org.jboss.arquillian.test.impl.TestContextHandler.createSuiteContext(TestContextHandler.java:73) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:498) at org.jboss.arquillian.core.impl.ObserverImpl.invoke(ObserverImpl.java:96) at org.jboss.arquillian.core.impl.EventContextImpl.proceed(EventContextImpl.java:92) at org.jboss.arquillian.core.impl.ManagerImpl.fire(ManagerImpl.java:143) at org.jboss.arquillian.core.impl.ManagerImpl.fire(ManagerImpl.java:114) at org.jboss.arquillian.test.impl.EventTestRunnerAdaptor.beforeSuite(EventTestRunnerAdaptor.java:75) at org.jboss.arquillian.junit.Arquillian.run(Arquillian.java:116) at org.junit.runners.Suite.runChild(Suite.java:128) at org.junit.runners.Suite.runChild(Suite.java:27) at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290) at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71) at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288) at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58) at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268) at org.junit.runners.ParentRunner.run(ParentRunner.java:363) at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:86) at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38) at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:459) at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:678) at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:382) at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:192) Caused by: javax.ws.rs.ProcessingException: RESTEASY004655: Unable to invoke request at org.jboss.resteasy.client.jaxrs.engines.ApacheHttpClient4Engine.invoke(ApacheHttpClient4Engine.java:287) at org.jboss.resteasy.client.jaxrs.internal.ClientInvocation.invoke(ClientInvocation.java:436) at org.jboss.resteasy.client.jaxrs.internal.ClientInvocation.invoke(ClientInvocation.java:479) at org.jboss.resteasy.client.jaxrs.internal.ClientInvocationBuilder.get(ClientInvocationBuilder.java:171) at com.github.dockerjava.jaxrs.ListContainersCmdExec.execute(ListContainersCmdExec.java:47) at com.github.dockerjava.jaxrs.ListContainersCmdExec.execute(ListContainersCmdExec.java:19) at com.github.dockerjava.jaxrs.AbstrSyncDockerCmdExec.exec(AbstrSyncDockerCmdExec.java:23) at com.github.dockerjava.core.command.AbstrDockerCmd.exec(AbstrDockerCmd.java:35) at org.arquillian.cube.docker.impl.docker.DockerClientExecutor.listRunningContainers(DockerClientExecutor.java:316) at org.arquillian.cube.docker.impl.client.CubeSuiteLifecycleController.isCubeRunning(CubeSuiteLifecycleController.java:115) at org.arquillian.cube.docker.impl.client.CubeSuiteLifecycleController.access$200(CubeSuiteLifecycleController.java:29) at org.arquillian.cube.docker.impl.client.CubeSuiteLifecycleController$StartCubes.call(CubeSuiteLifecycleController.java:142) at org.arquillian.cube.docker.impl.client.CubeSuiteLifecycleController$StartCubes.call(CubeSuiteLifecycleController.java:130) at org.jboss.arquillian.core.impl.threading.ThreadedExecutorService$ContextualCallable.call(ThreadedExecutorService.java:89) at java.util.concurrent.FutureTask.run(FutureTask.java:266) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) at java.lang.Thread.run(Thread.java:748) Caused by: java.net.ConnectException: Connection refused: connect at java.net.DualStackPlainSocketImpl.connect0(Native Method) at java.net.DualStackPlainSocketImpl.socketConnect(DualStackPlainSocketImpl.java:79) at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:350) at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:206) at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:188) at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:172) at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392) at java.net.Socket.connect(Socket.java:589) at org.apache.http.conn.scheme.PlainSocketFactory.connectSocket(PlainSocketFactory.java:120) at org.apache.http.impl.conn.DefaultClientConnectionOperator.openConnection(DefaultClientConnectionOperator.java:179) at org.apache.http.impl.conn.ManagedClientConnectionImpl.open(ManagedClientConnectionImpl.java:328) at org.apache.http.impl.client.DefaultRequestDirector.tryConnect(DefaultRequestDirector.java:612) at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:447) at org.apache.http.impl.client.AbstractHttpClient.doExecute(AbstractHttpClient.java:884) at org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:82) at org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:55) at org.jboss.resteasy.client.jaxrs.engines.ApacheHttpClient4Engine.invoke(ApacheHttpClient4Engine.java:283) ... 17 more 

因为我是docker工人和阿尔奎利亚新手,所以我现在没有任何线索。

我在我的Windows 10 PC中安装了docker工具箱。

Docker详细信息

提前致谢。