About the
Speaker
Hey there,
I’mSwapnil Narayan, a graduate from
IIT(ISM) Dhanbad with Computer Science
majors.
I’m a Software Engineer at Microsoft India,
and have also got offers from Amazon and
Oracle for Software Engineering roles.
I’m a very passionate Programming
Instructor and have a decent experience
for the same at various popular edtech
platforms, and have taken sessions with
IITs, NITs, and other engineering colleges .
I will be your mentor for this session and
will walk you through the topics the
following slides.
3.
About the
Session
In thisSession, I will be delivering
all possible guidance for end to end
automation testing and will make
sure for you to inculcate and master
them with ease.
We will be discussing ideas on the
best tool for writing e2e tests our
major objective will be to develop
your testing skills.
Curious how we gonna do that?
Let’s dive into the world of Testing.
5.
What is Automation?
Automationtesting is a software testing methodology that aims to
simulate real user scenarios by testing an application's flow from
start to finish. It involves testing the entire software system,
including all its components, subsystems, and dependencies, to
ensure that they function correctly together.
Overall, end-to-end testing helps ensure that all components of a
software system work together harmoniously, providing a
seamless and reliable user experience. By validating the complete
flow of an application, it helps identify issues that may not be
caught by individual component tests, thereby improving the
overall quality and reliability of the software.
6.
Automation: Key Pointers
●Scope: E2E testing focuses on testing the application as a whole,
including its user interface, backend services, APIs, databases,
integrations, and external dependencies.
● User Scenarios: E2E tests replicate real-world user interactions and
workflows, covering multiple steps or use cases. These tests validate
the application's behavior and functionality from a user's
perspective.
● System Integration: E2E testing verifies the interactions between
different components and systems to ensure smooth integration
and interoperability. It helps identify issues that arise due to
dependencies between different parts of the system.
7.
Automation: Key Pointers
●Test Environments: E2E tests are typically performed in an
environment that closely resembles the production environment,
including the same infrastructure, configurations, and data.
● Automation: E2E tests are often automated to improve efficiency and
repeatability. Automation frameworks and tools, such as Cypress,
Selenium, or Puppeteer, are commonly used to write and execute
E2E test scripts.
● Time and Resources: E2E tests can be time-consuming and resource-
intensive due to their comprehensive nature. They are usually
executed less frequently compared to unit tests or integration tests.
8.
Cypress vs Selenium:Cypress
● Cypress is a JavaScript-based end-to-end testing
framework.
● It operates directly in the browser and offers real-time
interaction and debugging.
● Cypress has a simpler setup and provides built-in support
for automatic waiting and time-travel debugging.
● Tests written in Cypress are more stable and deterministic
due to the direct control over the application under test.
● Cypress runs only in modern browsers and does not
support cross-browser testing out-of-the-box.
● It has a smaller learning curve for developers familiar
with JavaScript.
9.
Cypress vs Selenium:Selenium
● Selenium is a popular open-source framework for
automating web browsers.
● It supports multiple programming languages, including Java,
C#, Python, and more.
● Selenium allows testing across different browsers and
operating systems, providing broader cross-browser
compatibility.
● Selenium requires explicit waits for elements to become
available and lacks built-in time-travel debugging.
● Selenium tests can be slower due to the need for remote
WebDriver communication with browsers.
● It has a larger community and more extensive ecosystem
with various plugins, integrations, and frameworks.
Key Pointers
● TimeTravel: Cypress takes snapshots of the application's
state at each step, allowing you to easily navigate and
debug.
● Automatic Waiting: Cypress automatically waits for
elements to become available, eliminating the need for
explicit waits.
● Real-Time Reloads: Changes to the code are automatically
reloaded in the browser, providing a smooth developer
experience.
● Easy Debugging: Cypress offers built-in debugging tools,
including console logs and element inspection.
● Network Stubbing: Cypress allows you to intercept and
12.
Setting up Cypress
●Install Node.js and npm (Node Package Manager) from
https://nodejs.org.
● Create a new directory for your Cypress project.
● Open the command line and navigate to your project
directory.
● Run the following command to initialize a new npm project:
npm init -y.
● Install Cypress using the command: npm install cypress --
save-dev.
● Once installed, you can open Cypress with the command:
npx cypress open.
● Cypress Test Runner will launch, allowing you to select and
run your tests.
13.
Writing Cypress Tests
●Cypress tests are written in JavaScript and run in the
browser.
● Tests are organized into files and folders within the
"cypress" directory.
● Cypress provides a powerful API for interacting with
web elements and making assertions.
● The API includes commands for navigating, selecting
elements, interacting with forms, and making
assertions.
● Cypress supports different test styles, including
behavior-driven development (BDD) with describe and
it blocks.
14.
Example: Login Test
●Visit the login page.
● Enter valid credentials.
● Click the "Login" button.
● Assert that the user is successfully logged in.
15.
Examples: Login Test
describe('Login',() => {
it('should log in with valid credentials', () => {
cy.visit('/login');
cy.get('#username').type('myusername');
cy.get('#password').type('mypassword');
cy.get('#loginButton').click();
cy.url().should('include', '/dashboard');
});
});
16.
Example: Form ValidationTest
● Visit the registration page.
● Enter invalid data into the form fields.
● Submit the form.
● Assert that appropriate validation messages
are displayed.
17.
Example: Form ValidationTest
describe('Registration Form', () => {
it('should display validation messages for invalid data', ()
=> {
cy.visit('/register');
cy.get('#name').type('John Doe');
cy.get('#email').type('invalidemail');
cy.get('#password').type('password123');
cy.get('#confirmPassword').type('password456');
cy.get('#submitButton').click();
cy.contains('.error-message', 'Invalid email format');
cy.contains('.error-message', 'Passwords do not match');
});
18.
Example: Form ValidationTest
describe(Amazon, () => {
it('should route to amazon website when clicked on logo',
() => {
cy.visit('/home);
cy.get('#logo).click();
cy.url.should('include', '/home)
});
});
19.
Best Practices
● Writeindependent tests that can run in any order.
● Use descriptive and meaningful test and
assertion names.
● Leverage Cypress' built-in retry mechanisms
instead of using explicit waits.
● Utilize custom commands to encapsulate
common actions and assertions.
● Maintain a clean test environment by resetting
data before each test.
20.
Conclusion
● Cypress isa powerful automation testing
framework for web applications.
● It offers numerous features that simplify and
enhance the testing process.
● By following best practices, you can create robust
and maintainable Cypress tests.
● Start exploring Cypress today and leverage its
capabilities for efficient test automation.
21.
Liked it?
Thank youfor attending the session!
Lets connect over LinkedIn and share success
stories