我们正在使用 arquillian-junit-container 1.0.0 最终版本进行 Junit 测试。
我们有这么多的测试类和每个测试类作为@Deployment 方法,所以当我一起运行所有测试时,它会产生内存和性能问题。
任何人都可以通过告诉我们如何避免每个类的多次部署来帮助我解决这个问题。我们如何在 Arquillian 中实现所有测试用例的单一部署?
我们正在使用 arquillian-junit-container 1.0.0 最终版本进行 Junit 测试。
我们有这么多的测试类和每个测试类作为@Deployment 方法,所以当我一起运行所有测试时,它会产生内存和性能问题。
任何人都可以通过告诉我们如何避免每个类的多次部署来帮助我解决这个问题。我们如何在 Arquillian 中实现所有测试用例的单一部署?
你还不能,正式地。
创建JIRA 问题ARQ-197是为了支持针对单个部署运行多个测试类。在2010年!如果您想要此功能,请为它投票。
这是 Arquillian 投票最多的问题。它目前定于 2.0.0.CR1 版本,可能是下一个版本,但我在任何地方都找不到可以证实这一点的路线图/发布计划。
与此同时,还有 Arquillian Suite Extension(最新版本在这里)。它不是官方的,因此存在限制,但原始代码库是由 Arquillian 核心开发人员之一编写的,以证明他们最终可以支持 JUnit 套件。让这个支持成为官方的问题就在这里,是 Arquillian 投票第二多的问题。
我想你是在问为什么 Arquillian 需要在运行测试时为每个测试类部署新的战争。我有 Petr Mensik 描述的部署方法,但是当您运行测试时,每个测试类仍将部署在它自己的战争中。将它放在超类中只会从更少的行的角度简化代码。这将意味着作为子类的每个测试类都将具有相同的部署。这意味着您的部署将是超级依赖集,因此比单独部署要大得多。我认为它更容易管理,而且物有所值,尤其是对于大型项目。
要回答您的问题,您似乎无法对测试进行分组并部署一场战争来进行测试,直到 2.0 版(今年年底到期?)。
为什么你应该在每个类中都有部署方法?我使用 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,你不会在 Arquillian 中看到这个功能,直到版本 2.0.0.CR1。所以我上面提到的代码是你现在能得到的最好的:-)