Единое развертывание для всех тестовых случаев в Arquillian

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

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

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


person Ranu Jain    schedule 20.04.2013    source источник


Ответы (3)


Официально вы пока не можете.

Задача JIRA ARQ-197 была создана для поддержки запуска нескольких классов тестов в одном развертывании. В 2010 году! Если вам нужна эта функция, проголосуйте за нее.

Это проблема Аркиллиана, за которую чаще всего голосуют. В настоящее время планируется выпустить версию 2.0.0.CR1, которая может стать следующей версией, но я нигде не могу найти дорожную карту / план выпуска, подтверждающий это.

А пока существует расширение Arquillian Suite (последнее воплощение находится здесь). Он не является официальным, и поэтому есть ограничения, но исходная кодовая база была написана одним из основных разработчиков Arquillian, чтобы доказать, что они могут в конечном итоге поддерживать наборы JUnit. Проблема, по которой эта служба поддержки является официальной, находится здесь и является второй по количеству голосов для Arquillian проблемой.

person Ryan Bennetts    schedule 18.09.2014
comment
Наконец-то идет реализация. Вы можете найти текущее обсуждение здесь: Discussion.arquillian.org/ т / arquillian-core-suite-subsuite-support / - person JanM; 26.05.2015

Я думаю, вы спрашиваете, зачем Аркиллиану нужно развертывать новую войну для каждого тестового класса при запуске теста. У меня есть метод развертывания, описанный Петром Менсиком, но каждый тестовый класс по-прежнему будет развертываться в своей собственной войне, когда вы запускаете тесты. Помещение его в суперкласс только упрощает код с точки зрения меньшего количества строк. Это будет означать, что каждый тестовый класс, являющийся подклассом, будет иметь одинаковое развертывание. Это означает, что ваше развертывание будет представлять собой супернабор зависимостей и, следовательно, будет намного больше, чем при развертывании по отдельности. Я думаю, что этим проще управлять, и оно того стоит, особенно с крупными проектами.

Чтобы ответить на ваш вопрос, похоже, что вы не сможете сгруппировать свои тесты и развернуть одну войну для тестирования до версии 2.0 (которая должна выйти в конце этого года?).

person DJ Spiess    schedule 08.05.2013
comment
У меня та же проблема, что и у OP. Аркиллиан кажется хорошей идеей. Но сначала удалить поддержку встроенного контейнера, вынуждая всех использовать Arquillian и только потом осознавать, сколько не хватает, это просто неправильно. - person MartinTeeVarga; 30.05.2013
comment
в конце этого года? :) - person JRA_TLL; 09.12.2019

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

person Petr Mensik    schedule 22.04.2013
comment
не могли бы вы предоставить пример, потому что я пробовал это, и он не работает с моей стороны - person Ranu Jain; 22.04.2013
comment
Петр, не приведет ли ваше решение к многократным вызовам метода createDeployment (по одному для каждого подкласса)? Рану пытается выполнить развертывание только один раз. - person Felipe Reis; 02.09.2013