ApacheCON slides: “Enterprise Build and Test in the Cloud” and “Eclipse IAM, Maven integration for Eclipse”

Here you have the slides from my talks at ApacheCON

Enterprise Build and Test in the Cloud

Building and testing software can be a time and resource consuming task. Cloud computing / on demand services like Amazon EC2 allow a cost-effective way to scale applications, and applied to building and testing software can reduce the time needed to find and correct problems, meaning a reduction also in time and costs. Properly configuring your build tools (Maven, Ant,…), continuous integration servers (Continuum, Cruise Control,…), and testing tools (TestNG, Selenium,…) can allow you to run all the build/testing process in a cloud environment, simulating high load environments, distributing long running tests to reduce their execution time, using different environments for client or server applications,… and in the case of on-demand services like Amazon EC2, pay only for the time you use it.
In this presentation we will introduce a development process and architecture using popular open source tools for the build and test process such as Apache Maven or Ant for building, Apache Continuum as continuous integration server, TestNG and Selenium for testing, and how to configure them to achieve the best results and performance in several typical use cases (long running testing processes, different client platforms,…) by using he Amazon Elastic Computing Cloud EC2, and therefore reducing time and costs compared to other solutions.

Download PDF

Eclipse IAM, Maven integration for Eclipse

Eclipse IAM (Eclipse Integration for Apache Maven), formerly “Q for Eclipse”, is an Open Source project that integrates Apache Maven and the Eclipse IDE for faster, more agile, and more productive development. The plugin allows you to run Maven from the IDE, import existing Maven projects without intermediate steps, create new projects using Maven archetypes, synchronize dependency management, search artifact repositories for dependencies that are automatically downloaded, view a graph of dependencies and more! Join us to discover how to take advantage of all these features, as well as how they can help you to improve your development process.

Download PDF

Enterprise build and Test in the Cloud with Selenium II

In my previous entry I introduced Selenium and a setup for running automated builds in the browser.

How can you achieve the multi-browser multi-environment testing?
There is a subproject of Selenium called Selenium-Grid that works in a heterogeneous cluster of machines. Install a selenium hub in one server and start the selenium remote clients in the machines with the environments you want to test. For instance you can have a windows machine with IE 7 and Firefox 3, another one with IE 6, a linux machine with Firefox 2 and a OS X with Safari. There’s no limit in the number of machines that you can attach to the hub, and the hub redirects the tests to the machine that fulfills the environment you request in your tests.

At this point you can have a very nice integration testing environment, with the continuous integration server deploying your app every day, and running the Selenium tests in several machines with different operating systems and browsers.

Now the bad news, you may have noticed already that having a bunch of machines dedicated to QA just to run once a day can be quite expensive. Another issue is that Selenium tests, as they run in the browser, are not particularly fast.

But it’s a great use case for cloud computing. Using Amazon EC2 you can have machines with different environments (Linux, Windows, Solaris,…) and browsers (IE, Firefox,…) and pay just for the time they are running. Let’s say you need 5 combinations of OS/browser and your tests take 2 hours in each of them. If you run the tests once a day you could end paying

5 machines * 30 days * 2 hours * 0.10 $/hour (approx) = 30$ month, results in 2 hours

compare it with the cost of 5 machines, power, space, hardware maintenance,…

Not only that, but you could parallelize your tests, using Selenium with TestNG for instance, and get the results faster. Particularly, using EC2, if you start twice as many machines to get the results in one hour instead of two, you would pay

10 machines * 30 days * 1 hours * 0.10 $/hour (approx) = 30$ month, results in 1 hour

exactly the same!

And if you need to really really get those results fast, you are not constrained by your hardware

100 machines * 1 day * 1 hours (the minimum charge is one hour) * 0.10 $/hour (approx) = 10$ day, but with results in 6 minutes

assuming that your tests are split and can be run properly in parallel.

You can see a demo of how does it work in our Maestro S+ page. Obviously you can set this environment up yourself, but if you need help we can assist you setting the environment up, creating an outsourced on-demand QA team, or subscribe to a fully hosted service where we will handle all your continuous integration and testing needs using open source, Apache licensed, software, with a continuous integration server, Apache Continuum, artifact repository, Apache Archiva, and a list of browsers and environments to test on that we’ll maintain for you, and paying just for the time you need them.

