Arquillian использует случайный порт с включенным tomcat7

Я хотел бы использовать случайный порт для Arquillian. Так в arquillian.xml я делаю:

  <arquillian>
    <container qualifier="tomcat7" default="true">
      <configuration>
        ...
        <property name="bindHttpPort">0</property>
        ...
      </configuration>
    </container>
  </arquillian>

В моем модульном тесте:

@ArquillianResource
private URL base;

Я надеюсь, что реальный порт (localPort) используется Apache Tomcat (потому что да, он начинается со случайного порта), но этот URL-адрес с 0 портом, а не из случайного.

Так как получить доступ к этому?

2 ответа

Используете ли вы Apache Maven для запуска таких тестов? Вот как я это сделал. На стороне Maven я использую плагин buildhelper и surefire, чтобы определить случайный порт и передать его в тесты как системное свойство.

<plugins>
  <plugin>
    <groupId>org.codehaus.mojo</groupId>
    <artifactId>build-helper-maven-plugin</artifactId>
    <executions>
      <execution>
        <id>reserve-network-port</id>
        <phase>initialize</phase>
        <goals>
          <goal>reserve-network-port</goal>
        </goals>
        <configuration>
          <portNames>
            <portName>tomcat.http.port</portName>
          </portNames>
        </configuration>
      </execution>
    </executions>
  </plugin>
    <plugin>
      <groupId>org.apache.maven.plugins</groupId>
      <artifactId>maven-surefire-plugin</artifactId>
      <configuration>
        <systemProperties>
          <!-- Port used for Tomcat HTTP connector -->
          <tomcat.http.port>${tomcat.http.port}</tomcat.http.port>
        </systemProperties>
      </configuration>
    </plugin>
</plugins>

И тогда я настроил Arquillian с

<arquillian>
  <container qualifier="tomcat" default="true">
    <configuration>
      <property name="bindHttpPort">${tomcat.http.port:9090}</property>
    </configuration>
  </container
</arquillian>

Примечание: я использую значение по умолчанию для порта, когда запускаю тест из своей IDE, чтобы избежать необходимости настраивать его вручную.

НТН

Ура,

Вы можете использовать расширение arquillian-available-port-extension.

Просто добавьте зависимость в свой пом

<dependency>
    <groupId>com.github.mryan43</groupId>
    <artifactId>arquillian-available-port-extension</artifactId>
    <version>${arquillian-available-port-extension.version}</version>
</dependency>

и поместите в свой arquillian.xml:

<property name="bindHttpPort">${available.port}</property>

Это имеет преимущество работы как при работе в Maven, так и при работе в вашей IDE.

https://github.com/mryan43/arquillian-available-port-extension

Другие вопросы по тегам