Arquillian Extension

Persistence

・Database seeding using DBUnit(XML, XLS, YAML, JSON)/SQL scripts

@Test

@UsingDataSet("datasets/users.yml")

@ShouldMatchDataSet("datasets/expected-users.yml")

public void shouldXxx() throws Exception {

// given

final String expectedPassword = "...";

final User user = em.find(User.class, 2L);

// when

user.setPassword(expectedPassword);

em.merge(user);

// then

assertThat(user.getPassword(), is(expectedPassword));

}

Drone

・Integrates WebDriver

・Compatible with WebDriver(Selenium 2), Selenium 1 and Selenium Grids

@Deployment(testable = false)

public static WebArchive createArchive() {

...

}

@ArquillianResource

URL contextPath;

@Drone

WebDriver browser;

@Test

public void shouldXxx() {

browser.findElement(By.id("xxx")).click();

...

}

Graphene

・Extension for WebDriver

・PageObjects & PageFragments

・Ajax support

@Drone

WebDriver browser;

@Page

HomePage homePage;

@Test(expects = XxxException.class)

public void shouldXxx() {

homePage.login(...);

}

Warp

・Client-side request

・Support for JSF, JAX-RS, Spring MVC

import org.jboss.arquillian.container.test.api.RunAsClient;

import org.jboss.arquillian.drone.api.annotation.Drone;

import org.jboss.arquillian.test.api.ArquillianResource;

import org.jboss.arquillian.warp.Activity;

import org.jboss.arquillian.warp.Inspection;

import org.jboss.arquillian.warp.Warp;

import org.jboss.arquillian.warp.WarpTest;

import org.jboss.arquillian.warp.servlet.AfterServlet;

import org.jboss.arquillian.warp.servlet.BeforeServlet;

import org.jboss.shrinkwrap.api.asset.Asset;

import org.jboss.shrinkwrap.api.asset.StringAsset;

import org.jboss.shrinkwrap.descriptor.api.Descriptors;

import org.jboss.shrinkwrap.descriptor.api.webapp30.WebAppDescriptor;

import org.jboss.shrinkwrap.descriptor.api.webcommon30.WebAppVersionType;

import org.openqa.selenium.WebDriver;

@RunWith(Arquillian.class)

@WarpTest

@RunAsClient

public class WebFilterTest {

@ArquillianResource

private URL contextPath;

@Drone

private WebDriver webdriver;

@Deployment

public static WebArchive createDeployment() {

WebArchive war = ShrinkWrap.create(WebArchive.class)

.addClass(MyFilter.class)

.setWebXML(generateWebXMLAsset());

System.out.println(war.toString(true));

return war;

}

private static Asset generateWebXMLAsset() {

WebAppDescriptor wad = Descriptors.create(WebAppDescriptor.class);

wad.version(WebAppVersionType._3_0)

.createFilter()

.filterName(MyFilter.class.getSimpleName())

.filterClass(MyFilter.class.getName())

.createInitParam()

.paramName("enabled")

.paramValue("false")

.up()

.up()

.createFilterMapping()

.filterName(MyFilter.class.getSimpleName())

.urlPattern("/*")

.up();

System.out.println(wad.exportAsString());

return new StringAsset(wad.exportAsString());

}

@Test

public void testDoFilter() {

Warp.initiate(new Activity() {

@Override

public void perform() {

System.out.println("URL: " + contextPath.toString());

webdriver.navigate().to(contextPath);

}

}).inspect(new Inspection() {

@ArquillianResource

HttpServletRequest request;

@ArquillianResource

HttpServletResponse response;

@BeforeServlet

public void before() {

List attributeNames

= Collections.list(request.getAttributeNames());

System.out.println("Attributes: "

+ Arrays.toString(attributeNames.toArray()));

String attribute

= (String) request.getAttribute("X-ATTRIBUTE");

...

}

@AfterServlet

public void after() {

System.out.println("Headers: "

+ Arrays.toString(response.getHeaderNames().toArray()));

String header = response.getHeader("X-HEADER");

...

}

});

}

}

Droidium

・Android browser, Android UI

・Create AVD(Android Virtual Device)

Performance

・Timeouts, execution time

Microbenchmark

・Performance test

@Test

@MicroBenchmark(threads = 10, iterations = 1000, warmupIterations = 1)

@MicroBenchmarkAssertion(total = 5000, average = 25) // ms

public void testThroughputAndAverageResponseTime() {

...

}

★カスタム拡張

META-INF/services/org.jboss.arquillian.core.spi.LoadableExtension

com.xxx.CustomArquillianExtension

import org.jboss.arquillian.core.spi.LoadableExtension;

import org.jboss.arquillian.core.api.annotation.Observes;

import org.jboss.arquillian.core.api.event.ManagerStarted;

import org.jboss.arquillian.config.descriptor.api.ArquillianDescriptor;

public class CustomArquillianExtension implements LoadableExtension {

public void register(ExtensionBuilder builder) {

builder.observer(CustomSuite.class);

}

public static class CustomSuite {

...

public void startup(

@Observes(precedence = -100) ManagerStarted event,

ArquillianDescriptor descriptor) {

...

String className = descriptor.extension("suite")

.getExtensionProperties().get("deploymentClass");

...

}

...

}

}

arquillian.xml

<arquillian ...>

...

<extension qualifier="suite">

<property name="deploymentClass">

com.xxx.Deployments

</property>

</extension>

...

</arquillian>

public class Deployments {

@Deployment

public static Archive<?> deployment() {

...

}

}