JakartaEE MVC тест с использованием Arquillian Drone и Arquillian Graphene - PullRequest
0 голосов
/ 08 февраля 2020

В моем 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?

...