In my last post, I shared my experience on having a career path as software testing domain expert. I would like to focus more on the other category (testing technical experts) in this post. This post will be more inclined into test automation discipline and I am going to discuss more areas of learning path in that direction.
What are the skills need to be developed to became a testing technical expert?
Test automation is not just to record and play back some user actions but much beyond that. If you are really serious about having a career in test automation discipline, here are few my tips from me to start with.
1) Build your problem-solving capability
- Start looking for problems in and around you. That can be simple ones like helping your friend to convert 1000 contacts from a pdf to an excel sheet or a complete solution of one click test environment creation.
- Evaluate the selected problems and break it down into smaller parts.
- Try to find out the different ways of solving each problem without using any specific programming language - you are building the logic now.
- Compare and find out the most suitable solution.
- Create list of problems and solutions ready which can be implemented using any programming language.
- Write test cases to validate your solution, identify the test data.
2) Select and learn a programming/scripting language - The selection of a programming/scripting language to learn depends on your interest and any future opportunity where you can use your knowledge. For example, if your goal is to learn tools like selenium give preference to the supported bindings for selenium. If QTP is the tool your company is using for automation, it will be helpful if you choose VB scripting. My suggestion will be to start with any one object oriented programming language(JAVA, C# etc) and any one scripting language ( python, ruby etc).
- Identify the language you would like to learn.
- Make yourself comfortable with the IDE of the selected language.
- Spend some time to get the basic programming concepts likes variables, statements, conditions, loops, input and output, data structures, files etc.
- Go back to your list of problems and try to relate if same can be fixed with whatever you have learned so far.
- Identify the areas to be learned next. For example, if the problem you have identified to solve needs iteration, data structure, synchronization etc find out how the programming language you have selected will help you to solve it.
- Practice and improve your learning day by day. Once you are comfortable with basics start learning advanced concepts and do apply the same to solve the problems identified by you before. Keep updating your problems list with more complex problems as and when you encounter any.
3) Learn to use version control system - Version control system will help you track down and maintain your test artifacts (test scripts, utilities, framework modules etc). You can trigger tests from continuous integration environment linked with the version control system and publish the test reports automatically. Learning tools like SVN, Git etc will help you in this regard. Some basic common concepts you should consider while learning any version control tool like - repository, branch, remote, local, pull, push,merge, diff, commit etc. You can learn and apply those concepts practically by creating an account in git hub.
4) Learn a database - All application you test comes with a backend database, so its important for you to learn the basics of database as well. You can select any one from the list of most widely used databases. My recommendation will be to learn one structured database (MySQL, Oracle) and one NoSQL database (MongoDB).
5) Learn an automation tool - There are different tools available for solving different problems like selenium (web), coded UI (web/desktop/mobile), QTP(web/desktop), appium (mobile) etc. If you are learning a new tool you can consider following details:
- Understand the ecosystem - how the tool works, what language/platform/dependency it has, installation process, api documentations etc.
- Start exploring the tool and understand how it interact with the AUT.
- Once you are familiar with the tool , next step will be to get an understanding of test frameworks and how it helps in making your tests more robust and maintainable.
So far I have explained a generic way of learning test automation. Let's have a look into the different specific learning paths that exists in this area.
Functional testing
- Web based application (Selenium/CodedUI + Java/C#/Ruby/Python)
- Responsive design (Galen framework)
- Web services (Rest assured /Request/Citrus/Pact)
- Mobile application (Appium, Calabash, Xamarin)
Non-functional testing
- Performance testing - Response, Load, Stress, Endurance, Reliability (Jmeter/Neoload)
- Security testing (checkmarx, Fortify, Zap)
- Database testing (DBFit,DBUnit, NDbUnit, SQLUnit)
Dev ops
- Continuous Integration (CI)
- Application Performance Mgmt (APM)
- Continuous Deployment (CD)
- Release Management
- Configuration Management
This is just an overview of building a career path in software testing as a technical expert. The list may go longer from here. Please share your experience and comments in the same line.