Status as of today: * I have a working POC for running XWiki functional tests in various browsers (chrome and firefox FTM), using the latest Selenium and latest Chrome/Firefox. I’ll commit today or in the coming days. Ofc it requires docker to be installed so I’ll create a “docker” profile in the build so that the build doesn’t break on agents which don’t have docker installed yet. It’ll allow you to start testing it on your local machines.
* I have updated the design page at http://design.xwiki.org/xwiki/bin/view/Proposal/ConfigurationTesting Next steps: * Commit the work one (in the coming days) * I have started trying to deploy XWiki in an embedded undertow. Still not working at this stage (but I’ve progressed). I still don’t know if this is going to work or not. I hope it will since that would save me from having to write the equivalent of the Packager plugin. * Integrate ability to choose the DB to use for the tests. Feedback most welcome. Thanks -Vincent > On 27 May 2018, at 21:44, Vincent Massol <[email protected]> wrote: > > Hi devs, > > I’d like to give you some info about what I’ve started working on and verify > you like the direction I’m proposing to take for the future of functional > testing on the xwiki project. > > Needs > ===== > > * Be able to test xwiki on multiple environments > > Context > ====== > > * Right now we test only in 1 env (Jetty+HSQLDB) > * I've started some docker images in xwiki-contrib > * I’ve also started some experiment through > https://jira.xwiki.org/browse/XWIKI-14929 and > https://jira.xwiki.org/browse/XWIKI-14930 (see also email thread > "[Brainstorming] Implementing multi-environment tests - Take 2” and > https://github.com/xwiki/xwiki-platform/compare/XWIKI-14929-14930). This > email supersedes the "[Brainstorming] Implementing multi-environment tests - > Take 2” thread. > * Initially I imagined doing the multi env testing in Jenkins thanks to the > Jenkins Docker plugin/library. However I realized that it would be better to > be able to run that on the dev machines and thus decided instead to implement > it at the maven level thanks to the Fabric8 Maven plugin. > > Proposal > ======= > > * The new proposal is to stop trying to do it at the maven level and instead > do it at the Java level, i.e. be able to control (start/stop the various > docker images for the DB, Servlet Container/XWiki and the Browser from within > the java junit/selenium tests). > * There are several java libraries existing to control docker from within > java. For example: https://github.com/docker-java/docker-java > * I got convinced when finding this awesome library that combines > JUnit5/Selenium and Docker for multi-browser testing: > https://bonigarcia.github.io/selenium-jupiter/ > ** Note that this relies on the browser docker images provided by the > Selenoid project: https://aerokube.com/selenoid/latest/ > * So the idea is to extend that to be able to control the other 2 docker > containers for the DB + ServletContainer/XWiki. > > Pros > ==== > > * Very simple setup to start/stop functional tests (and to debug them). Only > requires Docker to be installed locally. > * Very simple to test any combination of DB/Servlet Container/Browser. > * Always up to date images with the latest version (we can depend on LATEST > of Browser images, MySQL, Tomcat, etc). > * Using JUnit5 and thus the latest features > * Moving to the latest Selenium version too > * Also supports manually executing tests in a given running xwiki instance > > Implementation > ============ > > Something like: > > --> XWikiSeleniumExtension extends SeleniumExtension > > @ExtendWith(XWikiSeleniumExtension.class) > public class Test > > @Test > public void xxx(XWikiWebDriver driver) > { > … > } > > And be able to configure the DB to use, the Servlet container to use, and the > packaging to use from system properties (and also from the test itself, see > https://bonigarcia.github.io/selenium-jupiter/#generic-driver). > > The idea is to reimplement the XWiki Packaging Maven plugin as a java lib > using Aether and to just start our functional tests using pure junit without > anymore more. All the hard work will be performed by the JUnit5 extension > (create the packaging if not already exist, update some part of it if files > have been modifier, start/stop DB+Servlet+Browser+Selenium, download the > docker images). > > The packaging will be configurable. Some ideas of options: > * use an already running xwiki instance > * docker created from full XS zip from URL > * docker created from XS zip from maven artifact > * docker created from computed based on pom in current dir > > Migration > ======= > > Once a first version is working, it’ll be easy to use it only for a single > platform functional tests and then slowly move each module to use the new way > for its functional tests. > > WDYT? > > I’m planning to continue my investigation/development of this. So please let > me know if you have feedback. > > Thanks > -Vincent > >