Enterprise build and Test in the Cloud with Selenium I

I introduced Amazon Web Services and Cloud computing in previous posts (Amazon Web Services: an introduction, habemus Windows, tools), now let’s get full advantage of them in a practical application.

For those not familiar with Selenium, it’s a testing library that allows you to write integration tests to run in the browser, and when I say in the browser I mean it, you can tests how web applications behave when using different browsers: Internet Explorer, Firefox, Safari,… and we all know how painful cross-browser compatibility can be.

With Selenium you can write the tests in different languages: Java, Ruby, Groovy,… but, and this is a huge plus, you can also record them in Firefox using the Selenium IDE AddOn, and then run them with playback or export them to any of the languages supported.

Now follow me to this scenario. You have a team of developers writing a webapp. You can take anybody with a minimum experience (an user!) and tell them to use the site while SeleniumIDE records what they are doing. Then export the recording and add it to your integration builds to make sure it doesn’t break in future developments. Imagine also what you could achieve with experienced QA people, that don’t need to be developers at all nor know the internals of your app, and that can apply QA practices, trying to make your webapp break in any possible way. Sounds interesting? Keep reading

Let’s say that the site needs to be supported in different browsers too, Internet Explorer, Firefox and Safari. With Selenium you can run the same tests previously recorded against any browser.

At this point you have a development practice where developers develop, and a QA team that can be just test experts, not developers, either inside or outside your company or department, recording and running tests using only the requirements. Not a bad thing to have, but let’s make it better using automation.

Let’s assume you already have a working automated build and continuous integration, I know for many people is a big assumption, but let’s have hope ;), and assume you are using Maven and Continuum, not necessary, but that’s what I’m more familiar with. It is pretty easy to add Selenium testing to run as part of the build. With the Selenium Maven plugin you can start the Selenium server, launch the tests that will run the browser and execute the in-browser testing, and stop Selenium server at the end. When you have that running on Maven is straightforward to get it working in Continuum. For the gory technical details you can read my previous post Functional testing with Maven, Cargo and Selenium.

Will continue in my next entry

Amazon Web Services: tools

Second entry in the series: Amazon Web Services: an introduction

Amazon provides some tools to interact with its Web Services, and many others exist provided by 3rd parties. Here is my selection

S3 tools

JetS3t

JetS3t is a free, open-source Java toolkit and application suite for the Amazon Simple Storage Service (Amazon S3). The toolkit provides Java programmers with a powerful yet simple API for interacting with S3 and managing data stored there, while the applications allow anyone to easily manage and interact with their S3 accounts.

JetS3t is composed by a java library to access S3, a command line tool to synchronize local folders to S3 (s3sync) and a GUI to upload/download files (cockpit)

EC2 tools

ElasticFox

A graphical interface to Amazon EC2 web service as a Firefox addOn, provided by Amazon

You can do pretty much everything with it, register instances, start/stop them, manage access keys, security groups, elastic ips,
EBS volumes,…

Amazon Management Console

A web based interface to Amazon EC2 launched recently by Amazon. Same functionality as ElasticFox

Amazon EC2 API tools

The command line version, you won’t need it if using ElasticFox, unless the command line is your thing

Amazon EC2 AMI tools

The Amazon EC2 AMI Tools are command-line utilities to help bundle an Amazon Machine Image (AMI), create an AMI from an existing machine or installed volume, and upload a bundled AMI to Amazon S3.

Even using ElasticFox you’ll need it in your running instances to create new images from them (only for *nix, Windows images are bundled from Elasticfox or other GUI)

EC2 services

Morph

Morph AppSpace allows you to run webapps with no effort. You provide them with a war (for Java) or your Rails, Grails or PHP app and they’ll run it for you in the cloud, with a DB (postgres or mysql) with warm backups, a webserver, continuosly monitored and a two machine cluster for load balancing and high availability, all from 1$ a day. There’s a development version to try it for free.

How it works for Java apps? You just need to access your database connection pool using JNDI. They will provide you the resource name to use.

Morph AppCloud is another product that adds more flexibility, providing a web based cluster editor where you can design your cloud just by dragging and connecting the modules provided (ie. Jetty web server, mysql master, mysql slave, load balancer,…), then just click to run it.

