{"id":27687,"date":"2018-02-23T10:00:12","date_gmt":"2018-02-23T15:00:12","guid":{"rendered":"https:\/\/simpleprogrammer.com\/?p=27687"},"modified":"2019-10-09T11:08:24","modified_gmt":"2019-10-09T15:08:24","slug":"ultimate-automation-testing-guide","status":"publish","type":"post","link":"https:\/\/simpleprogrammer.com\/ultimate-automation-testing-guide\/","title":{"rendered":"The Ultimate Guide to Automation Testing: 74 Resources, Tools &amp; Best Practices for Test Automation"},"content":{"rendered":"<p><img loading=\"lazy\" decoding=\"async\" class=\" wp-image-27796 alignright\" src=\"https:\/\/simpleprogrammer.com\/wp-content\/uploads\/2018\/02\/ultimate-square.png\" alt=\"\" width=\"278\" height=\"278\" \/>Automation testing takes a manual test case and applies a tool or programming language to automate its execution. As more teams shift left, there is a need for tests to run earlier and faster in the development lifecycle.<\/p>\n<p>Traditionally, during regression testing, a manual tester will take an existing test case procedure and execute it step by step. This can be time-consuming and also error-prone, since it is done by hand.<\/p>\n<p>Because of the reasons above, to save time, many companies try to take their manual test cases and convert them to an automated test case. An automated test tool then executes the test steps automatically without human intervention.<\/p>\n<p>Sounds easy, but there are many pitfalls teams encounter when starting their test automation journey. In this tutorial I will address the most common automation issues folks face and hopefully help you begin your automation project off right.<\/p>\n<p>This is a long guide, so here&#8217;s an overview of what we&#8217;re going to cover:<\/p>\n<ol>\n<li><a href=\"#what-is-automation-testing\">What Is Automation Testing?<\/a><\/li>\n<li><a href=\"#issues-with-manual-testing\">Issues With Manual Testing<\/a><\/li>\n<li><a href=\"#why-is-automation-testing-necessary\">Why Is Automation Testing Necessary?<\/a><\/li>\n<li><a href=\"#automation-testing-considerations\">Automation Testing Considerations<\/a><\/li>\n<li><a href=\"#automation-testing-pitfalls\">Automation Testing Pitfalls<\/a><\/li>\n<li><a href=\"#automation-is-a-team-effort\">Automation Is a Team Effort<\/a><\/li>\n<li><a href=\"#tests-that-should-be-automated\">Tests That Should Be Automated<\/a><\/li>\n<li><a href=\"#roi-the-cost-of-test-automation\">ROI: The Cost of Test Automation<\/a><\/li>\n<li><a href=\"#what-shouldnt-be-automated\">What Shouldn\u2019t Be Automated?<\/a><\/li>\n<li><a href=\"#what-is-an-automation-testing-framework\">What Is an Automation Testing Framework?<\/a><\/li>\n<li><a href=\"#automation-testing-design-patterns\">Automation Testing Design Patterns<\/a><\/li>\n<li><a href=\"#test-automation-process\">Test Automation Process<\/a><\/li>\n<li><a href=\"#test-automation-best-practices\">Test Automation Best Practices<\/a><\/li>\n<li><a href=\"#how-to-pick-an-automation-testing-tool\">How To Pick an Automation Testing Tool<\/a><\/li>\n<li><a href=\"#test-automation-metrics\">Test Automation Metrics<\/a><\/li>\n<li><a href=\"#automation-testing-frameworks-and-tools\">Automation Testing Frameworks and Tools List<\/a><\/li>\n<li><a href=\"#api-automation-test-tools\">API Automation Test Tools List<\/a><\/li>\n<li><a href=\"#run-your-automated-test-in-the-cloud\">Run Your Automated Test in the Cloud or on Mobile Devices<\/a><\/li>\n<li><a href=\"#automation-test-management-tools\">Automation Test Management Tools List<\/a><\/li>\n<li><a href=\"#automation-testing-courses\">Automation Testing Courses<\/a><\/li>\n<li><a href=\"#test-automation-conferences\">Test Automation Conferences<\/a><\/li>\n<\/ol>\n<p>Let\u2019s start at the beginning by defining automation testing.<\/p>\n<h2 id=\"what-is-automation-testing\">What Is Automation Testing?<\/h2>\n<p>Functional automation testing uses tools designed specifically for automation to emulate a user interacting with an application and verifying test steps using programming assertions.<\/p>\n<p>Many folks also call these tests automation \u201cchecks\u201d or<a href=\"https:\/\/joecolantonio.com\/testtalks\/47-richard-bradshaw-can-automation-do-actual-testing\/\"> automated checking<\/a>.<\/p>\n<p>This distinction is made to remind testers that automation and the implementation of automation is a checker\u2014it doesn\u2019t replace your testing strategy. An automated test is also, in a sense, dumb in that it can test only what you tell it to test; if you don\u2019t assert it, it doesn\u2019t get checked.<\/p>\n<p>Also, it\u2019s important to remember that \u201cautomation\u201d does not apply to just user interface (UI) end-to-end tests. In fact, I would say that you get more benefit from a lower-level automated test, like a unit test, than you do from a big bloated test suite of end-to-end tests.<\/p>\n<p>Before we take a more in-depth look at automated testing, let\u2019s touch on some problems with manual testing.<\/p>\n<h2 id=\"issues-with-manual-testing\">Issues With Manual Testing<\/h2>\n<p>There are many reasons why having a testing strategy that relies heavily on just manual testing causes issues. Here are a few:<\/p>\n<ul>\n<li>It uses a lot of resources like time and testers.<\/li>\n<li>It\u2019s time consuming.<\/li>\n<li>It sometimes lacks proper coverage.<\/li>\n<li>Due to its repetitiveness, testers may get bored and miss steps when executing manually, leading to possible inconsistencies.<\/li>\n<li>If you plan on moving toward a continuous integration\/continuous deployment model, too many manual tests will slow your teams down.<\/li>\n<\/ul>\n<p>Automation testing can help.<\/p>\n<p>But one of the first hurdles you might face when introducing automated testing to your organization is the false belief that automation can replace all your testers and tests with automation.<\/p>\n<p>Here\u2019s the deal:<\/p>\n<p style=\"text-align: center;\"><strong>Automation Testing Does Not Replace Testers.<\/strong><\/p>\n<p>Some people assume because a test activity is automated, that means it replaces human testers. In fact, however, it\u2019s the opposite. Automated tests are great for running tests precisely and quickly, but they in no way replace human testers.<\/p>\n<p>Automation tests are also great for running the same steps over and over again, but they don\u2019t think.<\/p>\n<p>I like to think of automation in the way that Peter Thiel explains it in the \u201cMan and Machine\u201d chapter of his book <em><a href=\"http:\/\/www.amazon.com\/exec\/obidos\/ASIN\/B00M284NY2\/makithecompsi-20\">Zero to One<\/a><\/em>:<\/p>\n<blockquote><p>\u201cComputers are complements to humans, not substitutes. The most valuable businesses of the coming decades will be built by entrepreneurs who seek to empower people rather than try to make them obsolete.\u201d<\/p><\/blockquote>\n<p>Although we can agree that automation testing does not replace other testing activities, with today\u2019s software development environment and continuous integration practices, it is critical and cannot be ignored.<\/p>\n<p>So what are some reasons for using automated tests?<\/p>\n<h2 id=\"why-is-automation-testing-necessary\">Why Is Automation Testing Necessary?<\/h2>\n<p><img loading=\"lazy\" decoding=\"async\" class=\" wp-image-27793 alignright\" src=\"https:\/\/simpleprogrammer.com\/wp-content\/uploads\/2018\/02\/Why-Is-Automation-Testing-Necessary.png\" alt=\"\" width=\"287\" height=\"287\" \/>With the increased speed in which we develop software, we need automation testing. As more companies move toward<a href=\"https:\/\/www.agilealliance.org\/agile101\/the-agile-manifesto\/\"> Agile<\/a> and<a href=\"https:\/\/www.atlassian.com\/devops\"> DevOps<\/a>, automation is more important than ever before.<\/p>\n<p>Practices like continuous integration and delivery require tests that run quickly and reliably. Lots of manual tests will stop your ability to achieve velocity with your software development.<\/p>\n<p>I\u2019d go so far as to say that in today\u2019s modern development environment, we couldn\u2019t succeed without automation.<\/p>\n<p>Although the main reason teams try to create automated tests is to save the company both time and money, it\u2019s also important to give developers quick feedback so that when they check in code, they are alerted as soon as possible that the change they checked in broke something.<\/p>\n<p>Some other reasons for automated testing are:<\/p>\n<ul>\n<li>Verification of newer versions of software<\/li>\n<li>Frees up testers to focus on more exploratory-type testing<\/li>\n<li>Automated tests are more repeatable<\/li>\n<li>Data population<\/li>\n<li>Accurate benchmarking<\/li>\n<li>Less false failure due to human error<\/li>\n<li>Greater test coverage<\/li>\n<li>Reusability<\/li>\n<li>Quicker release of software<\/li>\n<li>Provides fast feedback to your developer on failing checked in software<\/li>\n<li>Saves time<\/li>\n<li>Ability to leverage programming capabilities<\/li>\n<\/ul>\n<p>While these are good reasons for automation, many folks fail to factor in the amount of time and money it takes to maintain sizeable automated test suites.<\/p>\n<p>So are there any other downsides to creating automated tests? What\u2019s the real story?<\/p>\n<h2 id=\"automation-testing-considerations\">Automation Testing Considerations<\/h2>\n<p>Since automated tests usually rely on programming languages for their creation, automation becomes a full-blown development effort. What you are doing is developing a piece of software to test another piece of software.<\/p>\n<p>Automation testing is difficult and complicated, just like most other development software projects. It also presents many of the same issues other software programs do. Treating your automated code just like your development code is essential. Follow the same processes and best practices you would use for any other software development project.<\/p>\n<p>To learn more, John Sonmez covers many of these best practices in his awesome Pluralsight course<a href=\"https:\/\/simpleprogrammer.com\/creating-automated-testing-framework-selenium\/\"> Creating an Automated Testing Framework With Selenium<\/a>.<\/p>\n<h2 id=\"automation-testing-pitfalls\">Automation Testing Pitfalls<\/h2>\n<p>Teams often claim that automation testing \u201cdoesn\u2019t work.\u201d But this attitude is usually caused by poorly designed test automation more than anything else.<\/p>\n<p>If you keep the issues listed below in mind as you create your test automation framework, you can avoid many of these automation pitfalls ahead of time.<\/p>\n<p>Many issues are caused by setting unrealistic goals, like, for example, having a goal of reaching 100% UI automated testing coverage. Teams often believe that automation tests will find more new defects, so they have a false sense of security. Your automation is only as good as your tests.<\/p>\n<p>Teams also underestimate the amount of time it takes to maintain automation. They\u2019ll often create large, end-to-end tests, but tests should be atomic so that when they fail, you know why.<\/p>\n<p>Several other common issues that teams face are:<\/p>\n<ul>\n<li>Focusing on UI automation only<\/li>\n<li>Not having a controlled test environment<\/li>\n<li>Ignoring failing tests<\/li>\n<li>Not having a test data strategy in place<\/li>\n<li>Not reusing automation code<\/li>\n<li>Developers not making their code automatable<\/li>\n<li>Not using proper synchronization in your tests<\/li>\n<li>Not making your automated tests readable<\/li>\n<li>Creating automated tests that add no value<\/li>\n<li>Hard coding test data<\/li>\n<\/ul>\n<h2 id=\"automation-is-a-team-effort\">Automation Is a Team Effort<\/h2>\n<p>For automation to be successful in an organization, you need to educate everyone on the team as to what the expectation should be for your testing. It\u2019s also critical that you create a whole team approach to your automation efforts, meaning regardless of a person\u2019s role on the team, development and testing (and ultimately, delivering a feature) requires a total team effort. Testing shouldn\u2019t be an activity that is done only at the end of a sprint by a designated tester.<\/p>\n<p>Quality needs to be baked into the software from the beginning, not after the fact. The only way to do this is to have everyone working toward making the application under development as testable as possible. This takes the whole team working together to deliver a quality product.<\/p>\n<p>Many failures I see with automation are not caused by technical issues, but rather by a company\u2019s cultural issues.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\" wp-image-27790 alignright\" src=\"https:\/\/simpleprogrammer.com\/wp-content\/uploads\/2018\/02\/Once-you-have-the-whole-team-on-board-with-automation.png\" alt=\"\" width=\"280\" height=\"280\" \/>Once you have the whole team on board with automation, and your manager\u2019s expectations have been correctly set, it\u2019s time to write your automated tests.<\/p>\n<p>Remember\u2014automation is a time-consuming test activity. You want to use it only when it makes sense. Other testing activities, like exploratory-type work, should be encouraged.<\/p>\n<p>Automation is just one of many types of test activities that can be used by testers.<\/p>\n<p>At this point, another common question I\u2019m frequently asked is, \u201cWhich tests should be automated?\u201d<\/p>\n<h2 id=\"tests-that-should-be-automated\">Tests That Should Be Automated<\/h2>\n<p>The biggest problem I usually see is that teams start off trying to automate everything. The problem is that not everything is automatable. When planning which test cases to automate, you should look for tests that are deterministic, don\u2019t need human interaction, are hard to test manually, and need to run more than once.<\/p>\n<p>You should also seek to automate any manual process that will save engineers time (not necessarily an official \u201ctesting\u201d process), along with tests that focus on the money or risk areas of your application.<\/p>\n<p>Other tests that are useful to automate are unit tests, as well as tests that run against different data sets, focus on critical paths of your application, need to run against multiple builds and browsers, and are used for load\/stress testing.<\/p>\n<p>The more repetitive the execution is, the better candidate a test is for automation testing. However, every situation is different.<\/p>\n<p>Ultimately, you should consider using automation for any activity that saves your team time. It doesn\u2019t have to be a pure testing activity; you can leverage automation to help reduce any time-consuming activity found anywhere in the software development lifecycle.<\/p>\n<p>At this point, some of you may be asking, \u201cWhat is the return on investment (ROI) of test automation?\u201d<\/p>\n<h2 id=\"roi-the-cost-of-test-automation\">ROI: The Cost of Test Automation<\/h2>\n<p>Determining the ROI of your automation testing efforts can be tricky. Here is a common calculation some folks use to get a rough estimate of their test automation costs. This can also help you decide whether a test case is even worth automating as opposed to testing it manually.<\/p>\n<p><strong>Automation Cost = how much the tools cost + how much the labor costs to create an automated test + how much it costs to maintain the automated tests<\/strong><\/p>\n<p>Consequently, if your automation cost calculation is lower than the manual execution cost of the test, it\u2019s an indicator that automation is a good choice.<\/p>\n<p>Moreover, ROI quickly adds up with each re-run of your automated test suite.<\/p>\n<p>Because it\u2019s critical that you get a good return on your test automation investment, there are some things you shouldn\u2019t automate.<\/p>\n<h2 id=\"what-shouldnt-be-automated\">What Shouldn\u2019t Be Automated?<\/h2>\n<p>There are exceptions to everything, of course, but in general, you may not want to automate the following test case scenarios:<\/p>\n<ul>\n<li style=\"font-weight: 400;\"><span style=\"font-weight: 400;\">One-time tests<\/span><\/li>\n<li style=\"font-weight: 400;\"><span style=\"font-weight: 400;\">Ad hoc-<\/span>based testing<\/li>\n<li>Tests that don\u2019t have predictable results<\/li>\n<li>Usability testing<\/li>\n<li>Applications not developed to be testable<\/li>\n<\/ul>\n<p>In addition to what not to automate, another element of a successful automation project is having an automation framework.<\/p>\n<h2 id=\"what-is-an-automation-testing-framework\">What Is an Automation Testing Framework?<\/h2>\n<p><img loading=\"lazy\" decoding=\"async\" class=\" wp-image-27792 alignright\" src=\"https:\/\/simpleprogrammer.com\/wp-content\/uploads\/2018\/02\/What-Is-an-Automation-Testing-Framework.png\" alt=\"\" width=\"283\" height=\"283\" \/>An automation framework is a common set of tools, guidelines, and principles for your tests. Having a framework helps to minimize test script maintenance.<\/p>\n<p>I like to break down an automation testing framework into specific areas of concern, or what I call the \u201cfour Ps\u201d of an automation framework: people, planning, process, and performance.<\/p>\n<p>The first one is the people aspect of a test automation framework.<\/p>\n<p><strong>People<\/strong><\/p>\n<p>As we already covered earlier, you want to make sure that you have set the expectations of your managers and team about your automation strategy. To help ensure that your automation is collaborative and a whole team effort, I recommend that you include automation on your sprint team\u2019s definition of done.<\/p>\n<p>The next stage is the planning piece of your automation framework.<\/p>\n<p><strong>Planning<\/strong><\/p>\n<p>Before writing one line of code, always check to see if there is an existing library or tool you can use before inventing your own. Break your automation framework into abstraction layers so that if anything changes, you just need to make the change in one place. Using established automation testing design patterns like the ones we cover later in this post should be part of the planning stage.<\/p>\n<p>Separating your tests from your framework will also help when you have to make changes to your framework.<\/p>\n<p>Also, plan on making your methods and utilities reusable to avoid code duplication. Making your test and code as readable as possible (they should read like English) will go a long way to prevent confusion and code duplication.<\/p>\n<p>Finally, when planning your test, it&#8217;s important to be aware of what test data your tests need. Many times, tests run against different environments that might not have the data you expect, so make sure to have a test data management strategy in place. Including support for mocking and stubbing in your framework can also help with some test data issues.<\/p>\n<p><strong>Process<\/strong><\/p>\n<p>Having a process in place that holds team members accountable for automation is another vital piece of a framework. Since automation is just like any other development project, make sure to use the same process and best practices that developers already follow, like using version control and performing code reviews on all automated tests.<\/p>\n<p><strong>Performance<\/strong><\/p>\n<p>Always start your automation framework with the end in mind. Tests need to be reliable and maintainable. They also should run as fast as possible.<\/p>\n<p>Along these lines, make sure that your developers are creating unique IDs for each element that you will have to interact with within your tests. Doing this will help you avoid resorting to lousy automation practices like relying on a coordinate-based way to communicate with an element.<\/p>\n<p>Another top killer of test automation script performance is the failure to use proper synchronization\/wait points in your tests. Too many hard-coded waits will slow down your test suite. Use the preferred <a href=\"https:\/\/www.joecolantonio.com\/2014\/04\/01\/the-1-killer-of-selenium-script-performance-and-reliability\/\">explicit wait<\/a> method for synchronization.<\/p>\n<p>As you write your test scripts, think about how they would perform if you had to run in parallel. Thinking about possible parallel issues beforehand will avoid problems when you start to scale the running of your test suite again on a grid or a cloud-based service like <a href=\"https:\/\/saucelabs.com\/\">Sauce Labs<\/a>.<\/p>\n<p>To ensure that your tests are as preformatted as possible, refactor slow or poorly written code whenever possible. Including reporting and logging in your framework will help you quickly identify poorly running code.<\/p>\n<p>To make sure that teams follow all these guidelines, determine a strategy for training and retraining your framework users.<\/p>\n<p>That\u2019s not all \u2026<\/p>\n<h2 id=\"automation-testing-design-patterns\">Automation Testing Design Patterns<\/h2>\n<p>It\u2019s a given that your applications are going to change over time. And since you know change is going to happen, you should start off right from the beginning using best practices or design patterns. Doing so will make your automation more repeatable and maintainable.<\/p>\n<p>Here are some common automation testing design patterns that many teams use to help them create more reliable test automation.<\/p>\n<h3>Page Objects<\/h3>\n<p>One popular strategy to use when creating your test automation is to model the behavior on your application. Creating simple<a href=\"https:\/\/github.com\/SeleniumHQ\/selenium\/wiki\/PageObjects\"> page objects<\/a> that model the pieces of your software that you are testing against can do this.<\/p>\n<p>So, for example, you would write a page object for login or a page object for a homepage. Following this approach correctly makes use of the single responsibility principle.<\/p>\n<p>If anything changes\u2014say, an element ID\u2014you just need to go to one place to make the change and all of the tests that use the page object will automatically pick up the changes without you doing anything else. The test code needs to be updated in only one place.<\/p>\n<p>Page objects also hide the technical details about HTML fields and CSS classes behind methods that have easy-to-understand names. Being mindful when naming your methods has the extra benefit of helping to create a nice readable test application programming interface (API) that a less technical automation engineer can quickly start using for automation.<\/p>\n<h3>Screenplay Pattern<\/h3>\n<p>Page objects are a good place to start making your test maintainable, but if you\u2019re not careful, they can grow out of control over time. The<a href=\"https:\/\/ideas.riverglide.com\/page-objects-refactored-12ec3541990#.ekkiguobe\"> Screenplay pattern<\/a> takes page objects and chops them down into really tiny pieces. Some testers tell me that this has made their tests much more maintainable and reliable.<\/p>\n<p>Another significant benefit is that it makes test scripts more readable.<\/p>\n<h3>Ports and Adapters<\/h3>\n<p>The<a href=\"https:\/\/spin.atomicobject.com\/2013\/02\/23\/ports-adapters-software-architecture\/\"> ports and adapters<\/a> design strives to make sure you are using the single responsibility principle so that an object should do only one thing and have one reason to change.<\/p>\n<p>When you apply this to test automation, make sure to decouple your test code to allow you to swap slow components with fast simulators so that you can run your test and the app you\u2019re testing in the same process.<\/p>\n<p>Remove all networking and input\/output so nothing is slowing down the test suite. Of course, this is not easy to do, but the more you try to do this when creating UI automation, the better off you will be.<\/p>\n<h3>Presenter First<\/h3>\n<p><a href=\"https:\/\/atomicobject.com\/resources\/presenter-first\">Presenter First<\/a> is a modification of the <a href=\"https:\/\/simpleprogrammer.com\/software-design-patterns-hiding\/\">model-view-controller<\/a> (MVC) way of organizing code and development behaviors to create completely tested software using a test-driven development (TDD) approach.<\/p>\n<p>I first heard of this pattern when interviewing <a href=\"https:\/\/joecolantonio.com\/testtalks\/53-seb-rose-cucumber-for-java-keeping-your-bdd-cucumbers-sweet\/\">Seb Rose<\/a>, one of the contributors to the Cucumber project and author of <em><a href=\"http:\/\/www.amazon.com\/exec\/obidos\/ASIN\/1941222293\/makithecompsi-20\">The Cucumber for Java Book<\/a>.<\/em><\/p>\n<p>He mentioned that if you draw out the MVC pattern as blocks and arrows, you can see that the view, which is your UI, has well-defined channels of communication with the model and the controller. If you can replace those during runtime with models and controllers that your test creates and controls, then there is no reason why you can\u2019t just test that the UI behaves in the way that you want.<\/p>\n<p>You can also set your model and controller to mimic all sorts of odd behaviors, like a network going down.<\/p>\n<h2 id=\"test-automation-process\">Test Automation Process<\/h2>\n<p><img loading=\"lazy\" decoding=\"async\" class=\" wp-image-27791 alignright\" src=\"https:\/\/simpleprogrammer.com\/wp-content\/uploads\/2018\/02\/Test-Automation-Process.png\" alt=\"\" width=\"285\" height=\"285\" \/>I like to follow a six-step cyclical process when planning my test automation efforts that have the following phases: Analyze, Write, Execute, Evaluate, Communicate, and Repeat\/Refactor.<\/p>\n<ul>\n<li><strong>Analyze<\/strong>\u2014understand your functional testing objectives. Understand what test data is needed. What needs to be tested? Know what needs to be verified. If you are part of an agile team, an excellent place to start would be in your definition of ready meeting. This will allow you to look at your upcoming sprint and see if all aspects of your automation have been taken into consideration before you start developing new functionality to test.<\/li>\n<li><strong>Write<\/strong>\u2014turn the requirements into an automated solution. Know what the start and end conditions are for each test. Tests should be completely independent of other tests. Add proper assertion checks to ensure your application is behaving according to your specifications. Each test should have a particular purpose.<\/li>\n<li><strong>Execute<\/strong>\u2014your tests should be reliable. Run each test at least three times in a row before checking in code. If you plan on using a continuous integration tool like Jenkins, start by getting your first test to execute in the environment you plan on using.<\/li>\n<li><strong>Evaluate<\/strong>\u2014verify that the automated script is doing what you expect it to do. Have manual testers prove that it is working as expected. Remember\u2014if it\u2019s not asserted, it\u2019s not checked. Is the test reliable?<\/li>\n<li><strong>Communicate<\/strong>\u2014be sure that everyone on your team is aware of the results. Flaky tests should be fixed ASAP, or you\u2019ll risk your team ignoring your test results.<\/li>\n<li><strong>Repeat\/refactor<\/strong>\u2014if you notice a flaky test, refactor it to make it more reliable. Most importantly, delete any tests that are not reliable and haven\u2019t been fixed within a given time frame. When looking at your automated regression test, ask the team if it is still needed or if it\u2019s adding value. Pruning old tests will save you time in maintenance in the long run and ensure you are only running tests that give your team value.<\/li>\n<\/ul>\n<h2 id=\"test-automation-best-practices\">Test Automation Best Practices<\/h2>\n<p>Here are some high-level good automation practices you should follow in more detail:<\/p>\n<h3>Atomic Test<\/h3>\n<p>An atomic test is a strategy for ensuring that each test is entirely self-contained. That is, it should not depend on the outcome of other tests to establish its state, and another test should not affect its success or failure in any way.<\/p>\n<p>Also, when an automated test fails, you need to know why. Having a well-named atomic test that tests only one thing will help you quickly identify what broke if your test fails.<\/p>\n<p>Furthermore, you should endeavor to get feedback to your developers as quickly as possible, and the best way to do that is with a fast, well-named test.<\/p>\n<p>This is also critical if you plan on running your automation test in parallel in a<a href=\"http:\/\/www.seleniumhq.org\/docs\/07_selenium_grid.jsp\"> Selenium Grid<\/a>.<\/p>\n<h3>Test Sizing<\/h3>\n<p>Test size matters because tests need to run quickly.<\/p>\n<p>At this point, many people visualize a traditional<a href=\"https:\/\/martinfowler.com\/bliki\/TestPyramid.html\"> test pyramid<\/a>, which has unit tests as its base, integration tests in the middle, and graphical user interface (GUI) tests at the top.<\/p>\n<p>But I think more in terms of test size. By test size, I\u2019m referring to tests that are faster than others.<\/p>\n<p>While I understand the need to run UI tests if you have to create one, make it as fast as possible.<\/p>\n<h3>Readability<\/h3>\n<p>A quick point on test code readability\u2014did you know that developers spend more time reading code than actually writing it?<\/p>\n<p>It is rare that the person who wrote code will also be the one that needs to modify it. Even worse, how many times have you written code only to come back to it months later and have no idea what it is doing?<\/p>\n<p>Since, as we mentioned, automation code is software development, you should create your test code with the reader of the code in mind\u2014not the computer.<\/p>\n<p>This will help not only to make your test more maintainable, but also will help ensure that you do not duplicate code because you didn\u2019t know what an existing piece of code was doing.<\/p>\n<p>This might seem like a minor issue, but ignore readability of your automation test at your peril.<\/p>\n<p>The importance of code readability really hit home for me after watching Cory House\u2019s Pluralsight course called<a href=\"https:\/\/simpleprogrammer.com\/get\/writing-clean-code-humans\">\u00a0 Clean Code: Writing Code for Humans<\/a>.<\/p>\n<h3>Testability<\/h3>\n<p>Testability needs to be baked into our applications right from the start. As a regular part of sprint planning, developers should be thinking about how they can make their application code more testable. They can do this by providing things like unique element IDs for their application fields and APIs to help create hooks into their application(s) that can be used in their automated tests.<\/p>\n<p>They should also be thinking about how any code changes they make to the application are going to impact existing automated tests, and plan accordingly.<\/p>\n<p>If you don\u2019t do this, you\u2019re not going to be successful with automation for very long.<\/p>\n<p>Remember, you can\u2019t automate that which is not testable.<\/p>\n<h3>Stable Environment<\/h3>\n<p>This one is a really common hindrance for many teams with their automation efforts.<\/p>\n<p>Without a stable test environment that is always in a known state, it will be tough for your teams to make progress with their automation efforts.<\/p>\n<p>Tests failing due to environmental issues rather than actual application issues will cause your teams to lose confidence in your test feedback quickly.<\/p>\n<p>Once teams start ignoring automation results, your test efforts become useless.<\/p>\n<p>Some tools that can help create more stable and repeatable environments are<a href=\"https:\/\/www.docker.com\/\"> Docker<\/a>,<a href=\"https:\/\/www.vagrantup.com\/\"> Vagrant<\/a>, and<a href=\"https:\/\/www.skytap.com\/\"> Skytap<\/a>.<\/p>\n<h2 id=\"how-to-pick-an-automation-testing-tool\">How To Pick an Automation Testing Tool<\/h2>\n<p>There is no \u201ccorrect\u201d test tool for automation testing. Ultimately, it all depends on your team\u2019s unique needs and skill set.<\/p>\n<p>I always recommend that you run a two-week proof of concept (POC) for each tool that you are considering and include your team\u2019s feedback in the process before committing to a tool.<\/p>\n<p>The first place to start is to look at the product roadmap and make sure the tools you select will handle future features and technologies. To avoid future compatibility issues and tedious framework refactoring due to false notions, don\u2019t skip this step.<\/p>\n<p>Next, you should evaluate the cost, including maintenance. If you plan on having your whole team help out with the automation effort, make sure to use a tool that leverages the same tools and languages your developers use.<\/p>\n<p>Don\u2019t just assume a tool will work for you. Create a small POC for each tool and get team feedback before committing to anything. Ask the team: Is the tool extensible? How easy is it to use and get started? Does it provide reporting and debugging capabilities? Does it recognize all the objects in your application? Can it integrate with other tools like version control, test management tools, and continuous integration tools?<\/p>\n<p>Most importantly, find out if the tool has an active user base and select tools that other companies are using. You don\u2019t want to select an open-source solution that is not actively maintained by the community. You may need to ask how much training it will take to get your teams up to speed with the tool. Finally, determine how easy is it to hire folks that have the skills needed to create your automated tests.<\/p>\n<h2 id=\"test-automation-metrics\">Test Automation Metrics<\/h2>\n<p>Coming up with metrics that teams can use to make sure they are on track is tough. These should be used just as a quick way to monitor your team\u2019s progress and shouldn\u2019t be used as hard and fast rules.<\/p>\n<p><strong>Mean Time to Diagnosis (MTD)<\/strong>\u2014How long does it take you to debug a failing automated test? A high MTD is an indicator that your automated test code is not high-quality.<\/p>\n<p><strong>Bugs Found by Automation<\/strong>\u2014This can be helpful to determine how much value your automation efforts are bringing.<\/p>\n<p><strong>Flaky Rate<\/strong>\u2014Ideally, this should be zero, but this is a good indicator to know if your automated tests are reliable or not.<\/p>\n<p><strong>Automated to Manual Ratio<\/strong>\u2014The more manual tests you have, the longer it will take to tell if your application is ready for release. This helps you keep a pulse on how long your release efforts will take. It also enables you to gain visibility into whether teams are automating (or not automating) the right things.<\/p>\n<h2 id=\"automation-testing-frameworks-and-tools\">Automation Testing Frameworks and Tools<\/h2>\n<p><img loading=\"lazy\" decoding=\"async\" class=\" wp-image-27794 alignright\" src=\"https:\/\/simpleprogrammer.com\/wp-content\/uploads\/2018\/02\/Automation-Testing-Frameworks-and-Tools.png\" alt=\"\" width=\"278\" height=\"278\" \/>This is not an exhaustive list, but rather a quick summary of some of the more popular test tools that I\u2019m aware of.<\/p>\n<h3>Open-Source Tools<\/h3>\n<ul>\n<li><a href=\"http:\/\/www.seleniumhq.org\/\">Selenium<\/a>\u2014This has arguably become the de facto test tool standard for browser-based testing. Please remember: You cannot use Selenium for non-browser applications; not everything can be an automation testing Selenium script.<\/li>\n<li><a href=\"http:\/\/appium.io\/\">Appium<\/a>\u2014Appium is automation for apps. Appium seems to be the winner in the mobile testing space so far.<\/li>\n<li><a href=\"http:\/\/watir.com\/\">Watir<\/a>\u2014This is an open-source Ruby library for automating tests. Watir interacts with a browser the same way people do: clicking links, filling out forms, and validating text.<\/li>\n<li><a href=\"https:\/\/github.com\/Microsoft\/WinAppDriver\">WinAppDriver<\/a>\u2014Windows Application Driver is a service to support UI Test Automation of Windows Applications.<\/li>\n<li><a href=\"https:\/\/github.com\/TestStack\/White\">White Framework<\/a>\u2014White is a framework for automating rich client applications based on Win32, WinForms, WPF, Silverlight, and SWT (Java) platforms. It\u2019s .NET based and doesn\u2019t require the use of any proprietary scripting languages. In fact, test automation programs using White support your writing with whatever .NET language, integrated development environment, and tools you are already using. White also provides a consistent, object-oriented API, hiding the complexity of Microsoft\u2019s UI Automation library (upon which White is based) and Windows messages.<\/li>\n<li style=\"font-weight: 400;\"><a href=\"https:\/\/www.autoitscript.com\/site\/autoit\/\">AutoIt<\/a>\u2014AutoIt v3 is a freeware BASIC-like scripting language designed for automating the Windows GUI and general scripting. Many teams integrate AutoIT with Selenium to work around non-browser windows that appear in an automated test workflow.<\/li>\n<li><a href=\"http:\/\/thucydides.info\/docs\/serenity-staging\/\">Serenity<\/a>\u2014This is one of my favorite automation frameworks around. Serenity is a great open-source tool because it acts like a wrapper over Selenium and behavior-driven development (BDD) tools like jBehave and Cucumber-JVM. That means that there\u2019s a lot of built-in functionality available to you in Serenity that takes care of many things you would normally have to code from scratch if you had to create your own BDD framework. What Serenity is really awesome at is creating unbelievable reports. Out-of-the-box Serenity creates living documentation that can be used not only to view your Selenium BDD test results, but also as documentation for your application.<\/li>\n<li><a href=\"https:\/\/gauge.org\/\">Gauge<\/a>\u2014Gauge is a test automation solution that\u2019s being built by ThoughtWorks; it\u2019s cross-platform and open-source. It supports multiple languages including Ruby, Java, C#, Python, and JavaScript, and has upcoming support for other languages\u2014like Golang\u2014as well.<\/li>\n<li><a href=\"http:\/\/sahipro.com\/sahi-open-source\/\">Sahi<\/a>\u2014The first thing you need to know is that Sahi comes in two flavors: open-source and a pro version. Sahi Pro is the enterprise version of the open-source project. It includes lots of features coveted by larger organizations like pro style reporting.<\/li>\n<li><a href=\"http:\/\/robotframework.org\/\">Robot Framework<\/a>\u2014If you want to use Python for your test automation efforts, you can\u2019t go wrong using the Robot Framework. The Robot Framework is a mature solution that was created for testers and uses a keyword-driven approach to make tests readable and easy to create. It also has many test libraries and other tools you can use for editing, running, and building your tests.<\/li>\n<li><a href=\"http:\/\/redwoodhq.com\/\">RedwoodHQ<\/a>\u2014This takes a little bit of a different approach from the other tools on this list. It creates a website interface that allows multiple testers to work together and run their tests from one web-accessible location.<\/li>\n<li><a href=\"http:\/\/galenframework.com\/\">Galen Framework<\/a>\u2014If your automation efforts are focused on user experience design\/layout testing, Galen might be a perfect fit for your needs.<\/li>\n<li><a href=\"https:\/\/www.cypress.io\/\">Cypress<\/a>\u2014Cypress is a more developer-centric test automation tool. It is aimed more toward making TDD a reality with developers.<\/li>\n<\/ul>\n<h3>Vendor-based Automation Test tools<\/h3>\n<ul>\n<li><a href=\"https:\/\/applitools.com\/\">Applitools<\/a>\u2014Applitools integrates with both vendor and open-source solutions. Where most of the tools listed here are for functional test automation, Applitools helps you with visual validation testing from a user\u2019s perspective.<\/li>\n<li>Unified Functional Testing (UFT ) UFT PRO (<a href=\"https:\/\/software.microfocus.com\/en-us\/products\/automated-continuous-testing-integration-delivery-tools\/overview\">LeanFT<\/a>)\u2014Essentially combines the best of both the vendor-based and open-source worlds by morphing Selenium with some key functionality currently found in<a href=\"https:\/\/software.microfocus.com\/en-us\/products\/unified-functional-automated-testing\/overview\"> UFT<\/a> (QuickTest Professional [QTP]).<\/li>\n<li><a href=\"https:\/\/docs.microsoft.com\/en-us\/visualstudio\/test\/use-ui-automation-to-test-your-code\">Microsoft Coded UI<\/a>\u2014Uses Selenium to help test Chrome and Firefox browsers. But unlike Selenium, which is only for web-based testing, Coded UI is unique in that it allows you to automate a bunch of different technologies and is not limited to the browsers.<\/li>\n<li>SmartBear<a href=\"https:\/\/smartbear.com\/product\/testcomplete\/features\/\"> TestComplete<\/a>\u2014Allows you to automate web, desktop, and mobile applications. Best of all, you can choose from script-free, drag and drop functionality, or JavaScript, Python, VBScript, JScript, DelphiScript, C++Script, or C#Script as a scripting language.<\/li>\n<li><a href=\"http:\/\/www-03.ibm.com\/software\/products\/EN\/FUNCTIONAL\">IBM Rational Functional Tester<\/a>\u2014Like most companies, IBM\u2019s test portfolio has grown with the acquisition of tools like Rational and Green Hat. It appears that much of the strength of its functional test tools comes from its support of numerous technologies including Windows, Mac, and mobile platforms.<\/li>\n<li><a href=\"https:\/\/www.tricentis.com\/\">Tricentis<\/a>\u2014Self-billed as \u201cthe continuous testing company,\u201d which is in line with many independent tool reviews like Gartner\u2019s finding that one of its strengths is its extensive efforts to support Agile testing and continuous improvement processes.<\/li>\n<li><a href=\"https:\/\/www.worksoft.com\/\">Worksoft<\/a>\u2014Worksoft is well known for its enterprise resource planning business end-to-end solutions.<\/li>\n<li><a href=\"https:\/\/www.testplant.com\/\">Testplant<\/a>\u2014One of the few test automation tools listed that has strong support for Apple\u2019s platform. In fact, because of its unique, image-based recognition approach, it has the ability to test hard-to-automate applications\u2014especially those with object recognition issues. Unfortunately, anyone who has done image-based, functional test automation knows how difficult these types of tests can be to maintain, and some customers have noted that as an issue.<\/li>\n<li><a href=\"https:\/\/www.ranorex.com\/\">Ranorex<\/a>\u2014Supports a ton of technologies across all kinds of platforms\u2014all from one tool. Noteworthy, however, is that it lacks a full, end-to-end solution and focuses mainly on functional test automation.<\/li>\n<li style=\"font-weight: 400;\"><a href=\"https:\/\/www.progress.com\/\">Progress<\/a>\u2014For those of you who may not be familiar with this company, Progress recently acquired Telerik, which is the home of the popular free debugging tool Fiddler. Also, I know a few test engineers who actually use Progress\u2019s Test Studio as a front end for their Selenium test automation efforts. Strengths of Progress are its integration with Visual Studio and its supported languages.<\/li>\n<li><a href=\"https:\/\/www.automationanywhere.com\/\">Automation Anywhere<\/a>\u2014Differentiates itself by being the only robotic \u201cbots on demand\u201d focused process automation platform. Whereas some of the other tools in this list are able to test a large set of technologies, Automation Anywhere does not support testing for packaged applications like SAP or support for native mobile apps testing.<\/li>\n<li><a href=\"https:\/\/www.testim.io\/\">TestIm<\/a> &#8211; Leverages machine learning to speed up the authoring, execution and\u2013most importantly\u2013the maintenance of automated tests. Their goal is to help you to start trusting your tests.<\/li>\n<\/ul>\n<h2 id=\"api-automation-test-tools\">API Automation Test Tools<\/h2>\n<h3>Open-source API tools<\/h3>\n<ul>\n<li><a href=\"http:\/\/rest-assured.io\/\">Rest-Assured<\/a>\u2014Rest-Assured is an open-source Java domain-specific language that makes testing REST service simple. It simplifies things by eliminating the need to use boilerplate code to test and validate complex responses. It also supports XML and JSON Request\/Responses.<\/li>\n<li><a href=\"https:\/\/github.com\/restsharp\/RestSharp\">RestSharp<\/a>\u2014This is a simple REST and HTTP API Client for .NET.<\/li>\n<li><a href=\"https:\/\/www.getpostman.com\/\">Postman<\/a>\u2014Postman is a REST client that started off as a Chrome browser plugin, but recently came out with native versions for both Mac and Windows.<\/li>\n<li><a href=\"https:\/\/www.soapui.org\/open-source.html\">SoapUI<\/a>\u2014This is the world-leading open-source functional testing tool for API testing. It supports multiple protocols such as SOAP, REST, HTTP, JMS, and AMF.<\/li>\n<li><a href=\"https:\/\/www.telerik.com\/fiddler\">Fiddler<\/a>\u2014Fiddler is a tool that allows you to monitor, manipulate, and reuse HTTP requests. Fiddler does many things that allow you to debug website issues, and with one of its many extensions, you can accomplish even more. Check out my article on <a href=\"https:\/\/www.joecolantonio.com\/2014\/12\/09\/getting-started-debugging-fiddler\/\">how to get started with Fiddler<\/a>.<\/li>\n<li><a href=\"https:\/\/github.com\/intuit\/karate\">Karate<\/a>\u2014Since Karate is built on top of Cucumber-JVM, you can run tests and generate reports like any standard Java project. But instead of Java, you write tests in a language designed to make dealing with HTTP, JSON, or XML simple.<\/li>\n<li><a href=\"https:\/\/www.citrusframework.org\/\">Citrus Framework<\/a>\u2014Use this tool to create automated integration tests for message protocols and data formats for technologies like HTTP, REST, JMS, TCP\/IP, SOAP, FTP, SSH, XML, JSON, and more.<\/li>\n<\/ul>\n<h3>Vendor API Tools<\/h3>\n<ul>\n<li><a href=\"https:\/\/www.soapui.org\/professional\/soapui-pro.html\">SoapUI Pro<\/a>\u2014Since the free version is open-source, you can actually gain access to the full source code and modify as needed. The pro version is more user-friendly, and has additional functionality, including a form editor, an assertion wizard for XPath, and a SQL query builder.<\/li>\n<li><a href=\"https:\/\/software.microfocus.com\/en-us\/products\/unified-functional-automated-testing\/overview\">UFT API<\/a>\u2014In previous releases, HP had separate products for functional testing. QTP was used for testing GUI applications, and Service Test was for testing non-GUI technologies. HP\u2019s latest test tool release\u2014UFT\u2014combines both products and features a front end that merges the separate tools into one common UI.<\/li>\n<\/ul>\n<h3>Test Execution Report Tools<\/h3>\n<ul>\n<li><a href=\"http:\/\/allure.qatools.ru\/\">Allure<\/a>\u2014This is an open-source framework designed to create test execution reports clear to everyone on the team.<\/li>\n<\/ul>\n<h2 id=\"run-your-automated-test-in-the-cloud\">Run Your Automated Test in the Cloud or on Mobile Devices<\/h2>\n<p>Here are some vendors that allow you to save a ton of time by running your test in the cloud and on multiple OS, devices, and configurations. Get rid of the headache of having to maintain your own in-house lab\/grid.<\/p>\n<ul>\n<li><a href=\"https:\/\/saucelabs.com\/\">Sauce Labs<\/a><\/li>\n<li><a href=\"https:\/\/www.perfectomobile.com\/\">Perfecto<\/a><\/li>\n<li><a href=\"https:\/\/www.browserstack.com\/\">BrowserStack<\/a><\/li>\n<\/ul>\n<h2 id=\"automation-test-management-tools\">Automation Test Management Tools<\/h2>\n<ul>\n<li><a href=\"https:\/\/www.getzephyr.com\/\">Zephyr<\/a>\u2014Manage all aspects of software quality\u2014integrate with JIRA and various test tools, foster collaboration, and gain real-time visibility.<\/li>\n<li><a href=\"https:\/\/www.qasymphony.com\/\">QASymphony<\/a>\u2014This tool has a platform called qTest for software testing and QA tools built for Agile.<\/li>\n<\/ul>\n<h2 id=\"automation-testing-courses\">Automation Testing Courses<\/h2>\n<p>Finally, here\u2019s a list of my favorite automation testing courses:<\/p>\n<ul>\n<li><a href=\"https:\/\/simpleprogrammer.com\/selenium\">Automated Web Testing with Selenium<\/a>\u2014John Sonmez<\/li>\n<li><a href=\"https:\/\/simpleprogrammer.com\/automated-testing-framework-selenium\">Creating an Automated Testing Framework With Selenium<\/a>\u2014John Sonmez<\/li>\n<li><a href=\"https:\/\/simpleprogrammer.com\/api-testing-hp-unified-functional-testing\">Quick Guide to API Testing with HP\u2019s Unified Functional Testing<\/a>\u2014Joe Colantonio<\/li>\n<li><a href=\"https:\/\/simpleprogrammer.com\/get\/test-automation-with-Codedui\">Test Automation with CodedUI<\/a>\u2014Marcel de Vries<\/li>\n<li><a href=\"https:\/\/compendiumdev.zenler.com\/courses\/selenium-2-webdriver-basics-with-java\">Selenium 2 WebDriver Basics with Java<\/a>\u2014Alan Richardson<\/li>\n<li><a href=\"http:\/\/courses.ultimateqa.com\/courses\/selenium-with-c\">Complete Selenium Webdriver with C# &#8211; Build a Framework<\/a>\u2014Nikolay Advolodkin<\/li>\n<li><a href=\"http:\/\/www.robotframeworktutorial.com\/courses\/\">Robot Framework<\/a>\u2014Bryan Lamb<\/li>\n<li><a href=\"https:\/\/getdpd.com\/cart\/hoplink\/24708?referrer=coikxejawk8cso\">The Java Selenium Guidebook<\/a>\u2014Dave Haeffner<\/li>\n<\/ul>\n<h2 id=\"test-automation-conferences\">Test Automation Conferences<\/h2>\n<ul>\n<li><a href=\"https:\/\/automationguild.com\/\">Automation Guild<\/a>\u2014Automation Guild is an annual 100% online conference and community dedicated 100% to helping <em>you<\/em> perfect the craft of creating automation awesomeness and accelerate your automation career.<\/li>\n<li><a href=\"https:\/\/www.seleniumconf.us\/\">SeleniumConf<\/a>\u2014SeleniumConf brings together Selenium developers and enthusiasts from around the world to share ideas, socialize, and work together on advancing the present and future success of the project.<\/li>\n<li><a href=\"http:\/\/www.stpcon.com\/\">STPCon<\/a>\u2014The Software Test Professionals Conference is the leading event where test leadership, management, and strategy converge.<\/li>\n<li><a href=\"https:\/\/saucecon.com\/\">SauceCon<\/a>\u2014brings together the global community of Sauce Labs users and automated testing experts.<\/li>\n<\/ul>\n","protected":false},"excerpt":{"rendered":"<p>Automation testing takes a manual test case and applies a tool or programming language to automate its execution. As more teams shift left, there is a need for tests to run earlier and faster in the development lifecycle. Traditionally, during regression testing, a manual tester will take an existing test case procedure and execute it&#8230;<\/p>\n","protected":false},"author":1113,"featured_media":27795,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_kad_post_transparent":"","_kad_post_title":"","_kad_post_layout":"","_kad_post_sidebar_id":"","_kad_post_content_style":"","_kad_post_vertical_padding":"","_kad_post_feature":"","_kad_post_feature_position":"","_kad_post_header":false,"_kad_post_footer":false,"_kad_post_classname":"","footnotes":""},"categories":[44070,2185,415,162228543,162229840,12],"tags":[],"class_list":["post-27687","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-automation","category-best-practices","category-guest-post","category-pluralsight-courses","category-skills","category-testing"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.6 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Automation Testing - 74 Resources, Tools &amp; Best Practices for Test Automation<\/title>\n<meta name=\"description\" content=\"In this post, you&#039;ll discover how to get started with automation testing, how automation testing saves time and effort while reducing software defects, the basics of building an automation testing framework, the most common design patterns for automation testing, and the best testing tools and resources.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/simpleprogrammer.com\/ultimate-automation-testing-guide\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Automation Testing - 74 Resources, Tools &amp; Best Practices for Test Automation\" \/>\n<meta property=\"og:description\" content=\"In this post, you&#039;ll discover how to get started with automation testing, how automation testing saves time and effort while reducing software defects, the basics of building an automation testing framework, the most common design patterns for automation testing, and the best testing tools and resources.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/simpleprogrammer.com\/ultimate-automation-testing-guide\/\" \/>\n<meta property=\"og:site_name\" content=\"Simple Programmer\" \/>\n<meta property=\"article:published_time\" content=\"2018-02-23T15:00:12+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2019-10-09T15:08:24+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/simpleprogrammer.com\/wp-content\/uploads\/2018\/02\/Ultimate-Automation-Testing-Guide-Resources-Best-Practices.png\" \/>\n\t<meta property=\"og:image:width\" content=\"1280\" \/>\n\t<meta property=\"og:image:height\" content=\"720\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"31 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/simpleprogrammer.com\\\/ultimate-automation-testing-guide\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/simpleprogrammer.com\\\/ultimate-automation-testing-guide\\\/\"},\"author\":{\"name\":\"\",\"@id\":\"\"},\"headline\":\"The Ultimate Guide to Automation Testing: 74 Resources, Tools &amp; Best Practices for Test Automation\",\"datePublished\":\"2018-02-23T15:00:12+00:00\",\"dateModified\":\"2019-10-09T15:08:24+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/simpleprogrammer.com\\\/ultimate-automation-testing-guide\\\/\"},\"wordCount\":6226,\"commentCount\":0,\"image\":{\"@id\":\"https:\\\/\\\/simpleprogrammer.com\\\/ultimate-automation-testing-guide\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/simpleprogrammer.com\\\/wp-content\\\/uploads\\\/2018\\\/02\\\/Ultimate-Automation-Testing-Guide-Resources-Best-Practices.png\",\"articleSection\":[\"Automation\",\"Best Practices\",\"Guest Post\",\"Pluralsight Courses\",\"Skills\",\"Testing\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/simpleprogrammer.com\\\/ultimate-automation-testing-guide\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/simpleprogrammer.com\\\/ultimate-automation-testing-guide\\\/\",\"url\":\"https:\\\/\\\/simpleprogrammer.com\\\/ultimate-automation-testing-guide\\\/\",\"name\":\"Automation Testing - 74 Resources, Tools & Best Practices for Test Automation\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/simpleprogrammer.com\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/simpleprogrammer.com\\\/ultimate-automation-testing-guide\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/simpleprogrammer.com\\\/ultimate-automation-testing-guide\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/simpleprogrammer.com\\\/wp-content\\\/uploads\\\/2018\\\/02\\\/Ultimate-Automation-Testing-Guide-Resources-Best-Practices.png\",\"datePublished\":\"2018-02-23T15:00:12+00:00\",\"dateModified\":\"2019-10-09T15:08:24+00:00\",\"author\":{\"@id\":\"\"},\"description\":\"In this post, you'll discover how to get started with automation testing, how automation testing saves time and effort while reducing software defects, the basics of building an automation testing framework, the most common design patterns for automation testing, and the best testing tools and resources.\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/simpleprogrammer.com\\\/ultimate-automation-testing-guide\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/simpleprogrammer.com\\\/ultimate-automation-testing-guide\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/simpleprogrammer.com\\\/ultimate-automation-testing-guide\\\/#primaryimage\",\"url\":\"https:\\\/\\\/simpleprogrammer.com\\\/wp-content\\\/uploads\\\/2018\\\/02\\\/Ultimate-Automation-Testing-Guide-Resources-Best-Practices.png\",\"contentUrl\":\"https:\\\/\\\/simpleprogrammer.com\\\/wp-content\\\/uploads\\\/2018\\\/02\\\/Ultimate-Automation-Testing-Guide-Resources-Best-Practices.png\",\"width\":1280,\"height\":720},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/simpleprogrammer.com\\\/ultimate-automation-testing-guide\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/simpleprogrammer.com\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"The Ultimate Guide to Automation Testing: 74 Resources, Tools &amp; Best Practices for Test Automation\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/simpleprogrammer.com\\\/#website\",\"url\":\"https:\\\/\\\/simpleprogrammer.com\\\/\",\"name\":\"Simple Programmer\",\"description\":\"\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/simpleprogrammer.com\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Person\",\"@id\":\"\",\"url\":\"https:\\\/\\\/simpleprogrammer.com\\\/author\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Automation Testing - 74 Resources, Tools & Best Practices for Test Automation","description":"In this post, you'll discover how to get started with automation testing, how automation testing saves time and effort while reducing software defects, the basics of building an automation testing framework, the most common design patterns for automation testing, and the best testing tools and resources.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/simpleprogrammer.com\/ultimate-automation-testing-guide\/","og_locale":"en_US","og_type":"article","og_title":"Automation Testing - 74 Resources, Tools & Best Practices for Test Automation","og_description":"In this post, you'll discover how to get started with automation testing, how automation testing saves time and effort while reducing software defects, the basics of building an automation testing framework, the most common design patterns for automation testing, and the best testing tools and resources.","og_url":"https:\/\/simpleprogrammer.com\/ultimate-automation-testing-guide\/","og_site_name":"Simple Programmer","article_published_time":"2018-02-23T15:00:12+00:00","article_modified_time":"2019-10-09T15:08:24+00:00","og_image":[{"width":1280,"height":720,"url":"https:\/\/simpleprogrammer.com\/wp-content\/uploads\/2018\/02\/Ultimate-Automation-Testing-Guide-Resources-Best-Practices.png","type":"image\/png"}],"twitter_card":"summary_large_image","twitter_misc":{"Written by":"","Est. reading time":"31 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/simpleprogrammer.com\/ultimate-automation-testing-guide\/#article","isPartOf":{"@id":"https:\/\/simpleprogrammer.com\/ultimate-automation-testing-guide\/"},"author":{"name":"","@id":""},"headline":"The Ultimate Guide to Automation Testing: 74 Resources, Tools &amp; Best Practices for Test Automation","datePublished":"2018-02-23T15:00:12+00:00","dateModified":"2019-10-09T15:08:24+00:00","mainEntityOfPage":{"@id":"https:\/\/simpleprogrammer.com\/ultimate-automation-testing-guide\/"},"wordCount":6226,"commentCount":0,"image":{"@id":"https:\/\/simpleprogrammer.com\/ultimate-automation-testing-guide\/#primaryimage"},"thumbnailUrl":"https:\/\/simpleprogrammer.com\/wp-content\/uploads\/2018\/02\/Ultimate-Automation-Testing-Guide-Resources-Best-Practices.png","articleSection":["Automation","Best Practices","Guest Post","Pluralsight Courses","Skills","Testing"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/simpleprogrammer.com\/ultimate-automation-testing-guide\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/simpleprogrammer.com\/ultimate-automation-testing-guide\/","url":"https:\/\/simpleprogrammer.com\/ultimate-automation-testing-guide\/","name":"Automation Testing - 74 Resources, Tools & Best Practices for Test Automation","isPartOf":{"@id":"https:\/\/simpleprogrammer.com\/#website"},"primaryImageOfPage":{"@id":"https:\/\/simpleprogrammer.com\/ultimate-automation-testing-guide\/#primaryimage"},"image":{"@id":"https:\/\/simpleprogrammer.com\/ultimate-automation-testing-guide\/#primaryimage"},"thumbnailUrl":"https:\/\/simpleprogrammer.com\/wp-content\/uploads\/2018\/02\/Ultimate-Automation-Testing-Guide-Resources-Best-Practices.png","datePublished":"2018-02-23T15:00:12+00:00","dateModified":"2019-10-09T15:08:24+00:00","author":{"@id":""},"description":"In this post, you'll discover how to get started with automation testing, how automation testing saves time and effort while reducing software defects, the basics of building an automation testing framework, the most common design patterns for automation testing, and the best testing tools and resources.","breadcrumb":{"@id":"https:\/\/simpleprogrammer.com\/ultimate-automation-testing-guide\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/simpleprogrammer.com\/ultimate-automation-testing-guide\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/simpleprogrammer.com\/ultimate-automation-testing-guide\/#primaryimage","url":"https:\/\/simpleprogrammer.com\/wp-content\/uploads\/2018\/02\/Ultimate-Automation-Testing-Guide-Resources-Best-Practices.png","contentUrl":"https:\/\/simpleprogrammer.com\/wp-content\/uploads\/2018\/02\/Ultimate-Automation-Testing-Guide-Resources-Best-Practices.png","width":1280,"height":720},{"@type":"BreadcrumbList","@id":"https:\/\/simpleprogrammer.com\/ultimate-automation-testing-guide\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/simpleprogrammer.com\/"},{"@type":"ListItem","position":2,"name":"The Ultimate Guide to Automation Testing: 74 Resources, Tools &amp; Best Practices for Test Automation"}]},{"@type":"WebSite","@id":"https:\/\/simpleprogrammer.com\/#website","url":"https:\/\/simpleprogrammer.com\/","name":"Simple Programmer","description":"","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/simpleprogrammer.com\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Person","@id":"","url":"https:\/\/simpleprogrammer.com\/author\/"}]}},"_links":{"self":[{"href":"https:\/\/simpleprogrammer.com\/wp-json\/wp\/v2\/posts\/27687","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/simpleprogrammer.com\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/simpleprogrammer.com\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/simpleprogrammer.com\/wp-json\/wp\/v2\/users\/1113"}],"replies":[{"embeddable":true,"href":"https:\/\/simpleprogrammer.com\/wp-json\/wp\/v2\/comments?post=27687"}],"version-history":[{"count":0,"href":"https:\/\/simpleprogrammer.com\/wp-json\/wp\/v2\/posts\/27687\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/simpleprogrammer.com\/wp-json\/wp\/v2\/media\/27795"}],"wp:attachment":[{"href":"https:\/\/simpleprogrammer.com\/wp-json\/wp\/v2\/media?parent=27687"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/simpleprogrammer.com\/wp-json\/wp\/v2\/categories?post=27687"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/simpleprogrammer.com\/wp-json\/wp\/v2\/tags?post=27687"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}