Monday, May 28, 2012

A good test automation framework

Today, I like to mention a little about test automation frameworks.

If you're looking at any kind of job posting (company career site, monster.com, and etc) for a software test engineer now, you will see almost all the posting mention some level of experiences in test automation framework as a requirement. And actually I do use test framework for my testing and it is very useful tool that resolves several limitations of manual testing.

So I thought it is worthwhile to put my thought about what a good test automation framework is in my blog. First, let me scope the area of discussion since test automation framework is a pretty big topic. I'm going to set aside the discussion around pros and cons of test automation in software testing since that's not my main point of this article. And I'm talking about your work related test automation framework not the generic programming language specific test framework. For example, my test automation framework is built on top of JUnit or TestNG. JUnit and TestNG are also test automation frameworks, but those frameworks do not have the specific business logic of my testing.

OK. Let's start. What is test automation frameworks?  Wikipedia mentions "A test automation framework is a set of assumptions, concepts and tools that provide support for automated software testing." My simple definition is "a test automation framework is a program that helps testers execute and validate test cases(test scenarios). So it is a program that helps software testing. The meaning of "help" will be saving time, being more efficient in testing process, gathering useful data easily after test execution and etc compared to the manual human test execution. But it is a program, which means someone has to design, implement and maintain. This brings a very important ground rule of test automation. Benefit of using test automation should always be greater than the effort of designing, implementing and maintaining the test automation. Otherwise there is no point using test automation beside you being cool. :)

I believe having a good test automation framework is to maximize the benefits of test automation and minimize the effort of implementing and maintaining it. So let me address the characteristics of a good test automation framework.
  1. Have a clear strategy and everyone should be on the same page. This is the most important and most effective way to maximize the benefit of using the test automation framework. There are many different ways to design and implement test automation frameworks. And it is REALLY hard to come up with one solution that will satisfy every test engineers, which means when a test architect or experienced SDET come up with a framework, he/she should explain the strategy of the test automation and help everyone in the team understand how it works and how to use it. Once everyone is on the same page (know how it works and how to use), implementing test cases (scenarios) is much faster and maintaining the framework is much easier. By following a certain rule or instruction, test writers are less distracted and he/she can understand others code very easily. And when it comes to a situation where the current approach does not fit, it is much easier to notice and notify test automation designer (architect or SDET) to resolve the issue with proper solution.
  2. Favor object composition over class hierarchy. This is one advice from Gang of four design pattern. One of the common mistake with test framework is that some framework base class provide too many functionality and become giant class (a few thousand lines of code). This approach works fine at the beginning but it does not scale very well and becomes very complex code base as number of tests grows to handle various test conditions, error scenarios and exceptional cases. One key characteristics of good test framework is to provide flexibility to test writers. Test writers should be able to choose classes or modules they need to execute one test case. Just Mix and Match for their tests.
  3. Separation between test execution and validation. This is more about validation code being independent from test execution. It also means validation code by itself does not contain any context about test cases. What this allows to the framework is that you can package one logical chunk of  validation into one class. It will takes some parameters as source of validation. You call validate() method and it will simply return true or false. No decision making process here. For example, if error expecting flag is set do this. if some other case do that. NO. JUST DO THE VALIDATION. What does this allow test writers? You gather source of validation during test execution and pick and construct validation instances you need from pool of validation classes. DO NOT let the validation code to be workflow. LET IT BE collection of appropriate validations for each test case. This promotes great re-usability of the code and less complex code.
  4. Build the test framework to support the way test execution steps are defined. The ideal framework, in my opinion, is that defined (written or thought) test execution steps are transformed to test automation code with 1:1 mapping. This seems pretty easy to do but this requires thoughtful design to expose natural language like method names and encapsulate well structured implementation details. One way to think about this is that you're providing framework for test writers who are not as technical as you. This promotes great readability of the code as well. 
  5. Be cautious about re-factoring codes. Re-factoring is useful work. It's a good process that turns spaghetti codes to well-structured code. But often times, test automation writers get confused by this concept where he/she does not understand the difference between test automation code and development code. If you look closely on test automation code, there are two big parts: one is test execution steps related part and the other is test automation framework part that supports test execution step code. Re-factoring should largely applied in the latter part of automation code. Here is the common problem that I've seen. At first, test cases that a tester is implementing is very similar beside some inputs, config, or environment, so he re-factor the common piece in one method. Looks good. On the next iteration or release, he adds more test cases. He notices a little variation of the execution step or input, so he add some conditionals (if/switch statement) to the common method. As more iteration or releases come by, the common method becomes more and more complex. Complexity is not the only problem. His thought process of executing test steps is restricted by existing code base and he is trying to fit his thought on that code path. Also it is very hard for other testers to read and follow the logic. Refactoring test execution steps code can be very dangerous because it restricts testers thought process, makes test automation code less flexible, and makes readability of the code very bad and it hurts other test writers to take over. I admit that it is hard process because sometime it is hard to draw a line between test step code and supporting code. The key is to have test execution steps to be flexible and to have supporting code to be well structured.
  6. Pinpointing the failure is more important than handling error gracefully. Do not be scared of null pointer exception. Automation code is not production code. I don't think this needs a lot of explanations
  7. Minimize bootstrap code. Setup methods like @BeforeClass in JUnit or some sort of prep code runs before the test run is useful. But it also prevent your framework from being flexible. And it also make the framework very heavy. Sometimes you just want to check a simple validation that was used in test automation for other purpose. Well modularized code does not need much bootstrap code. You should be able to run your test in main method if your automation framework is well modularized.