Disclaimer: I know the guys behind Morph and have done some work for them

Rightscale

It’s a lower level service where you can interact with all the EC2 operations. You can create images, start/stop them, health montirs,… all through their web interface. You have a developer edition to try it for free

CohesiveFT

It’s more of a provisioning system where you select components and create an image (Elastic Server) to run it in EC2, VMware, and other virtualization frameworks, and with a management web interface to start/stop the components, monitor the services running,…

They have a list of components and templates, mostly open source projects, and you can add your own too.

Amazon Web Services: habemus Windows

This is going to be a little bit out of order with my other posts about Amazon AWS, but it’s worth doing it. Amazon has launched finally the ability to run Windows images in EC2. Microsoft Windows Server 2003 actually, from 0.125$ per hour, compared to the 0.10$ for the unix/linux instances.

The instances are accessible through Windows Remote Desktop or the open source multiplatform rdesktop client. The first time you launch an image the password is generated, but you can change it for new images you make based on that one.

A nice feature that will save a lot of time is the ability of creating new Windows AMIs from the ElasticFox interface with a couple of clicks, without needing to mess with software installation in the image (more on image creation in next posts) which is way easier than the process for linux images.

You can also run Windows Server with SQL Server Standard, but watch out for the 1.10$ per hour, which makes 792$ per month that you can compare to the 6000$ processor license fee.

Previous entry: Amazon Web Services: an introduction

Next: Amazon Web Services: tools

Amazon Web Services: an introduction

This post is an introduction to Amazon Web Services, as I’ll be
writing a series of posts in the following weeks elaborating on the stuff I’ve been working on
this year.

Amazon Web Services, AWS, is a platform for infrastructure services in the cloud at very competitive prices. AWS is revolutionizing the IT services in all sorts of companies. No more
dealing with hardware, no need to have people available 24/7 to monitor
servers, no more trips to the data center, no need for the developers
to wait for days/weeks until IT can get you a specific server
platform,…

AWS is composed of

S3 is a  like a virtually infinite storage service. You can store files and pay per storage and data transfer ($0.15 per GB-month)

EC2 provides a way to have a virtual server running in a matter
of minutes. It takes an AMI (Amazon Image) stored in S3 and starts it,
giving you a public address where you can ssh to and you have your
server ready. There are many publicly available images from Amazon and
third parties, with several *nix flavors CentOS, Ubuntu, OpenSolaris… and Windows images
coming this fall. There are also images with stacks already installed, mysql, apache, ruby on rails,… If you need you can customize your running server and later capture an image to launch as many instances of it as you want, and
also considering that the image provided storage is not persistent, if
your image is stopped or dies, everything changed in the server since
you started it is lost. There are three types of servers, small, large, extra large,… with different amount of space, cpu, memory,… You pay per
type of instance, time running and data transfer, starting at $0.10 per hour.

EBS is an EC2 service that allows you to attach a virtual drive to EC2 instances, with high availability and high reliability, and size up to 1TB, providing persistent storage to the instance. The drive can be backed up to S3 too. You pay $0.15 per GB-month allocated.

SQS is a simple and scalable message queue, paying for the number of messages and data transfer (1$ gives you up to 500.000 messages)

SimpleDB is a web service for running queries on structured data in real time. Haven’t tried it at all but seems suitable if you have a huge structured database and need it to scale.

Now, why should you care about cloud computing and particularly about Amazon Web Services? well if you are in one of this cases you should definitely check it out:

  • I need a server for a few hours only: with AWS you pay per hour
  • I’m running a startup and dont have the cash up front to setup a huge infrastructure (and I don’t know if the company will go under in few months): you don’t have upfront costs, just pay for the time you use it
  • I need huge storage space requirements: you can allocate TB of space
  • I run a task that needs 24 hours to complete, but could be distributed in 24+ servers and take less than 1 hour: it will cost pretty much the same to have 1 server running 24 hours than having 24 servers running 1 hour
  • I need to scale fast: you can add servers in a matter of minutes, storage space,…
  • I need high availability and geographical distribution: Amazon provides availabilty zones, so far three for EC2 in the US East coast, and two for S3, US and Europe, most likely the possibilities will grow in the future

The next post will be about the tooling that can be used to easily manage all these services.

Next entry: Amazon Web Services: habemus Windows