There are so many resources online currently where you can learn automation with hands on exercises.
Some things you want to consider when doing this is-
-
Step 1 - Learn basic coding skills which includes HTML, CSS and JavaScript. Like most of the people in this thread recommended
-
Step 2 - Choose a tool/framework which is relevant to your project or work and try to start by writing simple tests
-
Step 3 - Have a trusted partner who has prior experience in automation to give you feedback periodically on your progress and also help you out during this venture
Once you do the above 3 steps then you should be able to do any kind of automation.
Resources which I have found useful to get started are-
HTML Tutorial
CSS Tutorial
JavaScript Tutorial
The above courses are FREE and I would recommend starting with that, then try taking the JavaScript course in Codecademy as I found it really helpful and one of the best interactive courses I ever took.
Introduction To JavaScript
It is the best $20 you will ever spend.
Also check out some testing resources I have on my website as well -
Testing Resources and Articles - Raj Subramanian
Mobile Testing Resources and Articles - Raj Subramanian.
In terms of you questions, here are my thoughts-
- I think automated and manual testing both are needed as part of of the overall software testing process. Each one has its own advantages.
A common misconception related to automation is that, it is a replacement for manual testing. On the contrary, it is actually a part of the overall testing process and manual testing is part of it. They complement each other NOT replace.
The above being said, it is important to understand the scenarios automated testing could be a good option. Here are some use cases for it-
- To automate mundane/repeatable tasks that are really time consuming to do manually
- To operate in a DevOps environment where we need automation right from the start of the SDLC; till the release and production monitoring phase
- To get quick feedback about the system when new code is checked in (new feature is implemented). We will have automated tests that get automatically triggered for every code check in
- To run several tests on a daily basis to ensure the older functionalities of the system are still working as expected
- To create Test Data that will be used for doing manual exploratory testing which is otherwise time consuming to do manually
- To test different fields with hundreds of data sets using data driven testing
- To do load/stress testing where we simulate thousands of users using the application simultaneously which would otherwise be hard to do manually
Automation is not a one size fits all solution. It is not a silver bullet that can solve all the testing problems. It is just an aid in the overall testing process. This being said, it is important to remember that, not everything can be automated and in trying to do so, we will move the focus away from actual testing and finding bugs.
There are many scenarios that cannot be automated or if automated may be unstable and provide less value. Some of them are-
- Using automation for catching rendering issues in the application (look and feel) is a bad idea. There are few tools out there which does visual validation but it is really difficult to replace humans in this aspect. For example - I had a scenario where my mobile web page looked white on one Mobile phone, whereas it looked dark grey in another mobile phone. Yes, we can try to automate this but I think humans would be better at finding these subtle differences in look and feel of the application
- Using automation to figure out an element location on a page is a bad idea. The automated tests will become unstable if we start writing tests based on x,y coordinates of elements, as the web page could be viewed in different browsers, devices and OS’s and the coordinates are going to change based on the screen size.This means the automated tests are going to be really flaky.
- Using automation to test integrated systems which involve software, hardware, web services, API’s and cloud services all communicating in real time with each other would be a bad idea. For example - How would we write an automated test which tests all the end to end scenarios of fitness trackers like Fitbit? We can try as hard as possible to simulate real human movements and mock services, but it is going to be a really difficult task to automate the entire process of a fitness tracker. We could rather have real humans do exploratory testing in parallel to some automated tests
As you can see we need manual testing in different scenarios which are hard to automate. Also, manual testing helps to explore the creativity of the tester and helps to think about different failure scenarios of the system, while automated tests are good in doing what it is told to do and repeating stuff, fast.
I recently hosted a webinar and had a discussion around automated testing with Jonathan Lipps and Phil Lew. You can check out the video here, we had some great conversations regarding common pitfalls of test automation, test strategy etc - Common Pitfalls of Test Automation
- I think there are so many open source and vendor tools to help you do automation. It all boils down to the time, effort and cost you are willing to invest. Also, whether you have enough resources with some technical skillset to write automation code. If yes, then you could start with looking into open source solutions, if not, maybe vendor tools is a better option.
Hope this helps.
-Raj