В моем mvc образце я пытался использовать Arquillian Drone и Arquillian Graphene для тестирования веб-страниц , но он не работал при тестировании на встроенных / управляемых Payara .
@RunWith(Arquillian.class)
public class HomeScreenTest {
private static final Logger LOGGER = Logger.getLogger(HomeScreenTest.class.getName());
private static final String WEBAPP_SRC = "src/main/webapp";
@Deployment(testable = false)
public static WebArchive createDeployment() {
File[] extraJars = Maven.resolver().loadPomFromFile("pom.xml")
.resolve(
"org.eclipse.krazo:krazo-jersey:1.0.0"
)
.withTransitivity()
.asFile();
WebArchive war = ShrinkWrap.create(WebArchive.class)
.addAsLibraries(extraJars)
.addPackage(Bootstrap.class.getPackage())
.addPackage(Task.class.getPackage())
.addPackage(MvcConfig.class.getPackage())
.addPackage(TaskController.class.getPackage())
//Add JPA persistence configuration.
//WARN: In a war archive, persistence.xml should be put into /WEB-INF/classes/META-INF/, not /META-INF
.addAsResource("META-INF/persistence.xml", "META-INF/persistence.xml")
// Enable CDI
.addAsWebInfResource(EmptyAsset.INSTANCE, "beans.xml")
// add template resources.
.merge(ShrinkWrap.create(GenericArchive.class).as(ExplodedImporter.class)
.importDirectory(WEBAPP_SRC).as(GenericArchive.class),
"/", Filters.include(".*\\.(xhtml|css|xml)$")
);
LOGGER.log(Level.INFO, "deployment unit:{0}", war.toString(true));
return war;
}
@Drone
private WebDriver browser;
@ArquillianResource
private URL deploymentUrl;
@Page
HomePage home;
@Test
@RunAsClient
public void testHomePage() {
final String url = deploymentUrl.toExternalForm();
LOGGER.log(Level.INFO, "deploymentUrl{0}", url);
browser.get(url+"/mvc/tasks");
home.assertTodoTasksSize(2);
}
}
@Location("mvc/tasks")
public class HomePage {
@FindBy(id = "todotasks")
private WebElement todotasks;
@FindBy(id = "doingtasks")
private WebElement doingtasks;
@FindBy(id = "donetasks")
private WebElement donetasks;
public void assertTodoTasksSize(int size) {
assertTrue(todotasks.findElements(By.cssSelector("li.list-group-item")).size() == size);
}
public void assertDoingTasksSize(int size) {
assertTrue(doingtasks.findElements(By.cssSelector("li.list-group-item")).size() == size);
}
public void assertDoneTasksSize(int size) {
assertTrue(donetasks.findElements(By.cssSelector("li.list-group-item")).size() == size);
}
}
В последней версии я попытался вместо этого использовать HtmlUnit, но он работает на управляемых сбоях payara на встроенных payara, проверьте журнал сборки .
@RunWith(Arquillian.class)
public class HomeScreenTest {
private static final Logger LOGGER = Logger.getLogger(HomeScreenTest.class.getName());
private static final String WEBAPP_SRC = "src/main/webapp";
@Deployment(testable = false)
public static WebArchive createDeployment() {
File[] extraJars = Maven.resolver().loadPomFromFile("pom.xml")
.resolve(
"org.eclipse.krazo:krazo-jersey:1.0.0"
)
.withTransitivity()
.asFile();
WebArchive war = ShrinkWrap.create(WebArchive.class)
.addAsLibraries(extraJars)
.addPackage(Bootstrap.class.getPackage())
.addPackage(Task.class.getPackage())
.addPackage(MvcConfig.class.getPackage())
.addPackage(TaskController.class.getPackage())
//Add JPA persistence configuration.
//WARN: In a war archive, persistence.xml should be put into /WEB-INF/classes/META-INF/, not /META-INF
.addAsResource("META-INF/persistence.xml", "META-INF/persistence.xml")
// Enable CDI
.addAsWebInfResource(EmptyAsset.INSTANCE, "beans.xml")
// add template resources.
.merge(ShrinkWrap.create(GenericArchive.class).as(ExplodedImporter.class)
.importDirectory(WEBAPP_SRC).as(GenericArchive.class),
"/", Filters.include(".*\\.(xhtml|css|xml)$")
);
LOGGER.log(Level.INFO, "deployment unit:{0}", war.toString(true));
return war;
}
@ArquillianResource
private URL deploymentUrl;
private WebClient webClient;
@Before
public void setUp() {
webClient = new WebClient();
}
@After
public void tearDown() {
webClient.close();
}
@Test
@RunAsClient
public void testHomePage() throws IOException {
final String url = deploymentUrl.toExternalForm();
LOGGER.log(Level.INFO, "deploymentUrl{0}", url);
final HtmlPage page = webClient.getPage(url + "/mvc/tasks");
assertTrue(page.asText().contains("first task"));
final DomElement todotasks = page.getElementById("todotasks");
DomNodeList<DomNode> nodes = todotasks.querySelectorAll(".list-group-item");
assertTrue(nodes.size() == 2);
}
}
Я создал еще один Пример JakartaEE Server Faces , использующий аналогичные тестовые коды, тесты пройдены, как и ожидалось.
Я изучил исходные коды krazo, похоже, что тестирование основано на HtmlUnit, есть ли образцы Jakarta MVC, которые запускают тесты на серверах, совместимых с Jakarta EE, например Glassfish / Payara?