8 Replies Latest reply on Apr 18, 2013 7:12 AM by bmajsak

    Arquillian and Thucydides integration


      This thread documents the ongoing effort to integration Arquillian and Thucydides.


      Last year during Devoxx, Aslak and I met up with John Smart to discuss and hack on an integration between Arquillian and Thucydides. That gave us some idea of changes that needed to happen on both ends to make the integration possible. The integration has since evolved, but there is still work to be done.


      About Thucydides


      Thucydides is a tool that supports the practice of Acceptance Test Driven Development (ATDD) to develop browser-based tests, using WebDriver as a backend. It encourages developers write more flexible and more reusable WebDriver-based tests, and also to generate documentation about your acceptance tests, including a narrative description of test, along with the corresponding screen shots, and also high-level summaries and aggregations of the test results.


      Integration benefits


      The capabilities of Thucydides complement Arquillian well by introducing a narrative to the tests that describes the business requirements and rich reports to indicate progress of development as a summary of which requirements have been completed, which ones remain and which implementations are failing expectations.


      Arquillian complements Thucydides by managing the container lifecycle and application deployment, concerns that would otherwise have to be managed by the build lifecycle when using Thucydides alone. There is additional benefit to bring Arquillian Drone into the fold to handle the configuration and control of WebDriver. This secondary integration broadens the capabilities of the browser controller in Thucydides and unifies the developer experience between plain Arquillian Drone tests and Thucydides tests when interacting with the browser automation API (embracing the concept that each tool should focus on doing one thing well).


      Alex Soto presented some of these benefits in his talk at LinuxTag 2012 about how to test enterprise Java applications. You can watch the video on YouTube.


      Current status of effort (Oct 2012)


      John has offered to host the integration in the Thucydides code base, which is fantastic. There are some prototypes underway, documented below. Alex Soto has also expressed interest in helping with the integration.


      Vineet has started experimenting with the integration here:



      Vineet reports he is picking off from where he last worked on the ATDD/BDD frameworks - Thucydides and JBehave.


      Alex Soto used this integration in his talk at LinuxTag 2012. Aslak and Bartosz also used this integration as the basis for the updated Beer Advisor demo app for their JavaZone talk in September of this year:



      The demo uses Thucydides WebDriver factories instead of Drone, and has a ArquillianEnricher JUnit Rule to delegate to the ArquillianListener to do the normal test class enrichment/injection. A JUnit Rule is necessary due to missing hooks in Thucydides, but in general it works nicely with Arquillian controlling the Container and Deployment. Here's an example test case that shows the result of the integration.


      It's nice to know that a more basic integration is possible and getting Drone in there is an optional (but valuable) bonus step. Speaking of Drone...


      Drone SPI update


      Karel brought up that Drone currently needs better SPI for better integration with Arquillian Graphene. He'll be working with Jan to make it happen in 1.2.0.Final. He also believes we should the Drone SPI useful for Thucidices at the same time. If you miss any event/spi in Drone, please shout loud now.


      Sharing the progress


      I think we should make a blog post that gives a report on the integration. It would start by laying out value proposition of Arquillian, Arquillian Drone and Thucydides, then proposes how they could leverage each other (similar to this post). The blog would finish by identifying what integration points must be used to bring them together and where necessary hooks are still missing. In addition to getting people excited about the technologies, the post would also help get participants up to speed quickly if they want to help.


      We can use this thread as raw material for the blog post, which would present it in a more consumable fashion, so the more info you can dump here, the better.