Tests give us an assurance which application works fine. We usually want to execute them on some Continuous Integration servers. It is very convenient because we can configure them to run after each repository commit or once a day.
Continuous integration flow usually works as follows. The application is built on CI server and then it executes all tests. Because all tests run on the same database, it is hard to make all them all independent. However, test independence is a very important principle. The result of one test may affect the correctness of another test. It is especially problematic if we want to run tests in parallel. We can’t be sure what will be the order of execution. It is not only the problem of the database. The browser can also store a state of the application.
What is a Test Case? What does it include?
A Test Case is a step by step description of the testing process and a set of conditions under which a tester can determine if the application works as expected.
– test case description
– test steps
– expected result
Sometimes we need to create a system exposed to a public web application. We may even need to create it for the broad group of customers. In that case, we need to develop it working on many different types of browser versions. In usual development, we would be forced to open the website in each browser ant test in manually. It would be very beneficial if we can automate it.
We can perform testing on multiple browsers very simple using Selenium WebDriver. We will just use its ability to works with different drivers and configure them.
Some time ago I noticed some interesting fact. Developing application in the real world doesn’t mean just writing code. Definitely not in modern development. Before we start coding, we have to know what we want to create and how it should look like. Moreover, after the writing code, we ensure that it works fine. It doesn’t have bugs, it can handle the incoming traffic, and so on … After creating the project we have plenty of work to do. When…
Read More Read More
In this post, I want to show you the principles of the most useful pattern for end-to-end testing. I will use Selenium for all examples. I assume that you know this tool. It would be easier to explain some things.
Selenium WebDriver gives us powerful tools for writing end-to-end tests. We can imitate the user behavior on every aspect. However, it doesn’t come without some pain. It has several problems that testers must deal:
Some times ago I faced the problem with the low quality of the customer’s demonstration. When we try to present our application for the wider audience, we have problems with doing some basic scenarios again and again. We thought that we well tested this functionality. We were using it every day, and everybody in our team was checking it after each change. However, the application functionality still evolving. Moreover, any modification of the code may result in changing final functionality. Because of many changes before demo we can’t test it enough to be 100% sure that everything works fine.
ProtractorJs is an end-to-end framework written for AngularJS applications. It uses Selenium WebDriver features internally. The main advantage of the regular WebDriver test is an ability to cooperate well with SPA application. The main problem with this type of systems is asynchronization. Single Page Applications change their look without reloading the whole page. So it is very hard to determine when the application is ready for action. Fortunately, Protractor knows the Angular internal mechanisms, so he is aware when application finish all operations.
Many people think that testing is a subject that only testers should worry about them. I completely disagree with that statement. I can event say that developers can write better tests technically and faster. They know the application. They have technical knowledge about creating reusable code and good architecture. Nevertheless, they shouldn’t write an end to end acceptance tests. They are too focused on functionalists that write. So it is possible that they repeat the testing patterns from the development time, not on overall application image.
Before we start testing, we should ask yourself some very important questions.
– Why do we want to test? – is helps us to answer the next question
– When do we need to start testing?
– What do we want to test?
Some time ago I faced a big dilemma. In our company, we have two teams: back-end and front-end. When we start thinking about end-to-end testing in our current project, the discussion begins. We were thinking about the best technology to do it. We are using AngularJs in this project, so we want to take advantage of Protractor library. It is the library for testing Angular Single Page Applications without waiting after each action.
We have two possibilities.
– write in TypeScript in JS environment,
– write in C# and .NET environment