If you want more fundamentals around test automation check this one.  Thoughts around test automation framework
Here is  part2 with more detailed explanation



27 comments:

Anonymous said...

also test your list items ;)

Unknown said...

A very good and easy explaination of Test Automation Framework,,,Here is what Calsoft is doing in Test Automation and helping clients in building test automation strategies..

http://www.calsoftinc.com/test-automation.aspx

Pegasie said...

Thanks for sharing the post. This post having some good testing automation strategies shared. This framework will helps the user to make the system perfect. Really nice post shared..

Automation Test

Jenya Oil Pumps said...

I like your article and it really gives an outstanding idea that is very helpful for all the people on web.

Rachael@Faucet Valve said...

I truly like to reading your post. Thank you so much for taking the time to share such a nice information.

Unknown said...

I like this topic!

Selenium training chennai said...

Your information about automation is really interesting. Also I want to know the latest new techniques which are implemented in automation. Please update it in your website.

loadrunner training chennai said...

Thanks for sharing this article.

Testing training in chennai said...

Nice article. Thanks for sharing

Anonymous said...
This comment has been removed by a blog administrator.
Unknown said...
This comment has been removed by a blog administrator.
Rahul said...

Thank you for the informative post. It was thoroughly helpful to me. Keep posting more such articles on automation training in Chennai and enlighten us.

Unknown said...

Assam 2564 Police Constable Recruitment 2016 Apply Online


Really appreciate you sharing this post.Much thanks again. Fantastic............

Anna Schafer said...

That fear, so prevalent in the early days of robotics, today is misplaced. What should really give workers pause is when their companies won't use robots and other automated technologies to become stronger global competitors.projector installation toronto

manikanta said...

You never know what the correct interval is. The software may be downloading something huge that takes over 500 ms. There are several scripts on our business's inner site that consider several seconds in IE.

Unknown said...

The device was afterwards commended using the title “Selenium Core”.

Selenium IDE (Selenium Integral Development Atmosphere)

Selenium IDE was created by Shinya Kasatani. Whilst learning Selenium Primary, they recognized this JavaScript signal could be prolonged to produce a growth atmosphere (IDE) which may be connected to Mozilla Firefox. This IDE was with the capacity of documenting and enjoying again the consumer steps on the Opera occasion to which it had been blocked-in.

Unknown said...
This comment has been removed by the author.
Anonymous said...



Thank you. I just wanted to know where to ship it since I know now to keep producing it

Software testing training in trichy

Software Development Company said...

Hello,
The informative Article on A good test automation framework is nice give detail information about it.Thanks for Sharing the information about Automation Framework .It's amazing to know about it. Software Testing Company

Sivanandhana Girish said...
This comment has been removed by the author.
Edward said...

Really nice. I am expecting much more information regarding the testing methodologies and solutions.

Performance Testing

Game QA

sheela rajesh said...
This comment has been removed by a blog administrator.
Edward said...

Really nice topics you had discussed above. I am much impressed. Thank you for providing this nice information here

Software Testing Company

PS4 Game Tester

Game Testing Services

Video Game Testing Companies

Manipriyan said...
This comment has been removed by the author.
Rajesh said...

I was very interested in the article , it’s quite inspiring I should admit. I like visiting your site since I always come across interesting articles like this one. Keep sharing!
Software Testing Training in Chennai | Software Testing Training in Anna Nagar | Software Testing Training in OMR | Software Testing Training in Porur | Software Testing Training in Tambaram | Software Testing Training in Velachery

anand said...

very usefull.
Software Testing Training in Chennai | Certification | Online Courses



Software Testing Training in Chennai | Certification | Online Training Course | Software Testing Training in Bangalore | Certification | Online Training Course | Software Testing Training in Hyderabad | Certification | Online Training Course | Software Testing Training in Coimbatore | Certification | Online Training Course | Software Testing Training in Online | Certification | Online Training Course

Hugo said...

Wow, What a Excellent post. I rceally found this to much informatics. It is what i was searching for.I would like to suggest you that please keep sharing such type of info.Visit here for Penetration testing servicces