My company has recently decided to start training me on test automation. They have asked me to look into courses that will enable me to start automating repetitive test cases and also regression packs. My company doesn't have automation in place so it's hard to ask people what they would suggest.

A bit of background; My company is a .net house that builds CMS solutions using Episerver, Umbraco etc. From discussions, my company will be using Microsoft test manager in TFS, but I'm not familiar with the automation frameworks used.

Has anyone been in this position? My company is willing to invest a lot of time and money so I need to make sure I'm learning the right subjects/skills.

What did you learn that helped with the transition to automation? e.g. c#, java, sql, strong programming knowledge, good knowledge of databases, selenium courses etc.

Any help would be greatly appreciated and any links to learning material/suggested courses would really help.

Thanks in advance.

6 Answers 6


Even if you may end up using C#, consensus of experts suggests that Python is the best language for beginner programmers. Use either standard Python for Windows, or IronPython for .NET (which allows for some cool stuff).

Learning 2 languages (C# later I assume) will allow you to distinguish between complexities/quirks in language vs in algorithm, which will make you better programmer.

There is no reason to waste time learning java, C# is better fit and Java adds very little.

SQL/databases would be helpful and "nice to know" but secondary.

Find a good developer who can mentor you while learning programming (computational mindset) and debugging.

Would be helpful if your mentor know Python. Python is good tool to know for parsing text files, shuffling files in directories etc, creating small little custom tools, even if would be not used to writing automated tests. And if you can get away with it, write your tests in Python, for increased productivity.

Work on your googling skills. Good start would be to find at least a dozen questions similar to yours in this very forum related to how automated tester can learn programming and transition to test automation. :-)

Why Python is especially good as first language?

First language is the hardest to learn, so it should be easy, but allow to build important understanding of important programming concepts.

My favorite features for beginners are:

  • interpreter allows beginner to start learning and experimenting in first 10 minutes, way before concept of program is explained. And later, explore libraries. Instead of writing simple program to test a library, you just poke around in interpreter.
  • debugger allows to explore programming objects as they exists in live code (and not as you thought they will).
  • dynamic strict typing so programmer does not have to declare variable types like in Java (variable names "just work"), but wrong type conversion fails (unlike dynamic weak typing in Perl and JavaScript), friendly to both beginner and expert, and scaling to big projects better
  • whitespace for code structure has dual benefit of enforcing what is "best practice" in all other languages, and making code of other people easier to read - which simplifies sharing the code and creating communities around it
  • runtime errors instead of checked exceptions
  • helpful community friendly to beginners with lots of free online resources for beginners and experts.

MIT uses Python as first language. Google has philosophy "Python where we can, C++ where we must", and Python is language for next 100 years.

For hilarious rant against strong typing and forced OO in Java read Execution in the Kingdom of Nouns . Do not miss the fairy tale "For the lack of the nail", converted to Java as the example of OO running amok.

Learning Python will make you a better programmer in other languages. Especially if you will follow Zen of Python, rules of life in and out of programming like: In the face of ambiguity, refuse the temptation to guess.

  • Please add a source why Phyton "is" the best langauge for beginner programmers? I could say the same about PASCAL, which was concepted as a language for beginners (Source: Niklaus Wirth: The Programming Language Pascal, Acta Informatica, Band 1 (1971), S. 35-63)
    – bish
    Dec 2, 2015 at 6:10
  • Yes, but Pascal is long dead and lacks many features of contemporary languages, like OO, list processing, and huge base of libraries and users. Python is 20 years younger, is widely used and growing. It was not intended for beginners, but for professionals who have other things to do - so language works much harder to make programmer more productive. Dec 2, 2015 at 14:45
  • I know that PASCAL doesn't have this features. The only thing I want to achieve with my comment is that those fundamental answeres are based on sources and not on personal allgeations without marking them as such. Just like in a scientific paper.
    – bish
    Dec 2, 2015 at 18:11
  • It is quite hard to make controlled experiment in teaching someone a first programming language. It takes a long time, and you can teach a person first programming language only once. I know Pascal - I even used in decades ago. Do you know Python? Dec 2, 2015 at 18:17
  • I changed "research suggests" to "expert opinion suggests". There are some papers published about comparing using Python as first language vs Java or C++, but I have no time to look them up now. Anecdotal evidence is overwhelming, so... Dec 2, 2015 at 18:21

My recommendation:

Work with co-workers to introduce you to C#, Visual Studios and such.

Once you have an understanding of it, learn about Unit Testing.

