【问题标题】:Single deployment for all test cases in ArquillianArquillian 中所有测试用例的单一部署
【发布时间】:2013-04-20 12:15:19
【问题描述】:

我们正在使用 arquillian-junit-container 1.0.0 最终版本进行 Junit 测试。

我们有这么多的测试类和每个测试类作为@Deployment 方法,所以当我一起运行所有测试时,它会产生内存和性能问题。

谁能帮我解决这个问题,告诉我如何避免每个类的多次部署。我们如何在 Arquillian 中实现所有测试用例的单一部署?

【问题讨论】:

    标签: jboss7.x jboss-arquillian


    【解决方案1】:

    你还不能,正式地说。

    创建 JIRA 问题 ARQ-197 是为了支持针对单个部署运行多个测试类。 2010 年! 如果您想要此功能,请为它投票。

    这是 Arquillian 投票最多的问题。它目前定于 2.0.0.CR1 版本,可能是下一个版本,但我在任何地方都找不到可以证实这一点的路线图/发布计划。

    与此同时,还有 Arquillian Suite Extension(最新版本是 here)。它不是官方的,因此存在限制,但原始代码库是由 Arquillian 核心开发人员之一编写的,以证明他们最终可以支持 JUnit 套件。将此支持正式化的问题是 here,并且是 Arquillian 投票第二多的问题。

    【讨论】:

    【解决方案2】:

    我想你是在问为什么 Arquillian 需要在运行测试时为每个测试类部署新的战争。我有 Petr Mensik 描述的部署方法,但是当您运行测试时,每个测试类仍将部署在它自己的战争中。将它放在超类中只会从更少的行的角度简化代码。这意味着作为子类的每个测试类都将具有相同的部署。这意味着您的部署将是超级依赖集,因此比单独部署要大得多。我认为它更容易管理,而且物有所值,尤其是大型项目。

    要回答您的问题,您似乎无法对测试进行分组并部署一场战争进行测试,直到 2.0 版(今年年底到期?)。

    【讨论】:

    • 我和 OP 有同样的问题。 Arquillian 似乎是个好主意。但是先去掉对嵌入式容器的支持,强迫大家使用 Arquillian,然后才意识到缺少了多少,这是错误的。
    • “今年年底?” :)
    【解决方案3】:

    为什么要在每个类中都有部署方法?我使用 Arquillian 对 Drone 和 Graphene 进行功能测试,我有一个带有部署方法的基类,Selenium Web 驱动程序的初始化,很少的 utils 方法,而我的所有其他测试类都只是扩展此类并重用我的 Web Driver 实例。

    我不明白为什么这不适用于您的情况(甚至不扩展基类)。

    好的,就是这个样子

    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 依赖,这些必须存在才能运行功能测试(然后从这些 BOM 中为你需要的任何东西建立依赖)

    <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,直到版本 2.0.0.CR1,您才会在 Arquillian 中看到此功能。所以我上面提到的代码是你现在能得到的最好的代码:-)

    【讨论】:

    • 你能提供这个例子吗,因为我试过了,它对我不起作用
    • Petr,您的解决方案不会导致多次调用createDeployment 方法(每个子类调用一次)吗? Ranu 试图实现的目标是只部署一次。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-04-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多