Подтвердить что ты не робот

Единое развертывание для всех тестовых случаев в Аркильском

Мы используем окончательную версию arquillian-junit-container 1.0.0 для теста Junit.

У нас так много тестовых классов и каждого тестового класса, как метод @Deployment, поэтому, когда я запускаю весь тест вместе, тогда он создает проблему с памятью и производительностью.

Может ли кто-нибудь помочь мне разобраться в этой проблеме, указав, как избежать множественного развертывания для каждого отдельного класса. Как мы можем достичь единичного развертывания для всех тестовых примеров в Arquillian?

4b9b3361

Ответ 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. Таким образом, код, упомянутый выше, является лучшим, что вы можете получить прямо сейчас: -)