My personal favorite flavor is using Selenium Page Objects with SpecFlow in C#. For me it provides the most extensive code reusability.

The reason for my recommendation:

Knowing several development languages, I typically try to stick with the local flavor at the company/team. This way if you quit, get hit by a bus, have a family emergency or want to take a vacation progress doesn't halt. Someone else can help. Also, your company has already paid your tutors and most developers would love to assist QA to become more technical and understand their struggles.


The first thing you need to know here is that Microsoft Test Manager is a tool for test management and assisting manual testing than it is for test automation. TFS is a full application life-cycle management tool, and MTM will not run without a linked TFS server.

The automation tools that integrate seamlessly with TFS/MTM are Microsoft CodedUI and Microsoft unit testing (although other types of unit test frameworks are also supported).

Test cases can be created in MTM, the TFS web portal, and Visual Studio. The last time I checked, the only place a test case can be linked to automation code is in Visual Studio. I believe in TFS 2013 and higher test suites can be created in the TFS web portal as well as in MTM, but I don't think even later version of TFS allow remote management of automation from anything except MTM.

That said, you should, in theory, be able to use any language that Visual Studio supports to build automation - the way you link automation to test cases in the TFS ecosystem is to associate a test case with a coded method.

As far as the language to use, I'd suggest that you go with whatever your programmers use because that way you'll have two advantages:

  • You can get help from programmers with the more difficult code issues.
  • You may be able to have programmers help write automation code.

In my experience any modern language is much like any other modern language. Once you get familiar with the syntax, they all use similar structures and you can google for standard libraries and methods (and if they don't exist, probably find out how to do what you need on Stack Overflow). The only caveat I'll give is that if you start with a language that doesn't use pointers, you'll have trouble migrating to one that does.

The big thing to remember is that automation is coding. Good coding practices apply, and you will be constantly maintaining and refactoring and building on the automation you create.


Test automation is coding. So learning some coding skills is a must. Then start working on the test-pyramid and work up one level at a time. Most suggest to start at the top. This seems most logical, but the top is also the most complex. The top levels also re-use testing frameworks used at the lower levels.

I advise the start at the bottom, because there is a large risk your teams will only write top-level end-to-end tests which lead to the ice cone anti-pattern.

Steps to learn test automation:

  1. Learn a programming language on a basic level.
    • Pick either JavaScript, Python or the main language your team is using
      1. Python easy to learn and includes a testing framework
      2. JavaScript the language of the web, you might need to learn this anyway to test web-pages. Have a look at freecodecamp for learning this and web-development.
      3. Use the language of your team to get help close by.
    • If/then/else, loops, variables and classes should be enough for now
  2. Start with learning unit-testing
  3. Create integration tests
    • Multiple classes
    • Bootstrap the application
    • Database testing (Developers always struggle with this, help them by understand what to test, maybe postpone this until later)
    • API/Rest testing
  4. Create end-to-end UI tests
    • Selenium/WebDriver
    • Try other frameworks and tools
  5. Create BDD test-cases
    • Cucumber
    • Try other frameworks and tools
  6. Load testing
    • JMeter
    • Try other frameworks and tools

In the ideal world you build a simple application yourself where you can practises testing all these levels of testing. This so you know the trouble developers are running into.


Excellent answer from Peter Masiar. I'd like to add that scripting is mainly a technical skill, while testing as you did it before is mainly a functional skill. The jump may be impressive. Yet, knowing both technical & functional aspects is an important career asset.

Don't be afraid toying with a few different languages, as they all have something to teach you. Python is an obvious start, and be sure to toy a little bit with the 4 paradigms(all present in Python) : imperative procedural, functional, object. Here is an example link

Test Scripting is a specific subset of computer programming, and knowing every paradigm helps you finding better solutions to your problems.


My suggestion: Start with the Selenium IDE in firefox

Home: http://www.seleniumhq.org/
Downlad 2.9 at http://release.seleniumhq.org/selenium-ide/2.9.0/selenium-ide-2.9.0.xpi

Within minutes you can have real test cases running against web pages.

You can use variables, page objects, learn css and xpath and good object naming and so much more.

Later on move on to a framework built on top of a language, for example rspec-capybara, built on top of ruby.

I myself have done this actual path in more than one company where I've been the one introducing automated UI testing.

Starting at the other end with a programming language like Ruby or Python is a great idea, but will not be for everyone.

Not the answer you're looking for? Browse other questions tagged or ask your own question.