Are user acceptance test (UAT) and end-to-end (E2E) test the same thing?
Asked Answered
K

4

43

I've been trying to find the answer to this question online but I have not been able to find good enough to make me feel sure about the answer.

I believe they are essentially the same but user acceptance test (UAT) requires a real user while end-to-end (E2E) test uses automated tools to simulate the users?

Keble answered 14/5, 2015 at 19:31 Comment(0)
B
50

User Acceptance Test is a phase in a typical software development process.

From the other side, End-To-End test is one of the approaches to testing the complex applications which involves all layers of the application to interact with each other during test execution.

It means that you can execute End-to-End test in User Acceptance Test phase, and you can't consider those two terms as one, that has the same meaning.

Bernabernadene answered 14/5, 2015 at 20:15 Comment(0)
S
23

TLDR;

Acceptance and End-to-end tests are designed to test the applications functionality from a users perspective, you can group these together as "Functional tests". Do not mock database or network access, these tests should run against a production environment. Use TestCafe.

Unit tests cover a unit of work which means a single method. Mock dependencies like database or network access. Use Jest.

Integration tests cover multiple units of work that are related, for example a single/multiple ReactJS components. Mock dependencies like database or network access. Use Jest.


Acceptance and End-to-end tests are designed to test the applications functionality. They are usually created by BA, QA, and Engineering before development starts, and then automated by an engineer during development.

1. End to end tests (Actions)

Often a manual effort by someone on the team to make sure all of the functionality still works after new updates. This can be automated by using a UI testing tool like TestCafe.

For example "An authenticated user can start a job application, input all relevant details, and submit the application."

2. Acceptance tests (Visual)

Acceptance tests are automated with tools like Jest/TestCafe and concentrate on story functionality and/or what exists on a page if an action occurs.

For example "An authenticated user can view all job applications on the dashboard page."

3. Unit tests

Created during development by the engineer. Tests a unit of work which could be a single method, or a method that is composed of multiple private methods. A good rule of thumb would be to only test the public interface of a class.

Private methods don't always necessarily need to be tested as they are part of a unit of work. But in the case where there is complex logic in the private method it might be a good idea to test it in isolation. You could use Jest while mocking dependencies of the unit of work like database and network access.

4. Integration tests

Created during development by the engineer. Tests a unit of work without mocking. Generally focuses on a wider scope than a unit test. For example, creating a user might include storing details in the database, sending a web request to a service, and responding to the client. Often requires an in-memory web server to run the tests. Use Jest.

Sam answered 6/7, 2018 at 10:47 Comment(0)
F
6

End-to-End testing is typically performed by a technical QA team, whereas User Acceptance Testing is typically performed by a business user. The perspectives are different, and while some duplication of effort could happen, the defects identified may vary.

Fingerbreadth answered 19/10, 2017 at 13:53 Comment(0)
L
3

Quite frankly, we don't have general exact meaning for different levels of testing. There is a lot of different meaning or terminology for each phase of testing in TDD world. Some uses acceptance test as end to end test and some uses those terminologies interchangeably. For example in the very famous TDD book, Steve Freeman distinguish each level just like this:

Levels of Testing:

  1. Acceptance: Does the whole system work?

  2. Integration: Does our code work against code we can't change?

  3. Unit: Do our object do the right thing, are they convenient to work with?

One might say those definitions are too broad and may not be so accurate. But the point of testing is to make sure the whole application works as intended and is solid for extension as the new features being added.

Some define integration tests as testing couple of interactions with units of your application, some define it as dependency testing. The meanings can change but the purpose is never changes, ensuring working application. I'd say that each organisation has different style of testing processes, so do not seek an exact definitions for TDD terms. Just get a general sense of those and intensions of usages.

Leia answered 18/4, 2020 at 18:6 Comment(1)
I would say there is a distinction between Acceptance, E2E, and Integration. This article helps in defining the terminologies. One thing to learn is Behavior Driven Development (BDD), it requires the use of acceptance tests to be automated.Octahedrite

© 2022 - 2024 — McMap. All rights reserved.