Единое развертывание для всех тестовых случаев в Аркильском
Мы используем окончательную версию arquillian-junit-container 1.0.0 для теста Junit.
У нас так много тестовых классов и каждого тестового класса, как метод @Deployment, поэтому, когда я запускаю весь тест вместе, тогда он создает проблему с памятью и производительностью.
Может ли кто-нибудь помочь мне разобраться в этой проблеме, указав, как избежать множественного развертывания для каждого отдельного класса. Как мы можем достичь единичного развертывания для всех тестовых примеров в Arquillian?
Ответы
Ответ 1
Вы не можете, официально, пока.
Проблема JIRA ARQ-197 была создана для поддержки запуска нескольких классов тестов против одного развертывания. В 2010 году! Если вы хотите эту функцию, проголосуйте за нее.
Это Аркиллиан больше всего проголосовал за вопрос. В настоящее время он предназначен для версии 2.0.0.CR1, которая может быть следующей версией, но я не могу найти план дорожной карты/релиза в любом месте, что подтверждает это.
В то же время существует расширение Arquillian Suite (последнее воплощение здесь). Он не является официальным, и поэтому существуют ограничения, но исходная кодовая база была написана одним из основных разработчиков Arquillian, чтобы доказать, что они могут в конечном итоге поддерживать пакеты JUnit. Вопрос о том, чтобы сделать эту официальную поддержку, здесь и является второй по значимости в Аркильском вопросе.
Ответ 2
Я думаю, вы спрашиваете, почему Аркиллиан должен развернуть новую войну для каждого тестового класса при запуске теста. У меня есть метод развертывания, как описывает Петр Менсик, но каждый тестовый класс по-прежнему будет развертывать в своей собственной войне, когда вы запускаете тесты. Включение его в суперкласс просто упрощает код с меньшей точки зрения. Это будет означать, что каждый тестовый класс, который является подклассом, будет иметь одно и то же развертывание. Это означает, что ваше развертывание будет супер-набором зависимостей и, следовательно, намного больше, чем индивидуально. Мне кажется, что легче управлять, и стоит того, что особенно важно для крупных проектов.
Чтобы ответить на ваш вопрос, похоже, что вы не сможете группировать свои тесты и развертывать одну войну для тестирования до версии 2.0 (ожидается в конце этого года?).
Ответ 3
Почему у вас должен быть метод развертывания в каждом классе? Я использую Arquillian для функционального тестирования с Drone и Graphene, и у меня есть один базовый класс с методом развертывания, инициализацией Selenium Web Driver, несколькими методами utils, и каждый мой тестовый класс расширение этого класса и повторное использование экземпляра веб-драйвера.
Я не понимаю, почему это не должно работать в вашем случае (или даже без расширения базового класса).
Хорошо, вот как выглядит
public class WebDriverTest extends Arquillian { //I am using TestNG
@Drone
protected WebDriver driver;
@ArquillianResource
private URL contextRoot;
@Deployment(testable = false) //functional tests cannot run in container
public static WebArchive createDeployment() {
File archive = new File("target/myApp.war");
ShrinkWrap.createFromZipFile(WebArchive.class, archive);
}
}
public class TestClass extends WebDriverTest {
@Test
public void test1() {}
@Test
public void test2() {}
}
Здесь все прекрасно работает. Также убедитесь, что у вас есть правильные зависимости Maven, они должны присутствовать, чтобы запускать функциональные тесты (затем зависеть от всего, что вам нужно от этих спецификаций)
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.jboss.arquillian.selenium</groupId>
<artifactId>selenium-bom</artifactId>
<version>${selenium.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<dependency>
<groupId>org.jboss.arquillian</groupId>
<artifactId>arquillian-bom</artifactId>
<version>${arquillian-core.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<dependency>
<groupId>org.jboss.arquillian.extension</groupId>
<artifactId>arquillian-drone-bom</artifactId>
<version>${arquillian-drone.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
ИЗМЕНИТЬ
Хорошо, поэтому в соответствии с этим JIRA вы не увидите эту функцию в Arquillian до версии 2.0.0.CR1. Таким образом, код, упомянутый выше, является лучшим, что вы можете получить прямо сейчас: -)