A Concise Guide to Software Testing Principles and Practices

These excerpts extensively discuss software testing, covering its fundamental principles, the systematic software testing life cycle (STLC), and various testing types and levels. It differentiates between functional and non-functional testing, exploring specific methodologies like black box, white box, and gray box techniques. Furthermore, the text examines test automation, its benefits, implementation steps, tool selection, and comparison with manual testing, including guidance on when automation is most and least appropriate, alongside discussions on agile testing, API testing, regression testing, and the creation of effective test plans and test cases, concluding with a section on common interview questions in software test automation.

Software Testing Study Guide

Quiz

  1. What is the primary purpose of acceptance testing? Acceptance testing aims to evaluate the software system’s compliance with business requirements and determine if it is acceptable for delivery to end-users or stakeholders. This level of testing is often performed by management, sales, customer support, and even the end-users themselves.
  2. Differentiate between load testing and stress testing. Load testing evaluates a system’s behavior under increasing expected workload to monitor response time and stability. Stress testing, on the other hand, assesses the system’s behavior at or beyond its anticipated workload limits to determine its breaking point and resilience.
  3. Explain the concept of regression testing. Regression testing is performed after code changes, such as adding new features or fixing bugs, to ensure that these modifications have not negatively impacted existing functionalities or introduced new defects. It verifies that the software still works according to its specifications.
  4. Describe the V-model of software development and testing. The V-model is a sequential development approach where each development phase is associated with a corresponding testing phase. For example, requirements gathering is linked to acceptance testing, high-level design to system testing, detailed design to integration testing, and coding to unit testing, emphasizing parallel verification and validation.
  5. What is equivalence partitioning in black box testing? Equivalence partitioning is a black box testing technique that divides the input data of a software into groups (equivalence classes) such that all members of each group are expected to be processed in the same way. This allows testers to select one representative value from each class to test, reducing the total number of test cases.
  6. Explain the main principle behind boundary value analysis. Boundary value analysis is a black box testing technique that focuses on testing the values at the edges or boundaries of input domains, as well as values just inside and outside these boundaries. The principle is that errors are more likely to occur at these boundary points rather than within the center of the input range.
  7. What is statement coverage in white box testing? Statement coverage, also known as line coverage, is a white box testing technique that aims to ensure that every executable statement in the source code has been executed at least once during testing. It helps identify parts of the code that have not been tested.
  8. Contrast statement coverage and decision (branch) coverage. While statement coverage ensures every line of code is executed, decision coverage (or branch coverage) goes further by ensuring that every possible outcome (true or false) of each decision point (e.g., if statements, loops) in the code is tested at least once. Decision coverage includes statement coverage.
  9. What is the purpose of a test plan? A test plan is a document that outlines the strategy, scope, objectives, schedule, and resources required for testing a software product. It defines what will be tested, how it will be tested, who will do the testing, and when the testing activities will occur.
  10. Describe the objectives of sanity testing. Sanity testing is a quick, initial evaluation performed after a new software build or code changes to determine if the changes are stable and rational enough for further, more rigorous testing. Its objectives include verifying the newly added functionalities, evaluating the correctness of bug fixes, and ensuring that the changes haven’t negatively impacted existing features.

Quiz Answer Key

  1. Acceptance testing primarily aims to evaluate the software system’s compliance with business requirements and determine if it is acceptable for delivery. It is often performed by stakeholders like management, sales, customer support, and end-users.
  2. Load testing assesses system performance under expected workloads, focusing on response times and stability. Stress testing evaluates system behavior at or beyond anticipated limits to find breaking points and assess resilience under extreme conditions.
  3. Regression testing is performed after code modifications to ensure that new features or bug fixes have not introduced new defects or negatively affected existing functionalities, confirming the software still meets specifications.
  4. The V-model is a software development lifecycle model where each development phase has a corresponding testing phase performed in parallel, emphasizing verification at each stage of development.
  5. Equivalence partitioning is a black box technique that divides input data into groups (classes) that are expected to be processed similarly, allowing testers to choose one representative value per class for testing.
  6. Boundary value analysis is based on the principle that errors are more likely to occur at the boundaries of input domains, so it focuses on testing values at and around these limits.
  7. Statement coverage (line coverage) is a white box technique that ensures each executable statement in the source code is executed at least once during testing.
  8. Statement coverage ensures every line of code is run, while decision coverage ensures that all possible outcomes of each decision point (branches) in the code are tested, thus providing more comprehensive testing than statement coverage.
  9. A test plan defines the strategy, scope, objectives, schedule, and resources for software testing, outlining what, how, who, and when testing activities will take place.
  10. Sanity testing aims to quickly evaluate the stability and rationality of a new software build or changes to decide if it’s suitable for further rigorous testing by verifying new features, bug fixes, and the impact on existing functionalities.

Essay Format Questions

  1. Discuss the importance of both functional and non-functional testing in ensuring the quality of a software product. Provide examples of different types of each testing category and explain how they contribute to a reliable and user-friendly application.
  2. Compare and contrast different black box testing techniques such as equivalence partitioning, boundary value analysis, and use case testing. Explain the scenarios in which each technique would be most effective and highlight their individual strengths and limitations in identifying software defects.
  3. Analyze the relationship between software development lifecycle models (such as the Waterfall model and the V-model) and the integration of testing activities. Discuss how different models emphasize testing at various stages and the potential benefits and drawbacks of these approaches in ensuring software quality.
  4. Evaluate the significance of performance testing in modern software development, especially for web and mobile applications. Discuss the various types of performance testing (load, stress, endurance, spike) and explain how each helps in identifying and mitigating potential performance bottlenecks and ensuring a positive user experience.
  5. Critically assess the role of automation in software testing. Discuss the advantages and challenges of implementing test automation, considering different types of testing (e.g., unit, regression, performance). Provide examples of tools and frameworks used for test automation and analyze their impact on the efficiency and effectiveness of the testing process.

Glossary of Key Terms

  • Acceptance Testing: A level of software testing conducted to determine if a system satisfies its acceptance criteria and is acceptable for delivery to the end-users.
  • Alpha Testing: Acceptance testing performed by a specialized team of testers within the development environment.
  • Beta Testing: Acceptance testing performed by real end-users in their own environment.
  • Black Box Testing: A testing approach where the internal structure or code of the software is not known to the tester. Testing is based on inputs and outputs.
  • Boundary Value Analysis (BVA): A black box testing technique focused on testing values at the edges of input domains.
  • Decision Coverage (Branch Coverage): A white box testing technique that ensures every possible outcome of each decision point in the code is tested.
  • Endurance Testing: A type of performance testing conducted to evaluate a system’s behavior under a significant workload for an extended period.
  • Equivalence Partitioning (EP): A black box testing technique that divides input data into groups that are expected to be processed in the same way.
  • Functional Testing: Testing that focuses on the functions and features of the software, verifying that they operate as expected based on requirements.
  • Integration Testing: Testing that verifies the interaction and communication between different modules or components of a software system.
  • Load Testing: A type of performance testing conducted to evaluate the behavior of a system under increasing workload.
  • Non-Functional Testing: Testing that focuses on aspects of the software other than its functionality, such as performance, reliability, and security.
  • Performance Testing: Testing conducted to evaluate the response time, stability, scalability, and resource utilization of a software system under various workloads.
  • Regression Testing: Testing performed after code changes to ensure that existing functionalities have not been adversely affected.
  • Reliability Testing: Testing conducted to determine the probability of failure-free software operation for a specified period under stated conditions.
  • Sanity Testing: A brief initial test to determine if a new software build is stable enough for further rigorous testing.
  • Smoke Testing: A preliminary testing performed after a software build to verify that the critical functionalities are working.
  • Spike Testing: A type of performance testing conducted to evaluate a system’s behavior when the load is suddenly and substantially increased.
  • Statement Coverage (Line Coverage): A white box testing technique that ensures every executable statement in the source code has been executed at least once.
  • Stress Testing: A type of performance testing conducted to evaluate the behavior of a system at or beyond the limits of its anticipated workload.
  • Test Case: A specific set of conditions under which a tester will determine whether a software application, system, or one of its features is working as it was originally designed to do.
  • Test Plan: A document outlining the objectives, scope, approach, schedule, and resources for a testing effort.
  • Unit Testing: Testing of individual software components or modules in isolation.
  • Use Case Testing: A black box testing technique where test cases are designed based on the various ways users can interact with the system.
  • V-Model: A software development lifecycle model that emphasizes the relationship between each development phase and a corresponding testing phase.
  • White Box Testing: A testing approach where the tester has knowledge of the internal structure or code of the software. Testing involves examining the code and its logic.

Software Testing: Concepts and Techniques

## Briefing Document: Software Testing Concepts and Techniques

This briefing document summarizes the main themes and important ideas presented in the provided sources related to software testing. It covers various types of testing, testing techniques, testing methodologies, test planning, test case writing, and popular testing tools and frameworks.

**1. Fundamentals of Software Testing**

* **Purpose:** The primary goal of software testing is to ensure the software application performs well under expected workloads, identify defects before deployment, and validate that the system meets specified requirements and is acceptable for delivery.

* As stated in “01.pdf”, “The purpose of this test is to evaluate the systems compliance with the business requirements and assess whether it is acceptable for delivery.”

* **Importance:** Reliable software is crucial across various sectors, including manufacturing, healthcare, defense, and finance, building confidence in business systems.

* “therefore the question is that how reliable the software application is this question is very very important because the Reliable Software is of great use and the organization working on it can feel the confidence in their business systems.”

**2. Types of Software Testing**

The sources broadly categorize testing into functional and non-functional testing.

**2.1 Functional Testing:** Focuses on what the system does.

* **Unit Testing:** Performed by developers to test individual code units for correct behavior. Code coverage (line, path, method) is a key aspect.

* “unit testing is usually performed by a developer who writes different code units that could be related or unrelated to achieve a particular functionality.”

* **Sanity Testing:** A quick evaluation after a build to ensure major functionalities are working and the build is stable enough for further testing. It’s a surface-level check.

* “sanity testing aims at checking whether the developer has put some same thoughts while building the software product or not… to determine whether it is eligible for further rounds of testing or not.”

* **Smoke Testing (Build Verification Testing):** Done after each build release to ensure build stability.

* “testing that is done after each build is released to test in order to ensure build stability is known as the smoke testing.”

* **Regression Testing:** Ensures new code changes (enhancements, bug fixes) do not negatively impact existing functionality.

* “testing performed to ensure that adding new code enhancements fixing of bugs is not breaking the the existing functionality or causing any instability…”

* **Integration Testing:** Verifies the coherent working of multiple functional modules when combined. Different approaches include top-down (using stubs for missing lower-level modules) and bottom-up (using drivers for missing higher-level modules).

* “validation of such scenarios is called integration testing”

* Regarding top-down: “what you do you employ or deploy stops instead of these origal module since they’re not developed yet these TBS simulate the activity of M2 M3 and M4.”

* Regarding bottom-up: “here the bottom level units are tested first and upper level units are tested then step by step after that.”

* **Acceptance Testing:** Determines if the system is acceptable for delivery and meets business requirements. Often performed by management, sales, customer support, end-users, and customers. Types include User Acceptance Testing (UAT), Business Acceptance Testing, Contract Acceptance Testing, Operational Acceptance Testing (OAT – non-functional aspects like recovery, compatibility), Alpha Testing (internal specialized testers), and Beta Testing (real end-users in their environment).

* “acceptance testing is a level of software testing where a system is tested for acceptability the purpose of this test is to evaluate the systems compliance with the business requirements and assess whether it is acceptable for delivery.”

* **Positive Testing:** Testing with valid inputs to ensure the system behaves as expected.

* **Negative Testing:** Testing with invalid inputs to verify error handling and system robustness.

**2.2 Non-Functional Testing:** Focuses on how well the system performs.

* **Documentation Testing:** Evaluates the quality and accuracy of software documentation (test plans, test cases, requirements). Focus areas include instructions, examples, messages, and samples.

* “documentation testing helps to estimate testing efforts required and test coverage now software documentation includes test plan test cases and requirements section”

* **Installation Testing:** Checks if the software is successfully installed and works as expected after installation.

* “installation testing checks if the software application is successful fully installed and it is working as expected after installation.”

* **Performance Testing:** Assesses the system’s performance under various conditions. Types include:

* **Load Testing:** Evaluates behavior under increasing workload.

* “conducted to evaluate the behavior of a system at increasing workload”

* **Stress Testing:** Evaluates behavior at or beyond anticipated workload limits.

* “conducted to evaluate the behavior of a system at or beyond the limits of its anticipated workload”

* **Endurance Testing:** Evaluates behavior under a significant continuous workload.

* “conducted to evaluate the behavior of a system when a significant workload is given continuously”

* **Spike Testing:** Evaluates behavior when the load is suddenly and substantially increased.

* “conducted to evaluate the behavior of a system when the load is suddenly and substantially increased”

* Tips for performance testing include establishing a production-like test environment, isolating the test environment, researching and choosing appropriate tools, conducting multiple tests, and being aware of test environment changes.

* **Reliability Testing:** Assures the product is fault-free and reliable for its intended purpose over a specific period. Types include feature tests, regression tests, and load tests (for reliability under load).

* “assures that the product is fault-free and is reliable for its intended purpose it is about exercising an application so that failures are discovered before the system deployed.”

* **Security Testing:** Ensures data and resources are protected from unauthorized access.

* “helps in determining that its data and resources are protected from possible Intruders”

**3. Software Development and Testing Models**

* **V-Model:** An extension of the waterfall model where each development phase is associated with a corresponding testing phase. Emphasizes verification and validation in parallel. Phases include requirement (acceptance testing), high-level design (system testing), detailed design (integration testing), coding (unit testing). Advantages include simplicity, ease of understanding, suitability for small projects, and cost-effectiveness. Disadvantages include inflexibility to changes, testing often squeezed at the end, and lack of inherent defect elimination.

* “each testing phase is associated with a phase of development cycle”

* “requirement phase is associated with acceptance testing… high level design phase which relates to system testing… detailed design phase which is in parall to integration testing… coding stage begins where you have another necessary phase that’s nothing but un testing”

* **Incremental Model:** Views the development process as a series of cycles or builds, with each increment adding specific functionality. Each increment includes design, development, testing, and implementation. Considered a “multi-waterfall” model.

* “you can consider the incremental model as a multi- waterfall model of software testing the whole incremental process here is divided into various numbers of cycles each of them is further divided into smaller modules”

**4. Black Box Testing Techniques:** Testing without knowledge of the internal code structure.

* **Equivalence Partitioning:** Divides input data into classes where all members are expected to be processed similarly. Test cases are designed to cover one value from each valid and invalid partition, reducing the number of test cases.

* “you divide the number of input values into possible test cases… you pick up a value and perform a test case or execute the test case since rest of the values come in the same category whatever the result you get for the particular value which you take can be applied to that other values as well”

* **Boundary Value Analysis:** Focuses on testing values at the boundaries of input domains, as errors often occur at these points (maximum, minimum, just inside/outside boundaries). Includes positive and negative testing.

* “test cases are designed to include values at the boundaries if the input is within the boundary value it’s considered positive testing if the input is outside the boundary value it’s considered negative testing.”

* **Decision Table Based Technique:** Uses tabular representation of conditions (inputs) and actions (outputs) to identify all possible input combinations and their expected outcomes. Also known as the cause-effect table technique. Useful for functionalities with multiple input dependencies.

* “a decision table basically is a tabular representation of different possible conditions versus test actions you can think of conditions as inputs while actions can be considered as outputs.”

* **State Transition Diagram:** Analyzes the application’s behavior for different input conditions in a sequence, especially for finite state systems where the output for the same input can vary based on the system’s history. Involves creating a state transition diagram, a state table, and designing test cases from them.

* “the tester analyzes the behavior of an application on the test for different input conditions in a sequence… you can use this technique when your system is giving out different output for same input depending on what has happened in the earlier state.”

* **Use Case Testing:** Derives test cases from use cases, which define user interactions with the system. Focuses on user actions and the system’s responses.

* “a use case is basically a tool for defining the required user interaction it depends on user actions and the response of the system to those user actions.”

**5. White Box Testing Techniques:** Testing with knowledge of the internal code structure.

* **Statement Coverage (Line Coverage):** Ensures every statement in the source code is executed at least once.

* “every statement in the source code is executed at least once so each line of the code is tested…”

* **Decision Coverage (Branch Coverage):** Ensures every branch from all decision points in the code is traversed at least once (both true and false outcomes). More comprehensive than statement coverage.

* “test cases are designed so that each branch from all decision points are traversed at least once”

* **Condition Coverage (Predicate Coverage):** Ensures all individual Boolean expressions within decision points are evaluated to both true and false.

* “ensures whether all individual Boolean Expressions have been covered and evaluated it to both true and false”

* **Multiple Condition Coverage:** Tests every possible combination of true and false values for all conditions within a decision. If there are ‘n’ conditions, 2^n test cases are required.

* “every possible combination of true or false for the conditions related to a decision has to be tested”

**6. Experience-Based Testing Techniques:** Rely on the tester’s knowledge, skills, and experience.

* Mentioned as drawing logically from experience, background, and skills in testing. Testers use strategy, documentation plans, and gained experience.

**7. Writing Test Cases**

* **Preparation:** Check for existing test cases, understand characteristics of a good test case (accuracy, traceability, repeatability, reusability, independence), consider different scenarios from the customer’s perspective, and allocate sufficient writing time.

* “consider if your test case already exists before writing a new test case… know the characteristics of a good test case… consider the different scenarios… give yourself sufficient writing time”

* **Tool Selection:** Various tools are available, with Excel spreadsheets recommended for basic manual test cases.

* **Common Mistakes to Avoid:** Combining multiple test conditions into a single test step, which can lead to unclear failure points and hinder flow. Modular test design is recommended.

* “what if one of the condition fails we have to mark the entire test is failed right… tests need to have a flow here which you cannot actually see so the solution is to write modular test”

* **Basic Structure:** Typically includes a Test Plan Identifier, Test Objective, Test Object, Test Item, Test Condition, Test Case details (test data, preconditions, expected results), and Test Suit.

**8. Test Planning**

* Involves analyzing the product, developing a test strategy, defining objectives, estimating resources, creating a schedule, and determining test deliverables.

* “you analyze the product after that you develop a test strategy decide on the type of testing that you want to do then Define your objective… estimate the amount of resources… do think about shedule and estimation write that as a point in your test plan and lastly determine the test deliverables”

* **IEEE 829 Standard:** Provides a standard format for test plan documentation to ensure all necessary requirements are met. Includes sections like Test Plan Identifier, Introduction, Test Items, Features to be Tested, Features Not to be Tested, Approach, Item Pass/Fail Criteria, Suspension Criteria, Test Deliverables, Testing Tasks, Environmental Needs, Roles and Responsibilities, Staffing Needs, Schedule, Risks, and Approvals.

**9. Regression Testing Specifics**

* Performed when new features or functionalities are added, or existing ones are modified, to ensure no new defects are introduced and existing functionalities remain stable.

* A **Traceability Matrix** is used to link requirements, test cases, and defects, aiding in understanding the impact of changes and ensuring adequate test coverage. Can be unidirectional (requirements to test cases) or bidirectional (linking defects back to test cases and requirements).

* Highlights the importance of tracking the relationship between features and potential dependencies.

**10. Performance Testing Tools**

* **Apache JMeter:** An open-source Java-based load testing tool for analyzing and measuring the performance of various services. Advantages include being open-source, platform independence, user-friendly GUI, easy element addition, XML-based test plans, support for various protocols (HTTP, FTP, JDBC, SOAP, JMS, FTP), comprehensive documentation, recording capabilities (HTTP/HTTPS), and report generation. Key elements include Thread Group, Samplers (HTTP Request, FTP Request, JDBC Request, etc.), Listeners (View Results Tree, View Results in Table, Graph Results), and Configuration Elements (CSV Data Set Config, HTTP Cookie Manager, HTTP Request Defaults, Login Config Element).

* “Apache J meter is a Java open source software that is used as a load testing tool for analyzing and measuring the performance of a variety of services.”

* Key elements are described in detail with their functions.

* **LoadRunner:** A comprehensive performance testing tool.

* **WebLOAD:** An enterprise-grade load testing and performance analysis tool.

* **NeoLoad:** A performance testing tool for web and mobile applications.

* **Silk Performer:** A performance and load testing tool for enterprise-class applications.

* **Tsung:** An open-source multi-protocol distributed load testing tool.

* **Gatling:** An open-source load and performance testing framework based on Scala, Akka, and Netty.

* **k6:** An open-source, developer-centric performance testing tool built for the modern web.

* **Locust:** An open-source load testing tool written in Python.

* **AppLoader:** Compatible with various Citrix environments and other applications, offering scriptless test scenario creation and automatic script generation.

* **SmartMeter.io:** An alternative to JMeter, aiming to fix its drawbacks, offering easy scriptless test creation with advanced editing, strong reporting, and CI/CD integration.

**11. Unit Testing Frameworks**

* **JUnit (Java):** An open-source unit testing framework for Java, crucial for Test-Driven Development (TDD). Promotes “test first, code later.” Features include annotations (@Test, @Before, @After, @BeforeClass, @AfterClass, @Ignore), assert statements (assertEquals, assertTrue, assertFalse, assertNotNull, assertNull, assertSame, assertNotSame, assertArrayEquals), test fixtures (setup and teardown methods), test suites (grouping test cases), and test runners. Supports exception testing using the `expected` parameter in the `@Test` annotation and parameterized tests.

* “junit is an open-source unit testing framework for a test driven development environment we call it tdd it supports the core concept of first testing then coding”

* Annotations and assert statements are explained with examples.

* **TestNG (Java):** Another popular testing framework for Java, offering more advanced features than JUnit. (Mentioned in the context of JUnit vs. TestNG and TestNG annotations).

* **NUnit (.NET):** A unit testing framework belonging to the xUnit family, written entirely in C#.

**12. Sanity Testing Deep Dive**

* A quick evaluation of software quality after a release to determine if it’s stable enough for further testing. Focuses on new functionalities and bug fixes to ensure they work as intended and haven’t negatively impacted existing features.

* **Objectives:** Verify new functionalities, evaluate accuracy of new features/changes, ensure introduced changes don’t affect existing functionalities, and assess logical implementation by developers.

* **Process:** Identify new/modified functionalities, evaluate their intended behavior, and test related parameters to ensure no adverse impact on existing features.

* **Key Points:** Performed on relatively stable builds, doesn’t require extensive documentation or scripting, focuses on limited functionalities, usually done by testers, is a narrow and deep type of regression testing, and acts as a gatekeeper for further testing.

* **Advantages:** Speedy evaluation, narrow focus saves time, saves testers’ effort by identifying unstable builds early, identifies deployment and compilation issues, requires less documentation, and provides a quick state of the product for planning.

This briefing document provides a comprehensive overview of the software testing concepts and techniques discussed in the provided sources. It highlights the different types of testing, methodologies, tools, and frameworks crucial for ensuring software quality.

Software Testing Concepts and Techniques FAQ

FAQ on Software Testing Concepts and Techniques

1. What is Acceptance Testing and what are its different types?

Acceptance testing is a level of software testing conducted to determine if a system meets the business requirements and is acceptable for delivery. Its purpose is to evaluate the system’s compliance from a business perspective. The different types include:

  • User Acceptance Testing (UAT): Assesses if the product works correctly for the intended users and their usage scenarios.
  • Business Acceptance Testing (BAT): Determines if the product meets the business goals and purposes.
  • Contract Acceptance Testing: Verifies if the product meets the criteria specified in a contract, often performed after the product goes live.
  • Operational Acceptance Testing (OAT): Evaluates the operational readiness of the product, including non-functional aspects like recovery, compatibility, maintainability, and reliability.
  • Alpha Testing: Conducted in the development or testing environment by a specialized internal team (alpha testers).
  • Beta Testing: Performed by real end-users (beta testers) in their own environment.

2. What is Performance Testing and what are its key types?

Performance testing is conducted to evaluate the behavior of a software application under expected or extreme workloads, focusing on aspects like speed, scalability, and stability. The key types include:

  • Load Testing: Evaluates the system’s behavior under increasing workload.
  • Stress Testing: Assesses the system’s behavior at or beyond its anticipated workload limits.
  • Endurance Testing: Evaluates the system’s behavior under a significant workload continuously over a long period.
  • Spike Testing: Assesses the system’s behavior when the load is suddenly and substantially increased.

3. What is Reliability Testing and why is it important?

Reliability testing ensures that a software product is fault-free and can perform its intended purpose without failure for a specified period. It aims to discover failures before deployment. Types include feature tests, regression tests, and load tests (in the context of reliability). It is crucial because software applications are used in critical sectors, and their reliability instills confidence in business systems.

4. Can you explain the V-model of software testing and its phases?

The V-model is a software development lifecycle model where each development phase is associated with a corresponding testing phase, emphasizing the parallel nature of verification and validation. The typical phases include:

  • Requirement Phase: Associated with Acceptance Testing, ensuring the system meets user needs.
  • High-Level Design Phase: Related to System Testing, evaluating compliance of the integrated system with specified requirements.
  • Detailed Design Phase: In parallel with Integration Testing, checking interactions between different system components.
  • Coding Phase: Corresponds to Unit Testing, ensuring individual parts and components behave correctly.
  • The model proceeds up the ‘V’ with testing phases validating the outputs of the corresponding development phases.

5. What are Equivalence Partitioning and Boundary Value Analysis in testing?

These are black-box testing techniques used to design effective test cases:

  • Equivalence Partitioning: Divides the input data into groups (partitions) where all values within a partition are expected to produce the same behavior. Test cases are then designed by picking one value from each partition, reducing the total number of test cases.
  • Boundary Value Analysis: Focuses on testing the boundary values of input domains, based on the observation that errors often occur at these limits. Test cases include values at the exact boundaries, just below, and just above the boundaries.

6. What is Sanity Testing and how does it differ from Smoke Testing?

  • Sanity Testing: A quick evaluation of the quality of a newly released software build to determine if it’s stable enough for further rigorous testing. It focuses on testing the main functionalities and newly introduced changes or bug fixes to ensure they are working as expected and haven’t negatively impacted existing features. It’s often narrow and deep, focusing on specific areas.
  • Smoke Testing: A high-level, superficial test performed on a new build to ensure that the most critical functionalities are working. It aims to quickly identify major issues that would prevent further testing. It’s often broad and shallow, covering end-to-end workflows.
  • Key Differences: Sanity testing is usually performed on relatively stable builds with specific changes, often after a smoke test. It doesn’t typically require detailed test scripts and is conducted by testers. Smoke testing is done on every new build to check basic stability and might involve some scripting.

7. What are Top-Down and Bottom-Up approaches in Integration Testing?

These are strategies for integrating and testing software modules:

  • Top-Down Approach: Testing begins with the high-level modules and progressively integrates lower-level modules. If lower-level modules are not yet ready, ‘stubs’ (simulated modules) are used to mimic their functionality. Advantages include early testing of critical modules and a more consistent testing environment. Disadvantages include the need for many stubs and the lower-level modules being tested inadequately until later.
  • Bottom-Up Approach: Testing starts with the lowest-level modules and integrates towards higher-level modules. ‘Drivers’ (programs that call the lower-level modules) are used to simulate the behavior of higher-level components. Advantages include thorough testing of lower-level modules. A major disadvantage is that the basic functionality of the software is tested last.

8. What is Unit Testing and why is it an important practice in software development?

Unit testing involves testing individual units or components of a software application in isolation to ensure they function correctly. A unit can be a function, method, or class. It is typically performed by developers. Unit testing is crucial because:

  • It helps identify and fix bugs early in the development cycle, making debugging easier and cheaper.
  • It improves the quality and reliability of the code.
  • It facilitates code refactoring by providing confidence that changes haven’t introduced new issues.
  • It serves as living documentation for how individual parts of the software are intended to work.
  • It contributes to more robust and maintainable software.

Principles of Software Testing

The basic principles of software testing play a significant role for a software tester while testing a project. Here are the principles discussed in the sources:

  • Software testing can help in detecting bugs. Testing any software or an application can help in revealing some defects that may or may not be detected by developers during development. However, testing alone cannot confirm that a product is bug-free or error-free. Therefore, it is essential to devise test cases to find as many defects and errors as possible.
  • Exhaustive testing is impossible. It is not feasible to test all combinations of data inputs, scenarios, and preconditions within an application. For example, a single application screen with ten input fields and three possible values would require a vast number of test scenarios. Instead of trying to cover all possibilities, it is better to focus on potentially more significant test cases.
  • Testing should be performed as early as possible. The cost of an error increases exponentially throughout the stages of the software testing life cycle. Starting testing as early as possible helps in resolving detected issues before they have a greater impact later on.
  • Defect clustering. Approximately 80% of all errors are usually found in only 20% of the system modules. If a defect is found in a particular module, there is a higher chance of finding other defects in the same area. Therefore, it makes sense to test that area of the product more thoroughly.
  • Testing is context dependent. Different applications should be tested differently depending on their purpose or the industry. For instance, safety might be the primary concern for a FinTech product, while usability and speed might be more emphasized for a corporate website. The type of testing performed should align with the specific situation and requirements.
  • Error-free or bug-free software is just a myth. The complete absence of errors in a product does not necessarily mean that the testing was successful. Even if a product is polished and functional, if it is not useful or does not meet user expectations, it will not be adopted.

Software Testing Life Cycle and Methods

The software testing life cycle (STLC) involves a sequence of steps executed in a definite sequence to organize the software testing process. It is a systematic and planned way of conducting testing. According to the source, the STLC comprises six phases:

  • Requirement Analysis: In this initial stage, the testing or QA team determines what needs to be tested. This includes understanding both functional and non-functional requirements. Functional testing evaluates how the software functions, while non-functional testing covers aspects like performance and security.
  • Test Planning: This phase involves planning how the testing will be conducted. This includes deciding on resources (cost, personnel, time), setting deadlines, and outlining the entire test process. A test plan document is created, which encompasses the plan from the beginning to the end.
  • Test Case Development: Here, step-by-step procedures for test execution are written out, including expected results, actual results, and whether the test passed or failed. Developing comprehensive test cases is a crucial part of the STLC.
  • Environment Setup: Before actual testing begins, the test environment needs to be set up. This involves configuring the necessary software and hardware for the testing teams to execute test cases comfortably, including hardware, software, and network configurations.
  • Test Execution: This is the phase where the test analysis team executes the test scripts based on the chosen strategy and compares the expected and actual results. When test execution begins, the test analysis starts executing the test scripts based on the strategy selected for the project.
  • Test Cycle Closure: This final phase involves a meeting of the testing team to evaluate the complete testing cycle based on factors like test coverage, quality, cost, and time. The team analyzes test result reports to identify areas for improvement and discusses the overall testing life cycle.

The source also mentions that software testing is broadly classified into static testing and dynamic testing. Static testing involves checking the source code and software project documents to identify and prevent defects early in the STLC without executing the software. This can be done through inspections, audits, and technical reviews. Once initial preparations are complete, the team proceeds with dynamic testing, where the software is tested during execution. Dynamic testing can be further categorized by methods (Black Box, White Box, Gray Box, Ad Hoc), levels (Unit, Integration, System, Acceptance), and types (Functional, Non-functional).

Software Testing Methods: Dynamic Techniques

Based on the sources, dynamic testing involves testing software during its execution. The source “01.pdf” elaborates on different software testing methods that fall under dynamic testing. These methods describe the ways in which tests are conducted in reality and include the following:

  • Black Box Testing: This method focuses on the inputs and the expected outputs of the software application without knowing how it works internally or how the inputs are processed. The purpose of Black Box testing is to check the functionality of the software and ensure it works correctly and meets user demands. Testers perform testing without much knowledge of the product’s internal structure. Techniques under Black Box testing include:
  • Equivalence Partitioning: Input values are divided into partitions or classes based on the similarity of their outcomes. Instead of testing every possible input, a value from each class is used. This helps identify valid and invalid equivalence classes, saving time and effort.
  • Boundary Value Analysis (BVA): This technique focuses on testing the boundary conditions of the input domain. It involves testing values at the edges, just above, and just below the defined boundaries, as behavior changes often occur at these points.
  • Decision Table Based Technique: This method uses a tabular representation of different possible conditions versus test actions (inputs vs. outputs). It helps testers identify all combinations of input values, especially when there are many, and the corresponding outputs. It is also known as the cause-effect table technique.
  • State Transition Diagram: This approach analyzes the behavior of an application for different input conditions in a sequence. It is applicable when the system gives a different output for the same input depending on its prior state (finite state systems). It involves creating a state transition diagram, a state table, and then designing test cases from these.
  • Use Case Testing: This technique uses use cases to define required user interactions based on user actions and the system’s response. It is a functional testing approach that doesn’t require programming skills and involves identifying scenarios, defining test cases and conditions, and determining test data for each scenario.
  • White Box Testing: Unlike Black Box testing, this method requires profound knowledge of the software’s code as it involves testing the structural parts of the application. Generally, developers who are directly involved in writing the code are responsible for this type of testing. The main purposes of White Box testing are to enhance security, verify the basic flow of input/output, and improve the design and usability of the product. Techniques under White Box testing include:
  • Statement Coverage: This aims to ensure that every executable statement in the code has been executed at least once.
  • Decision Coverage (Branch Coverage): This method checks both possibilities (true and false) for each decision point or branch in the code to ensure no branch leads to abnormal behavior. It is more powerful than statement coverage.
  • Condition Coverage (Predicate Coverage): This focuses on Boolean expressions and ensures that all individual Boolean expressions within a decision have been evaluated to both true and false.
  • Multiple Condition Coverage: This is an extension of condition coverage where every possible combination of true or false for the conditions related to a decision has to be tested. If there are ‘n’ conditions, 2n test cases might be required.
  • Gray Box Testing: This method is a combination of both Black Box and White Box testing. An experienced tester using this method has partial knowledge of the internal application structure and can design test cases based on this knowledge while still maintaining a Black Box perspective.
  • Ad Hoc Testing: This is an informal testing method performed without any planning or documentation. Tests are conducted informally and randomly, without formal expected results. The tester improvises the steps and executes them without prior design. There is no documentation, test design, test case, or planning involved in Ad Hoc testing. Examples of techniques under Ad Hoc testing include pay testing, monkey testing, and buddy testing.

Software Testing Levels: Unit, Integration, System, Acceptance

Based on the source “01.pdf”, there are four main levels of software testing: unit testing, integration testing, system testing, and acceptance testing. These levels progress from testing individual components to testing the entire system as a whole. Let’s look at each of these levels in more detail:

  • Unit Testing: This is the micro level of testing. It involves testing individual modules or a piece of code to ensure that each part, or unit, is working properly. A unit can be a specific piece of functionality, a program, or a particular procedure within an application. Unit testing helps to verify internal design, internal logic, internal parts, as well as error handling. Typically, unit testing is performed by software developers themselves or their peers. In some rare cases, independent software testers might also perform it.
  • Integration Testing: This level of testing is performed after unit testing. It tests how the units work together when individual modules are combined and tested as a group. While each unit might work well on its own, integration testing determines how they perform together and ensures that the application runs very efficiently. It also identifies interface issues between modules. The source mentions a few techniques used in integration testing, including the big bang technique, top-down approach, and bottom-up approach. We further discussed the top-down approach and bottom-up approach in a later part of the source. The top-down approach starts with high-level modules and uses stubs for lower-level ones, while the bottom-up approach tests lower-level units first and then progresses to higher-level units. A sandwich or hybrid approach, combining top-down and bottom-up, is also mentioned.
  • System Testing: As the name suggests, all the components of the software are tested as a whole in this level. The purpose is to ensure that the overall product meets the specified requirements. System testing is particularly important because it verifies the technical, functional, and the business requirements of the software. It is typically performed by independent testers after integration testing and before acceptance testing. System testing often involves a combination of automation testing as well as manual testing techniques.
  • Acceptance Testing: This is the final level of testing and is also sometimes referred to as user acceptance testing (UAT). It determines whether or not the software is ready to be released to the market. Since requirements can change throughout the development process, it’s crucial for the user to verify that the business needs are met before the software is released for commercial use. The source indicates that management, sales, or customer support often performs this kind of testing, and sometimes even the customers and end-users. Different types of acceptance testing mentioned include user acceptance testing, business acceptance testing, contract acceptance testing, operational acceptance testing, alpha testing, and beta testing.

Each of these levels of testing has a particular purpose and provides value to the software testing life cycle. Some levels, like unit testing, are their own type of testing, while others, like integration testing, have various categories or approaches within them.

Software Testing Types: Functional and Non-Functional Approaches

Based on the source “01.pdf”, software testing types are the approaches and techniques applied at a given level of testing to address the requirements in the most sufficient manner. The purpose of testing and the tools or strategies used can change depending on the requirements. Broadly, software testing types are divided into functional testing and non-functional testing.

Functional Testing: This type of testing focuses on verifying that each function of the software application operates in conformance with the requirement specification. It mainly involves black box testing and is not concerned with the source code. Each functionality is tested by providing appropriate input, verifying the output, and comparing the actual results with the expected results. Under functional testing, the source lists several types:

  • Unit Testing: As discussed earlier, this is a level of software testing where individual units or components of a software are tested. The purpose is to validate that each unit performs as designed. It is typically performed by developers.
  • Integration Testing: This level involves testing where individual units are combined and tested as a group. It verifies that the communication and interaction between different modules work correctly.
  • System Testing: Here, a complete and integrated software is tested. The purpose is to evaluate the system’s compliance with the specified requirements. It is performed after integration testing and before acceptance testing.
  • Interface Testing: This type verifies that communication between different software systems or components is done correctly. It checks if all supported hardware or software has been tested and if the integration between components like servers and databases is functioning as expected.
  • Regression Testing: This testing is performed to ensure that adding new code, enhancements, or fixing bugs does not break the existing functionality and that the software still works according to the specifications. It is carried out every time changes are made to the code to fix defects.
  • User Acceptance Testing (UAT): This is a level of software testing where a system is tested for acceptability. The purpose is to evaluate the system’s compliance with the business requirements and assess whether it is acceptable for delivery. It helps handle real-world scenarios according to specifications.
  • Smoke Testing: This is testing done to ensure that the most critical functionalities of the application are working correctly. It is often done after each build is released to ensure build stability and is a high-level test performed on the initial software build.
  • Sanity Testing: This testing is done to ensure that all the major and vital functionalities of the application or system are working correctly. It is generally done after smoke testing and after a build has passed smoke testing and gone through some level of further testing or bug fixes.

Non-Functional Testing: This type of testing determines the performance of the system to measure, validate, or verify quality attributes of the system. Under non-functional testing, the source lists several types:

  • Documentation Testing: This helps to estimate testing efforts required and test coverage. It involves checking test plans, test cases, and requirements sections for accuracy and completeness.
  • Installation Testing: This type of quality assurance work focuses on what customers will need to do to install and set up the new software successfully. It involves testing full, partial, and upgrade installations, as well as uninstallation processes.
  • Performance Testing: This includes load testing, stress testing, endurance testing, and spike testing. It is conducted to evaluate the behavior of a system under different workload conditions. Load testing evaluates behavior at increasing workloads, stress testing at or beyond anticipated limits, endurance testing under continuous significant workload, and spike testing under sudden and substantial load increases.
  • Reliability Testing: This assures that the product is fault-free and is reliable for its intended purpose. It involves exercising an application to discover failures before deployment.
  • Security Testing: This type aims to strengthen the security of the application, not just in terms of data and information but also affecting the whole functionality of the system. It focuses on areas like network security, client security, access to the application, and data protection.

The choice of which testing types to perform depends on the requirements of the testing and the specific needs of the project. The source emphasizes that testers determine the right testing for the apps.

Test Automation engineer Full course in 10 hours [2025] | Testing Course For Beginners | Edureka

The Original Text

hello everyone and welcome to this comprehensive full course on automation testing as software applications grow in complexity ensuring their quality becomes crucial so this is where the test automation Engineers play a vital role they design automated testing Frameworks write efficient test scripts and ensure that the software meets the highest standards of performance and functionality so in this course we will walk you through the essential Concepts skills and tools required to become a proficient test automation engineer whether you are a beginner or looking to enhance your testing skills this course will provide you with the knowledge you need now let’s outline the agenda for this automation testing full course we will start by exploring how to become a test automation engineer where we will understand the key skills qualifications and career path to excel as a test automation engineer next we will cover what software testing is where we will learn the fundamentals of software testing its purpose and its role in ensuring product quality then we will move on to the types of software testing where we will explore different types of testing including manual and automated approaches followed by software testing methodologies where we will understand methodologies like agile waterfall and devops for efficient testing strategies after that we will discuss software testing Tools in this we will discover popular testing tools like selenium junit and J meter along with their use cases moving forward we will discuss how to write a test case where we will learn the structure of effective test cases to ensure comprehensive coverage then we will cover what is a test plan where we will understand the purpose of a test plan its components and how to create one effectively next we will explore functional testing here we will explore functional testing principles to verify that the software behaves as expected followed by functional testing versus non-functional testing here we will understand the differences and when to apply each type of testing next we will dive into advanced testing Concepts like what is API testing where we will learn how to validate apis using tools like Postman and dressed ass short after that we will discuss what agile testing is discover how agile testing fits within Agile development methodologies next we will explore what is unit testing where we will learn the importance of unit test and how Frameworks like G units are used then we will move on to what is regression testing where we will explore regression testing strategies to ensure that the code changes do not break existing functionality next we will discuss automation testing here we will understand the principles of automation testing and how it enhances the testing process next the test automation framework using selenium where we will build a structured framework using selenium to automate web applications effectively and finally we will wrap up this course with test automation interview questions to prepare for the frequently Asked interview questions to boost your confidence in your job interview but before we jump into the course content please like share and subscribe to our YouTube channel and hit the Bell icon to stay updated on the latest tech content from edureka edureka’s automation testing course is designed to help you improve and streamline your test automation strategies with a strong focus on real world applications this program ensures comprehensive automation for web-based applications using selenium and devops practices the curriculum includes handsome training in software testing selenium API automation with rest Azure devops integration Java and performance testing with jmeter also edor Rea selenium certification training is designed to help you become a certified automation tester this program covers working with various web element locating strategies and managing your automation environment using supported plugins so enroll in this selum course to gain hands-on experience with widely used automation Frameworks like data driven keyword driven hybrid and bdd so check out the course Link in the description box below with that said let’s get started with our first topic which is how to become a test automation engineer what is software testing so software testing is basically a process of evaluating the functionality of a software application to find any software bugs so it checks whether the developed software met the specified requirements and identifies any defect in the software in order to produce a quality product it is also stated as the process of verifying and validating a software product so it checks whether the software product meets the business and Technical requirements that guided its design and development it works as per the requirement and can be implemented with the same characteristics so now that you know what is software testing let’s see who is a testing automation engineer so the role of the test automation engineer is to design build test and deploy effective test automation Solutions now to fulfill this role the automation engineer applies appropriate automation Technologies to meet the short and long-term goals of the testing organization so now what does automation engineer actually do an automation engineer basically utilizes technology to improve streamline and automate a manufacturing process they are responsible for planning implementation and monitoring of such technology so now let’s move ahead and have a look at the road map that will lead you to become a successful test automation engineer so first of all in order to become an automation engineer you need to have a bachelor’s degree you will likely need to earn a bachelor’s of engineering degree related to to the field in which you want to work for example if you want to become a software Testing Engineer you will need a bachelor’s degree in software engineering now to work in this field you must be comfortable working closely with other professionals you also need mathematics and science and also a little bit of computers and electronics now next up we will need to know about the basic principles of software testing such as finding the presence of any sort of defects how to determine the risk without exhaustive testing early testing defect clustering and how to make a product fulfill business requirements without any error now if you are new to the testing industry one needs to have knowledge of programming languages such as C C++ Java SQL python HTML now along with this if you also have a master’s degree in computer science machine learning statistics or any such certifications related to automation testing it is just an added Advantage now some of the best certifications for a test automation engineer are cast that is the certified associate in software testing csde that is the certified software test engineer and there are many more such certifications so now let’s move ahead and have a look at the job roles for a test automation engineer now some of the most common job profiles include test automation performance tester test analyst and QA engineer so let’s have a look at some of these statistics provided by LinkedIn on these top profiles so here you can see the graph for the top companies in test Automation and some of the big names are Accenture cognizant IB M TCS and enosis now the top skills that are required to become a test automation engineer include the knowledge of testing agile methodologies SQL test planning and also you need to be well acquainted with manual testing now apart from these you need to be well acquainted with programming languages like Python goang and JavaScript you also need to be well vered with AWS microservices Docker and selenium now these skills will basically help you move to a higher position as a test automation engineer and also add up to your appraisal okay now talking about appraisals in hike Ed Rea has released a small video just a few hours back on hike and Appraisal during this season of the year which is essentially the appraisal season so do check out our latest video named upna hike AA I’ll leave the link in the live chat and also also in the description box hope you guys will enjoy it now moving on next up is the performance tester profile so some of the top companies for this job role are IBM Accenture TCS cognizant and Cap Gemini now some of the top industries for performance tester are the IT services computer software telecommunications Financial Services as well as banking now United States is considered to be the best preferred location for a performance tester followed by India UK Canada and Australia now some of the must have skills to become a performance tester include the knowledge of selenium cucumber Java API APM jira Python and also you must be profound with automation tools so next we will talk about the test Analyst job profile now for this particular role Bangalore is one of the top most preferred locations after us UK and Australia and similarly companies like Accenture cognizant TCS are one of the top recruiters now talking about some of these skills you must be well versed with SQL jira uat tdd Confluence and some of the scripting languages like python JavaScript also you would need some of the automation tools so now that you know about the different job profiles let’s have a look look at the roles and responsibilities of a testing automation engineer now in case of software testing every company defines its own level of hierarchy roles and responsibilities but on a broader level if you take a look You’ll Always Find two levels in a software testing team the first one is the test lead or manager now a test lead is responsible for defining the testing activities for subordinates testers or test engineers all responsibilities of test planning to check if the team has all the necessary resources to execute the testing activities to check if testing is going hand inhand with the software development in All Phases and also prepare the status report of testing activities he is also responsible for required interactions with customers and updating project manager regularly about the progress of testing activities next up we have the the test Engineers or the QA testers now they are responsible to read all the documents and understand what needs to be tested now based on the information procured in the above step decide how it is to be tested and inform the test lead about what all resources will be required for software testing then develop test cases and prioritize testing activities then we finally execute all the test case and Report defects Define severity and priority for each defect and Carry Out regression testing every time when changes are made to the code to fix defects now how a software application shapes up during the development process entirely depends on how the software engineering team organizes work and implements various methodologies now test automation Engineers can save you from the world full of codes Enterprises completely agree with the statement and this is the reason why you see a lot of job opportunity ities in automation testing industry so here I’m going to explain in detail the seven most important steps to becoming a test automation engineer it will also help you if you are planning to switch your career to automated testing now the first one is manual testing now while I understand that companies are moving towards codeless automated testing tools to reach an expert level and to keep up with the competition of automation test engineers in the industry it is highly important to focus on manual testing Concepts initially now manual testing is basically a process of finding out the defects or bugs in a software program in this method the tester plays an important role of end user and verifies that all the features of the application are working correctly now this makes a point very clear that automation testing is for experienced manual testers the next skill is the programming skills now it is very important to possess excellent technical programming skills now most newcomers ask that if they need programming skills for automated testing now most of the people who come up with the idea of Shifting to automated testing wish to skip the coding part either they don’t have programming knowledge or they hate coding however that one needs to be very proficient with manual testing skills to become a great automation Testing Engineer for a long lasting career in the software testing industry and if you’re new to the testing industry you need the following programming languages such as C C++ Java SQL python PE XML HTML and CSS now there are also a few technical skills a manual tester should Master to become a brilliant automation Testing Engineer such as the test architecture test design performance testing configuration management manual testing agility and interaction communication between the teams troubleshooting agile devops and continuous de delivery now the combination of all the above mentioned skills can help you transit to automated testing easily and smoothly now next up is understand the application now the common application details that every automation tester needs to take care of are which programming languages have been used while developing the application on what platform is the application built which databases are involved are there any web services or apis connected to different parts of the system and how and many more such questions now these are just few points and it may vary based on the complexity of the applications so make sure you’re completely thorough with the application that you are going to test via automation testing now next up we have the automation testing tools now when learning to become a smart automation Testing Engineer if we don’t talk about the test automation tools and we are doing an injustice to the industry a major part of the companies have already started using automation testing tools now the main reason behind using them is their benefits to the Enterprises some of the famous testing tools are selenium testing whz ranx sahi water and test complete now next up is the atlc methodology now atlc stands for automation testing life cycle now the way we follow the life cycle of software development and testing same is the way for automation testing as well to understand and follow the atlc one needs to have experience of the following such as the decision making in automated testing then the test automation tools automation testing process then test planning design and development test script execution and management and finally review and assessment of test programs now for each test automation requirements a test automation engineer follows the life cycle and to be a successful automation test engineer you need to understand the atlc methodology and executed in your each test automation project now moving on the next one is the test automation strategy so once you are through with the atlc methodology and the automated testing tools you are are well prepared to create your test automation strategy for your clients or employer now to become a great automation test engineer you would be the right person to initiate with preparing the test automation strategy finalizing the tools overall cost and Roi calculation now automation strategy creation is considered to be a very crucial part as you would need to Define and develop the path that will help you to reduce the manual testing hours and offer Justice on the ROI of the clients now let’s move on to the final skill which is the testing Trends now for this you have to stay updated with the testing strengths and this is the most important part of this industry the most trending best practices tools techniques tips and tricks will help you and your team to achieve the success in optimizing your test automation strategies and methodology now this generation is moving towards automation everywhere however there has been a lot of debate around test automation tools replacing the manual testers but remember the creators of test automation tools are the testers like you so to become a smart automation Testing Engineer and to be successful in this industry you would need to really work hard with passion and dedication so once you have mastered these skill skills you are now on your way to become a successful software test automation engineer now let’s see some of the topmost companies that are hiring for a test automation engineer now these companies are Accenture IBM cognizant enosis TCS and kep Gemini so do keep an eye for an opportunity and utilize your skills to grab the offer software is a highly complex thing it depends on code that is written and maintained by others and in different location that may be across the globe cutting across entirely different programming languages techniques servers networks and many other things bugs therefore are an unfortunate reality for every software product and there are a lot of risks involved in software by risk I just mean anything that can potentially cause a loss of something of value this can include functional issues or it can be scalability issues reliability issues security issues or performance issues or any other thing unfortunately sometimes these issues manifest into software disasters and have caused millions of dollars in waste and sometimes even led to casualities for example Starbucks coffee shop was forced to give away free drinks just because of register malfunction a F35 military aircraft was unable to detect the targets correctly because of a radar failure a high voltage power line in Northern Ohio it brushed against some overgrown trees and it was shut down normally the problem would have tripped on alarm in control room but due to software issues the alarm system failed and that day there was like power cut for about 24 hours in the entire city similarly in 1985 Canada’s theak 25 radiation therapy machine it malfunctioned due to some software buck and it delivered lethal radiation to patients like leaving three people dead and critically enjoying many others while I can keep going software failures happen every day you’ve probably experienced a software failure in the past week or even days as simple as an app glitch on your smartphone to serious ones like cancelled flights or crashing infrastructure systems and many others software bugs have become so common to everyone’s lives that it would be easy to simply just roll our eyes and say hey here we go again but what if software professionals do that how do companies make sure that disasters won’t happen well software testing software testing helps to find bugs well if I have to Define software testing it is quality analysis of software code to understand if the software performs as expected or not and to learn about ways in which it can be improved suppose you entered a baking contest and you’re planning to make cookies chances are you will first make a small batch of cookies to test how good your recipe is and if everything tastes well and fine as you expected it to be well depending on the feedback you receive about the taste and other qualities of the cookie you would then modify your recipe and proceed for further cooking software testing is somewhat similar in that sense well after a programmer or a team of programmers write a software program there are Information Technology professionals known as testers who would then test the software to see if there are any areas where the software crashes or does not yield the results as expected that’s what software testing is all about well the main objective of software testing include to verify and validate the completeness of the software product to check if the software product meets the business and Technical requirements to identify technical bugs and to ensure that the software product is glitch free in the end or before it’s released to Market and lastly to generate high quality test cases and issue correct problem reports well I’m sure at this point you’re clear of what software testing is right but why do you think we need software testing what benefits does it offer to any of us first of all it gives confident in the quality of the final product for the organization producing the software product it saves a lot of time effort and money for the organizations that are developing and selling the product because once the product is tested they can be sure that there are no Faults that would prove fatal to them or the company later on it even offers business optimization it confirms that an application is able to operate well and fine in all required conditions and on all different kind of operating systems or web browsers correctly and properly well this enhances user experience and customer satisfaction lastly obviously all this factors contribute to money so they bring profit to organization in simple terms in order to make sure that the release software is safe and its functioning as expected the concept of software testing was introduced its Paramount important because software bugs errors defects can potentially lead to expensive or dangerous consequences in the software program like the few of them which I mentioned earlier in the session so the software testing is an exceptionally imaginative and an intellectual task for testers to perform testing of software or application consist of some principles that play a significant role for a software tester while testing the project what I mean is there are certain set of principles that every tester should be aware of when they’re performing software testing so what are the basic principles of software testing let’s discuss that first of all software testing can help in detecting bucks that’s the basic of it right testing any software or an application can help in revealing a few or some defects that may or may not be detected by developers when they develop the product however testing of software alone cannot confirm that you developed product or software is bug free or error free hence it’s essential to device test cases and find out as many defects and errors as possible so the first point or the principle here is software testing can help in detecting bux if you have proper test cases and test scenarios the next principle is that exhaustive testing is impossible well there’s no way to test all combination of data inputs scenarios and precond conditions within an application for example if a single application screen contains about 10 input Fields with three possible values this means if you have to cover all the combinations then you would have to create about 5949 I guess test scenarios well that doesn’t look good and it’s just for one app screen imagine you having 50 plus such screens while in order not to spend weeks creating millions of such less possible scenarios it’s better to focus on potentially more significant test cases the third principle is you should perform testing as early as possible the cost of an error grows exponentially throughout the stages of software testing life cycle therefore it is important to start testing the software as soon as possible so that all the detected issues are resolved and they do not affect you later on next up we have defect lustering well according to a certain principle Approximately 80% of all errors are usually found in only 20% of the system modules therefore if a defect is found in a particular module of the software program the chances are that there might be other defects as well that is why it makes sense to test that area of the product more thoroughly and testing is context dependent depending on the purpose or the industry different application should be tested differently right while safety could be primary importance for a fine tech product it is less important for a corporate website well the latter as in the corporate website in turn puts an emphasis on usability and speed so according to your situation and requirements you should choose what type of testing you want to perform and lastly error free or bug free software is just a myth the complete absence of errors in your product does not necessarily mean that your testing was successful no matter how much time you have spent polishing your code or improving the functionality of your product if it’s not useful or it does not meet the user expectations it won’t be adapted by the target audience or it can’t be released to Market it’s as simple as that so these are certain basic principles of software testing well along with the principles we discussed just now you might have to consider some additional sources to note other principles in addition to the basic ones with that said the next topic that we going to discuss here is very important Concept in software testing which is software testing life cycle so what exactly is software testing life cycle organizing a software testing process can be quite challenging just like how developing a software involves a sequence of steps testing also involves steps that can be executed in a definite sequence this manner of executing testing in a systematic and plann way is what we call a software testing life cycle or stlc basically it comprises of six phases which include requirement analysis test planning test case development environment setup test execution and test cycle closure well I’m not going deep in here but let’s just discuss what each of this phase mean in software testing life cycle so the very first step in software testing life cycle is requirement analysis in this stage the testing or the QA team decides what needs to be tested there are two kinds of testing mainly functional and non-functional we’ll talk more about that later on functional testing includes test to evaluate how the software is functioning and non-functional testing includes features that are behind the scenes such as performance security and all that Concepts so the team here considered both functional as well as non-functional requirements into consideration well after a decision is made as to what aspects of testing need to be completed the next stage is planning how the test will actually be conducted this includes deciding the resources in terms of cost the number of personel that should be assigned to the testing phase the number of hours it should take the deadlines by which the result should be delivered and many other things basically you’re planning the entire test process in this step and there’s something called a test plan document which involves your entire plan from the first step to the last step if you want to know more about what test plan is and how do you write a test plan its pattern and parameters involved in that well there is a video called how to generate or create a test plan in Eder software testing playlist so please do refer to that so the second step is basically planning everything as to how to perform when to perform and all that next up we have test case development one of the important stages of software testing life cycle is developing the test cases this includes writing out a step-by-step procedure on how test should be executed the expected results the actual results and if the test was a pass or a fail and again if you want to know more about test cases and how to write a best test case well you could refer to how to write a test case video in Eda YouTube playist so coming back test case development is a really important concept and you have to consider many different things here when you’re actually generating a test case the fourth step is environment setup so before the actual testing can be started the test environment has to be set up a testing environment is a setup of software and hardware for testing teams to execute test cases in comfortable manner it supports test execution with Hardware software and network configurations next is nothing but test execution the next phase is the process of executing the code and comparing the expected and the actual results when test execution Begins the test analysis starts executing the test scripts based on the strategy which you have selected for your project lastly it’s test cycle closure it involves calling out the testing team members for meeting and evaluating complete cycle criteria based on test coverage quality cost time and many other Concepts so basically here you’re analyzing the test result reports and seeing how you can make them better or how you can improve them or discussing the results organizing and basically discussing the entire testing life cycle is the last step which is test cycle closure so these are the six most important phases of a software testing life cycle well when you are setting up testing environment there are certain things that you should be aware of first thing is that software testing is broadly classified into two categories static testing and dynamic testing static testing initially checks the source code and software project documents to catch and prevent detects early in the software testing life cycle it’s also called non-exhaustive technique and verification testing it could be performed as inspections andal and Technical reviews or it could be reviews during walkthrough meetings that you organize with team members and all that so basically it’s an informal form of testing but as soon as the primary preparations are finished the team proceeds with Dynamic testing where software is tested during execution Dynamic testing can be described by different methods levels and types of underlying quality analist activities let’s have a closer look at the segment of dynamic testing process so first up we have something called software testing methods software testing methods are nothing but the ways the tests are conducted in real they include Black Box testing white box testing gray box testing and hadock testing so black Bo testing I’m sure you might have heard of it before it gets its name because a QA engineer here focuses on the inputs and the expected outputs without knowing how the application actually works internally and how these inputs are being processed the purpose of this blackbox testing is to check the functionality of the software and making sure that it works correctly and it’s meeting user demands next up white box testing unlike blackbox testing this method requires profound knowledge of the code as it involves testing of some of the structural part of the application therefore generally the developers here are directly involved in writing code are responsible for this type of testing the main purpose here is to enhance security the basic flow of input output throughout the application and to improve the design and the usability of the product well obviously there’s a combination of both blackbox and white box testing that’s what we call a gray box testing it involves testing of both functional and structural part of application so you using this method an experienced tester has partial knowledge of internal application structure and based on this knowledge she can design test cases while still pursuing the blackbox perspective apart from this we also have something called ad hoc testing this is an informal testing method as it’s performed without any planning or documentation conducting tests informally and randomly without any formal expected results the tester improves the steps and without even knowing executes them here so basically in ad hoc testing there’s no documentation no test design no test case no planning so each of these methods that we discussed just now I mean the white box blackbox and ad hoc testing we have multiple techniques coming under these categories for example under white box you have statement coverage decision coverage condition coverage and multiple condition coverage for blackbox testing you have decision tables use case testing State transition diagram bva which is nothing but boundary value analysis equivalent balance partition and under ad hoc testing we have pay testing monkey testing body testing and much more if you want to know more about any of these techniques you can refer to the software testing methodologies and techniques video or blog in AA playlist so next up we have software testing levels a piece of software is more than a several lines of code it is usually a multi-layer complex system incorporating dozens of separate functional components and third party Integrations therefore efficient software testing should go far beyond just finding errors in the source code there are four main levels of software testing unit testing integration testing system testing and acceptance testing let’s briefly check out what each of these levels are so the first level of unit testing is the micro level of testing it involves testing individual modules or a piece of code to make sure each part or I can say unit is working properly here when I say unit it can be a specific piece of functionality or a program or a particular procedure within an application or it can be anything it depends on what the tester considered a unitest unit testing helps verify internal design internal logic internal parts as well as error handling so after unit testing integration testing is performed this level tests how the units work together individual modules are combined and tested as a group it’s one thing if every unit of your software project is working well on the own but how do you think they’ll perform together well integration testing helps you determine that and ensures that your application runs very efficiently it identifies interface issues between modules well there are few techniques that can be used here we have big Bank technique top down approach bottom up approach and many other things to know more you can refer to the integration testing video and the software testing Edo playlist the next level of testing is system testing as name implies all the components of software are tested as a whole in order to ensure that the overall product meets the requirements specified system testing is particularly important because it verifies the technical functional and the business requirements of the software final level of testing is acceptance testing or sometimes it’s referred to as user acceptance testing or uat it determines whether or not the software is ready to be released to the market let’s face it guides requirement keeps changing throughout the development process right and it’s important that user verifies the business needs are met before the software is released into market for commercial use so that’s what uat or user acceptance testing the fourth one is all about so each level of testing has a particular purpose and it provides value to the software testing life cycle some levels are on their own type of testing for example unit testing but some have certain categories under them like integration testing like we discussed has big bang approach top down approach bottom up approach and like that lastly we have software testing types so basically these types are approaches and the techniques that are applied at given level like we discussed the different level using an appropriate method to address the requirements in most sufficient manner well like I said earlier the purpose of testing and the testing tool or the strategy that you use every time keeps changing depending on the requirements right and that we call different types of software testing there are a variety of software testing types and each of them Ser different purpose so broadly it’s divided into functional testing and non-functional testing under functional we have unit testing integration testing system testing interface testing smoke sanity testing and many others coming to non-functional testing we have performance testing security reliability and many other things so each of these testing types that you can see on the screen have their own purpose and the import importance based on the requirements of your testing you should choose the one which suits your category today’s world of technology is completely dominated by machines and their behavior is controlled by the software powering it so how do we know that the machines will behave exactly the way we want them to every time now the answer to all these questions lie in software testing so now let’s see see the different types of testing so quality assurance or software testing is crucial because it identifies errors bugs from a system at the beginning by considering the problems in the base helps to turn Improvement in the quality of product and brings confidence in it now by beginning means where it comes feasible and able to resolve the existing bugs now functional testing and nonfunctional testing are the two kinds of testing that are performed by by the QA or the software tester so the types of software testing are basically the key role where the tester determines the right testing for the apps so here we have two main types of software testing such as the functional testing and non-functional testing now under functional testing we have unit testing integration testing system interface regression and user acceptance testing and under non-functional testing we have documentation installation performance reliability and security testing also performance testing can be divided into load stress endurance and Spike testing so now let’s move ahead and have a look at all of these types of testing in details so the functional testing focuses on manual as well as automation testing a functional testing is a bunch of various types to execute the perfect product now the first one is the unit testing under functional testing so unit testing is basically a level of software testing where individual units or components of a software are tested now the purpose is to validate each unit of the software performs as designed now a unit is the smallest testable part of any software it usually has one or a few inputs and usually just a single output now who performs this unit testing it is normally performed by the software developers themselves or their peers now in rare cases it may also be performed by independent software testers now let’s have a look at the unit testing task so first we have the unit test plan under which we prepare review rework and form the Baseline next up we have the unit test cases or scripts where again we prepare review rework and check the Baseline of the scripts and finally we have the unit test step where we perform our final task now let’s have a look at some of the benefits of unit testing now unit testing increases confidence in changing or maintaining code so if good unit tests are written and if they are run every time any code is changed we will be able to promptly catch any defects introduced due to the change next up codes are more reusable in order to make unit testing possible codes need to be modular now this means that codes are easier to reuse also the development is faster now if you if you do not have unit testing in place you write your code and perform that fuzzy developer test but if you have unit testing in place you write the test write the code and run the test now writing tests takes time but the time is compensated by the less amount of time it takes to run the tests you need not fire up the GUI and provide all those inputs now the cost of fixing a defect detected during unit testing is lesser in comparison to that of defects detected at higher levels so compare the cost of a defect detected during acceptance testing or when the software is live next up debugging is very easy so when a test fails only the latest changes need to be debugged so with testing at higher levels changes made over the span of several days or weeks or months need to be scanned also codes are more reliable here now moving on the next type is the integration testing so integration testing is a level of software testing where individual units are combined and tested as a group so the purpose of this level of testing is to expose faults in the interaction between integrated units test drivers and test stubs are used to assist an integration testing so who performs integration testing for this the developers themselves or some independent testers perform this sort of testing integration testing also involves a task plan such as the integration test plan where we prepare review rework and form the Baseline also we have integration test cases or scripts under which we prepare review rework and form the Baseline and finally again we perform the integration test now let’s have a look at some of the approaches of integration testing the first one is the Big Bang now Big Bang is an approach to integration testing where all or most of the units are combined together and tested at one goal now this approach is taken when the test testing team receives the entire software in a bundle so what is the difference between Big Bang integration testing and system testing well the former tests only the interactions between the units while the later tests the entire system next up we have the top down now this is an approach to integration testing where top level units are tested first and lower level units are tested step by step after that this approach is taken when top down development approach is followed the test tubs are needed to simulate lower level units which may not be available during the initial phases next up we have the bottom up now this is an approach to integration testing where bottom level units are tested first and upper level units step by step after that now this approach is taken when bottom up development approach is followed the final one is the sandwich or the hybrid now this is an approach to integration testing which is a combination of top down and bottom up approaches next up we have the system testing system testing is a level of software testing where a complete and integrated software is tested now the purpose of this test is to evaluate these systems compliance with the specified requirements system testing is the third level of software testing performed after integration testing and before the acceptance testing so basically the independent testers perform the system testing now again the system testing also has certain tasks such as the system test plan where we prepare review rework and form the Baseline and next up we have the system test cases where we prepare review rework and form the Baseline as well and then finally perform the system test now let’s have a look at an analogy of system testing now during the process of manufacturing a ballpoint pen the cap the body the tail the ink cartridge and the ball Point are produced separately and unit tested separately so when two or more units are ready they are assembled and integration testing is performed now when the complete pen is integrated the system testing is performed so this was all about the system testing now let’s move on and have a look at the interface testing now it basically verifies that communication between the systems are done correctly if all supported Hardware or software has been tested now when an application or a software or a website is developed then there are s several components of it those components can be server database Etc now the connection which integrates and facilitates the communication between these components is termed as an interface so there are three phases of interface testing in an interface life cycle first we have the configuration and development so when the interface is configured and once the development starts the configurations need to be verified as per the requirement next up is the validation so when when the development is completed the interface needs to be validated and verified now this can be done as a part of unit testing also finally we have the maintenance now once the whole software is ready deployed and working then the interface needs to be monitored for its performance and any new issues introduced due to the changes made or detering performance now let’s see why do we have to perform interface testing so it is required to check if the server execution is proper now error handling is done properly and appropriate error messages are shown for queries made by the application or software it is also used to check the result when a connection to the server is reset and also to check the security aspect when the components communicate within themselves interface testing is also done to check the impact of network failure on the communication between the components now let’s have a look at few steps that ensure interface testing is successful first one is Define your requirement now before creating the interface tests it is essential to understand the application hence try to find answers to questions like what is the purpose of the interface or what is the workflow of the system or application now defining all such answers will help you to understand the requirement next up is the expected output now we know and understand the requirement very well it is the time to finalize the output that we will be expecting from the tests not just a pass or fail it can some data call to another API Etc third one is start small so with interface testing we can’t directly move on with creating big test cases creating small test cases or calls is relatively simple at least in small functions create small test code and verify if the output is as expected or not next try automating now writing codes for testing and interface can be boring you will not only be spending time in writing the code but along with this you will will also have to spend time to understand the format style the coding language used for development and then as an icing on the cake you will have to make sure that your code isn’t creating a problem to the app or system code finally Define the start and stop points now before starting the execution of a test we always decide the start and the stop point of the test as well as decide how the entire testing process will start and end next up we have the regression testing now regression testing is a crucial stage for the product and very useful for the developers to identify the stability of the product with the changing requirements now let’s have a look at some of the techniques of regression testing first one is retest all now as the name itself suggests the entire test cases in the test suit are re-executed to ensure that there are no bugs that have occurred because of a change in the code next up we have the regression test selection now in this method test cases are selected from the test suit to be re-executed not the entire suit is re-executed here next up we have the test case prioritization test cases with high priority are executed first then the ones with medium and low priority finally we have the hybrid technique now this is a combination of regression test selection and test case prioritization now how do we select the regression test suit for most of the bugs found in the production environment occur because of the changes did or bugs fixed at the 11 are that is the changes done at a later stage so let’s have a look at the test plan template first we have the document history now it consists of a record of the first draft and all the updated ones next we have the references column that keeps a track of all the reference documents used or required for the project while creating a test plan next up we have the regression test plan that consists of all the introduction and details that are involved in the testing now the final one in functional testing is the acceptance testing now acceptance testing is a level of software testing where a system is tested for acceptability the purpose of this test is to evaluate the systems compliance with the business requirements and assess whether it is acceptable for delivery so basically the management sales or the customer support performs these kind of testing also the customers and the end users of the software can do the following acceptance testing also has a task plan such as as the acceptance test plan where we prepare review rework and form the Baseline and then we have the acceptance test cases or checklist where we again prepare review rework and form the Baseline and finally perform the acceptance testing now let’s have a look at some of the types of acceptance testing first one is the user acceptance testing now this is used to assess whether the product is working for the user correctly for the usage next up we have the business acceptance testing now this is required to assess whether the product meets the business goals and purposes or not next we have the contract acceptance testing now this is a contract which specifies that once the product goes live within a predetermined period the acceptance test must be performed and it should pass all the acceptance use cases then we have the operational acceptance testing now this is to assess the operational Readiness of the product and is a non-functional testing it mainly includes testing of recovery compatibility maintainability technical support Port availability reliability failover localization Etc then we have the Alpha Testing now this is to assess the product in the development or testing environment by a specialized testers team usually called the alpha testers and finally we have the beta testing now this is to assess the product by exposing it to the real end users usually called the beta testers or beta users in their environment now these were some of the functional testing now let’s move on and have a look at some of the non-functional testing types now there are a bunch of software testing types which differentiate the job work for the qway while testing the apps it is a testing to determine the performance of the system to measure the measure validate or verify quality attribute of the system the first one is the documentation testing now documentation testing helps to estimate testing efforts required and test coverage now software documentation includes test plan test cases and requirements section so there are four main focus areas when testing documentation that is instructions examples messages and samples so if Specific Instructions are provided for certain activities it’s likely we will have test scenarios defined for those same activities similarly step-by-step examples may be provided to explain GUI screen inputs clarify Syntax for commands or other interfaces show expected outputs or illustrate other important points now when we hit a problem for example an error message we should verify that the documentation for the message is correct now finally samples are sometimes documented for such things as initialization or tuning parameter input files now next up we have the installation testing so installation testing is a type of quality assurance work in the software industry that converges on what customers will need to do to install and set up the new software successfully now the testing process may involve full partial or upgrades install or uninstalled processes now let’s have a look at some of the installation testing tips first we need to install the full version of application now in case if you are upgrading the application or previously installed a basic version now installing the full version on same path then system should allow you to install full version application without any error next we have the automate testing efforts the flowchart will help you to create the automated scripts using the flowchart you can easily make out the automated script for installation testing now after execution every test case use of the disk image to be installing on dedicated machine which will save some time next up we have the required disk space check in installation now this is the most critical scenario in the installation testing now the disk space checking is done using automated and manual testing method so you can verify calculated dis space Space by installer is correct or Not by using manually or automated tools now on different file system format the disk space may vary like on NTFS FAT32 and fat16 Etc next we have the use of distributor testing environment now to executing test cases effectively you can use distributor testing environment which will save your cost and time next we have the automate the check off files installed after installation so you can use the automated script to check that all the required files are installed successfully or not then we have the confirm for registry changes after installation so here you have to check for registry changes after the installation of your software then we have the negative testing and installation testing now this intensely tried to break the installation process to check the behavior of application under such conditions finally we have the uninstallation testing now you should also check for the uninstall testing to check whether the user is able to uninstall the application without any error and removing all folders and files related to installation next up we have the performance testing now the performance testing includes load testing stress endurance and Spike testing now here the software tester team provides performance testing on Amazing projects now let’s have a look at the types of performance testing so we have load testing which is a type of performance testing conducted to evaluate the behavior of a system at increasing workload then we have the stress testing which is a type of performance testing conducted to evaluate the behavior of a system at or beyond the limits of its anticipated workload then we have the endurance testing which is a type of performance testing conducted to evaluate the behavior of a system when a significant workload is given continuously finally we have the spike testing which is a type of performance testing conducted to evaluate the behavior of a system when the load is suddenly and substantially increased now let’s have a look at some of the tips for performance testing so first we have to establish a test environment as close to the production environment as possible then we have to isolate the test environment even from the QA or u8 environment though there is no perfect tool for performance Testing Research and decide on the tool that best fits your purpose also do not rely on the results of just one test you should conduct multiple tests to arrive at an average number be wary of any changes to the test environment from one test to the other next up we have the reliability testing now reliability testing assures that the product is fault-free and is reliable for its intended purpose it is about exercising an application so that failures are discovered before the system deployed now let’s have a look at some of the types of reliability testing first we have the feature test now in this each function in the software should be executed at least once and the interaction between two or more functions should be reduced also each function should undergo proper execution or functional test next we have the regression test so whenever any new functionality is added or old functionalities are removed in an application it under goes a regression test to make sure with introduction of new functionality no new bugs are introduced then we have the load test now load test is done to test whether the application is supporting the required load without getting break down now in order to find the breako of an application the load is gradually increased until the application gets hung now let’s have a look at some of the importance of reliability testing as we know software applications are in use in almost every sector of manufacturing Healthcare Defense government telecommunication Etc therefore the question is that how reliable the software application is this question is very very important because the Reliable Software is of great use and the organization working on it can feel the confidence in their business systems now the test cases should be designed covering all the required functionality of the software application and these test cases should be executed for sufficient amount of time to get a rough estimate of how long the software can execute fine without failure now the test case execution sequence to run the overall functionality of the software application should match the real production operational plan of the application now moving on let’s have a look at the final type of non-functional testing the next type is the security testing now the security word itself defines that something has to relate with technique to strengthen the security it’s not about securing data and information it can affect the whole functionality of the system so there are basically four main focus areas that are to be considered in security testing that is the network security which involves looking for vulnerabilities in the network infrastructure then we have client security which ensures that the client cannot be manipulated and the server code and ITS Technologies are robust enough to fend off any intrusion now let’s have a look at some of the security testing techniques first one is access to application so whether it is a desktop application or a website access security is implemented by roles and Rights Management it is often done implicitly while covering functionality then we have the data protection now there are three aspects of data security first one is that a user can view or utilize only the data which he is supposed to use the second aspect of data protection is related to how that data is stored in the database and the last one is an extension of the second aspect proper security measures must be adopted when the flow of sensitive or business critical data occurs next up we have the Brute Force attack Now The Brute Force attack is mostly done by some software tools the concept is that by using a valid user ID the software attempts to guess the associated password by trying to log in again and again then we have the SQL injection and xss So conceptually speaking the theme of both these hacking attempts is similar so for all input fields of the website field length should be defined small enough to restrict input of any script then we have the service access points so when there is a large number of the target audience the access points should be open enough to facilitate all users users accommodating enough to fulfill all users requests and secure enough to cope with any security trial next up we have the session management so you can test for session expiry after particular idle time session termination after maximum lifetime session termination after log out check for session cookie scope Etc then we have the error handling so the error codes are returned with a detailed message these messages should not contain any critical information that can be used for hacking purpose finally we have the specific risky functionalities now mainly the two risky functionalities are payments and file uploads these functionalities should be tested very well so these were the different types of software testing that are involved in our everyday life so when I say testing methodology I mean combinations of principles ideas methods and Concepts that help you during the testing process testing methodologies are simply strategies and approaches used to test a particular product to make sure that it fits the purpose so as software applications get more and more complex and get intervened with many different platforms and devices it’s more important than ever to have a robust testing methodology because a methodology it manages user requirements test cases bugs all in single integrated test environment it offers full traceability throughout the testing life cycle it acts as a complete testing solution that includes management requirements test case designs release management and many other things it provides a complete picture of software product and its health issues or you can say status it leverages current technology Investments and many other automated testing Solutions and offers best testing experience that is why when you start with testing you need to have a proper suitable testing methodology guys nowadays there are dozens of software testing methodologies each with their own starting points duration of execution and methods that are used in each step the more well-known among those are we have waterfall model we have V model agile model spiral model you have something called rup that’s rational unified process and rad model that’s nothing but rapid application development model extreme programming and many others choosing the proper one can be a harsh experience that’s why you should know what each model mean what they has to offer what are the disadvantages where they’re applicable where they’re not applicable and they’re advantages so in this session we going to discuss each of these models in brief but before we proceed any further I want to let you know guys one thing people often combine software development models with software testing models because the development of the software and the testing most of of the time are done in parallel not exactly parallel but as soon as the software is developed it’s sent to testing so when they mean software testing methodologies they’re almost same as software development models itself don’t confuse anyway let’s get started with our first model which is waterfall model I’m sure you have heard of waterfall model right it’s one of the most popular model in software engineering well the waterfall model is one of the oldest models developed by vinston Roy in 1970 it’s also known as linear sequential life cycle model the traditional waterfall testing approach it represents multiple stages in a sequential manner that flows progressively downward just like a waterfall hence the name waterfall model it means that you can move to the next phase of the development or testing only after you have completed the previous phase successfully so once a phase of development is completed you can proceed to next phase and there’s no turning back as in once you start with the design phase you cannot go back to the

requirement phase this approach is useful when requirements are well known you’re sure about the technology and you have understood the technology and all the resources with required expertise are available and they are at hand in such cases this model is highly useful as you can see it has like five phases first you begin with requirement phase that’s nothing but capture and analyze all the requirements and make sure whether they are testable or not then you have system design you create and document designs based on the requirements which you collected in the previous phase you define the hardware and the software requirements as well next up we have implementation you create robust code for components as per design and then integrate them and obviously next we have verification that’s nothing but testing integrated components they form a whole system here you make sure if the system is working as per the requirements you also keep track and Report the testing process you also make sure that the system is stable with zero bucks and it passes all the test criteria and environment setup is perfect so basically in this step you’re making sure that your product is perfect and lastly you have system maintenance you make sure if the application is working efficiently as for the requirement within the suitable environment in a case a defect is found then that should be fixed and deployed or updated and later on so that’s all about waterfall model talking about advantages and disadvantages the main advantage of waterfall model is that it allows for departmentalization and managerial control apart from that it’s very easy to understand and easy to manage because it’s easy to understand it allows for easy testing in analysis it says significant amount of time talking about disadvantages the disadvantage of waterfall model is that it does not allow for much revision so once an application is in the testing phase it’s very difficult to go back and change something like I said earlier because of that it’s shorten flexibility it lacks the visibility of the current progress as in you cannot see what’s happening right away and the most important thing is changes in the business requirements or new additions in functionality require changing all the previous steps lastly the end product is available only at the end of the cycle so these are some disadvantages next up we have V model so V model is basically an extension of waterfall model where the process execution takes place in a sequential manner but in vshape which is clearly visible on the screen as you can see there’s an image so as you can see in the image below there exist a directly Associated testing phase in each phase of development cycle as you can see the requirement analysis is associated with operational testing and acceptance testing then you have i l design which is associated with integration testing similarly detailed specification is associated with unit testing so basically using this V model you can perform stacked testing verification and review that helps to prevent possible defects in the later stages well you can say that this model is basically divided into three phases we have verification phase next up is the coding phase and validation phase and verification phase and validation phase are done in parallel or you can say each testing phase is associated with a phase of development cycle so guys the phases of V model are changeable but usually they include the following phases as you can see requirement phase is associated with acceptance testing its main purpose is to evaluate if the system is ready for the final usage then you have high level design phase which relates to system testing and includes evaluation of compliance of specified requirements to the integrated system and next up we have detailed design phase which is in parall to integration testing that checks the interactions between different system components after that the coding stage begins where you have another necessary phase that’s nothing but un testing it’s important to make sure that the behavior of individual parts and the components of your software is correct and it meets the requirement so basically in coding this pH it contains actual coding in the development life cycle so programming languages should be chosen based on your requirements talking about advantages and disadvantages of these model like I said it’s just an extension of waterfall model so the advantages and disadvantages are almost similar apart from that it’s simple to use easy to understand it’s good good for small projects and it’s highly cost effective when compared to Waterfall model and there’s no overlapping between the faces because as you can see the enter process is sequential talking about disadvantages just like waterfall model no inherent ability to respond to changes you have to change all the steps and testing is usually squeezed in the end and the absence of Clear Solutions that eliminate the software defects that’s one of the most important disadvantages of V model and it’s not suitable for large and and complex projects that’s it about the V model let’s move on to next model which is incremental model well everything is said in the name itself you can consider the incremental model as a multi- waterfall model of software testing the whole incremental process here is divided into various numbers of cycles each of them is further divided into smaller modules each iterations add a specific functionality of the software so an increment here actually includes three Cycles software designing and development testing and implementation as you can see in the diagram I have build one which includes all the three faces then I have build two a functionality has been added in the build one and then we’ move on to the build to and add another functionality that way you develop a product in incremental process another good thing with this model is that simultaneous development of different product versions is possible for example the first first version can pass the testing phase while the second one passes the development phase the third version in turn can pass the designing phase at the same time so simultaneously you can develop different product versions well you can continue this until your product is perfectly develop well it all says in the name itself right incremental model as you go on in every build you add a new functionality and at a single point of time you can have multiple builds or multiple versions being developed the advantage is that it’s more flexible and it’s cheaper when you have change of requirements also the software testing process here is more effective since it’s easier to test and debug if you’re using smaller iterations but the disadvantage is that it’s costlier when compared to Waterfall model that’s all about the incremental model it’s simple next up we have agile model agile as you guys know has become one of the most popular software development methodology in recent years in parallel it’s also known as software testing methodology so majority of firms use agile techniques in some capacity or other for software development and testing projects so with agile developers build software incrementally well you can say it’s a type of incremental software testing technique so they break the project down into small segments of user functionality which we call stories prioritize them and then continuously deliver them in two week Cycles called Sprints the testing methodology is also incremental each small release is Thoroughly tested to ensure quality as you can see I have increment one I have request phas after that it’s tested it’s coded and designed so you can see that increment is a small release it’s tested perfectly for each and every defect and the quality is ensured and then we move on to the next increment and we have the same process being done again but we add further more functionalities to the previous iteration so basically this entire process of iteration allows testers to work in parallel with the rest of the project team throughout the process and fix the flaws and errors immediately after they occur so the main goal of this approach is that they have to deliver a new software feature fast and that to with the best quality so it focuses on responding to the change rather than extensive planning like in waterfall model waterfall model is all about planning one phase after other and not going back again but here if you have a requirements change you interact with the other team or the other increment and make the changes as soon as possible and release the product in small Cycles so that’s the profit of agile model next up we have advantages so as you can see it has a lot of advantages to offer it’s an Adaptive approach that responds easily to the changes unlike waterfall model since flaws and defects are easily found and corrected the quality of the product will also be improved and it’ll be best it allows for the direct communication between the testers and other people involved in the testing process or the software development process it’s highly suitable for the large and long-term projects because you can release the product in small iteration so that’s what makes it more suitable for large and long-term projects it promotes Teamwork because it allows for direct communication which directly affects the teamwork it’s easy to manage because we are handling the small release Cycles in every iteration and lastly it requires minimum requirements or resources you can say talking about disadvantages it’s highly dependent on customer feedback so every small iteration you release it to Market you wait for the customer feedback and based on that you develop the next iteration obviously there are bugs in addition to that you also take the customer feedback as well so it’s highly dependent on Clear customer requirements up front and there’s this maintainability risk involved it’s difficult to predict time and effortful large projects it lacks documentation efficiency it’s not suitable for compx project and there are chances of getting off track as the outcome of AG stage is not that clear next we have spiral model spiral model is similar to incremental model with more emphasis placed on risk analysis so basically here the importance is given to risk analysis the spiral model has four phases you have planning risk analysis engineering and execution and evaluation a software project repeatedly passes through these faces in iterations which we we call spirals here so once the first cycle is completed the second cycle starts software testing starts from planning and it lasts until the evaluation phase so the main advantages of this spiral methodology is that immediate test feedback that’s ready at the third stage of each cycle since the feedback is available in every Sprint or spiral in this model it helps to guarantee the quality of the product just like your agile model however it’s important to keep in mind that the model can be pretty costly one and it’s not suitable for small projects so the thing that you have to remember is that the main emphasis here is on risk analysis and since you get the customer feedback in the third phase the quality of the product is really high so we already discussed the advantages the first one is this lower amount of risk due to high risk analysis and obviously it ensures rapid development of the product the quality of the product is really high because every time in every spiral at the third phase you get a feedback it offers strong documentation control a requirement changes can be easily accommodated at a later date because this is an incremental model just like AEL model requirement changes can be easily accommodated talking about disadvantages it can be costly to use when compared to other models it’s not suitable for small projects you have large number of intermediate stages because you have different multiple spirals right it requires a lot of technical expertise it’s highly dependent on risk analysis phase I think I just said that so that’s all about spiral model so the last Model that we’ll be discussing in this session is rad model or you can say rapid application development this rapid application development model is also a form of incremental model where components are developed in parallel so with r the focus is mainly on building a prototype that looks and acts like a final product in this approach a prototype is created by assembling the different components of the software product that have been developed in par so once you create the Prototype which is nothing but the components assembled it is used to gather feedback from the customer so this rad model spiral model and ajile model are different forms of incremental model and as you can see in rad model it’s divided into five phases or it includes five faces we have business modeling the first phase it identifies White information flow between various business channels then we have data modeling information gathered from previous phase is used to define data objects then you have process modeling data objects which you got in the data modeling step are then converted to get business objective in the third phase then you have application generation various automation tools are used in this tab to process the models to actual source code and lastly we have testing and turnover new components and all the connecting interfaces are tested and the object or the cycle or the product is released to Market so as you can see the entire process goes on for about 60 to 90 days this rad model is recommended when the product is required to be delivered within a short period of 2 to 3 months and there’s a high availability of skill resources talking about advantages it reduces development and testing cycle time it’s not that expensive and obviously since it’s an incremental model it enhances the customer feedback due to customer involvement throughout the cycle talking about disadvantages it requires highly skilled resources if you have highly skilled resources and if you have two to three months of time and you have a product to develop then Brad model is highly suitable and what are the other disadvantages well it requires a system that can be modularized as in divide and it’s hard to use with Legacy systems so this brings us to the end of software testing methodologies discussion each of these models employ a different testing methodology to test the quality and the security of software in different ways and different stages so choosing one among them can be quite complex and I hope that what you’ve learned today will help you choose a proper methodology according to your requirements so guys that’s all about software testing methodologies let’s get started with our next topic as you guys already know the main purpose of software testing is to deliver an Optimum quality product at faster pce to help tester achieve that there are multitude of software testing techniques each with its own strength and weakness but what exactly is a software technique what do I mean when I say a technique software testing technique refers to the procedure or a way to test the software under test by comparing the actual and the expected results a good software testing technique helps tester to design test case in such a way that minimal steps of test cases are involved so the two key points with software testing techniques is that you need to have minimal test cases but they should be able to capture maximum functionalities of the software so with testing techniques you can develop smarter test cases reduce the number of steps required in test cases so guys in this session we will be discussing some of the popular techniques and I’ve divided these techniques into different categories so basically when it comes to software testing techniques they’re divided into three main categories that would be white box testing blackbox testing and experience-based testing so we’re going to discuss each of these techniques which come on the different categories in brief let’s begin with blackbox testing so what is blackbox testing blackbox testing is also known as specification based testing here the testers analyze the functionality of the software or the application without knowing much about the internal structure or the design of the product so the main purpose of this method is to check the functionality of system as a whole to make sure that it works properly and it meets user demands well the key point that you have to remember is that the testers perform testing without knowing much about the product there are a lot of testing techniques that come under blackbox testing let’s discuss each of them in brief so guys first in the list we have equivalence partitioning in equivalence partitioning input values to the system or the application which is under test are divided into different partitions or groups or classes based on its similarity in their outcome so instead of using each and every input value you can use a value from each class or partition which covers all the possible scenario to execute the test cases so that way you can easily identify valid as well as invalid equivalence classes you don’t have to perform testing for each and every possible input value that would be really hectic so this equivalence partitioning makes tting lot easier and it saves a lot of time and effort on your part well let’s try to understand what equivalence testing is with a simple example let’s say I have a test scenario where I have to test input conditions accepting numbers from 1 to 10 and 20 to 30 so how do I write test cases how many test cases should I involve should I check every number from 0 to 10 and then 20 to 30 and then in between and all that that would be really hectic so what do I do I’ve divided the number of input values into five possible test cases I have taken values before one that’s from any number of values to zero that’s just before one which should obviously come under invalid class because we want to test the values which come under 1 to 10 and 20 to 30 and next up we have valid values that’s the values which come under 1 to 10 then obviously the values between 10 to 20 those are also invalid because we don’t want to test those values as in we don’t want those values after that we have values from 20 to 30 which come under valid class lastly the values from 30 want to Beyond instead of picking each and every input value from these five divided classes you pick up a value and perform a test case or execute the test case since rest of the values come in the same category whatever the result you get for the particular value which you take can be applied to that other values as well for example for a range between 11 to 19 I’m taking a value of 15 so I apply 15 I get a results now I don’t have to apply the same thing for 16 18 19 and all because I’m sure they all belong under the same category which is 11 to 19 so the result would be same as 15 that way we can reduce the number of input values that we have to test and save lot of time and effort I hope you have understood it right let’s move on to next type then that’s nothing with boundary value analysis well you can say boundary value analysis is next part of equivalence partitioning it’s a Well observed truth that greater number of Errors usually occur at the boundaries rather than in the center of the input domain for a test it seems logical right you can find more errors at the boundary rather than the values which are at the center so when I say boundary it means the value near the limit where the behavior of the system usually changes so in this boundary value analysis technique test cases are designed to include values at the boundaries if the input is within the boundary value it’s considered positive testing if the input is outside the boundary value it’s considered negative testing so it includes maximum minimum inside or outside edge typical values as in the values which come in the center and error values so here’s a simple example to understand let’s consider a testing scenario here you have to test input conditions accepting numbers from 1 to 10 so using boundary value analysis we can Define three classes of test cases here that would be input boundary values as an exact boundary values which is nothing but one and 10 we want to test all the conditions accepting numbers from 1 to 10 so what are boundaries exact out boundaries 1 and 10 then you have values just below the extreme edges of input domain that’s before one which is nothing but zero and before 10 which is nothing but 9 then you have values just above the extreme edge of input domain that’s the value after one which is nothing but two and the value after 10 that’s nothing but 11 so what are the boundary values that you can consider to test here 0 1 and 2 and 9 10 and 11 so instead of considering all the input values you can consider the boundary values because it’s at the boundaries where the behavior of the system usually changes and then perform testing so that’s nothing but boundary value analysis next up we have decision table based technique a decision table basically is a tabular representation of different possible conditions versus test actions you can think of conditions as inputs while actions can be considered as outputs so in this technique we deal with different combinations of input values this helps tester identify all the input values if he or she has overlooked any because of that very reason it’s also known as cause effect table technique as well so the first task here is to identify functionalities where the output depends on a combination of inputs if there are large input set of combinations then you can divide them into smaller subsets which are helpful for managing a decision table and for every function you need to create a table list down all type of combination of inputs and respective outputs let’s consider a simple example suppose a submit button should be enabled if the user has entered all the required Fields so the test scenario here is that a submit button must and should be enabled only if the user has entered all the required Fields And when I say required fields that it be name email and message as you can see I have eight rules here or eight possible combination of inputs the user has given name and email but he has not given message that would be a rule for then the output would definitely come under negative case right submit Buton will not be enabled suppose if the user is not given anything that’s name email message isn’t given anything so obviously the submit button can’t be enabled nothing happens when you click on the submit button but suppose let’s say user has given a valid name valid email and a valid message then when you click on the submit button something happens that’s nothing but action so that way we consider different possible combination of inputs we draw draw table and we point out what’s the possible output for that particular combination of input next up we have state transition diagram well in this approach the tester analyzes the behavior of an application on the test for different input conditions in a sequence so you can provide positive as well as negative values to check how the application responds here you can apply this technique when an application or the system gives a different output for same input depending on what has happened in the earlier state so the concept here is you can use this technique when your system is giving out different input but for the same input and why do you call such a system you call that system as a finite State system you can follow three simple steps to perform this testing first of all you go ahead and create a state transition diagram which as you can see is there on the screen then you build the state table to review the state transition diagram that can cause errors lastly you design test cases from the state table which you have created in the step step two and the state transition diagram which you have created in the step one if you guys are not familiar with what a state transition diagram is let’s go ahead and check out an example let’s say you have to book a room you have initiated a booking but right now if the room is available the room count will be decremented by one and the room is assigned to you user moves in but let’s say the room is not available your name will be added to the waiting list and from the waiting list when Once the rooms become empty you’ll be assigned a room if there’s a room which is available if not if you or a user givs up then he’ll be removed from the waiting list that’s it the process ends there when you request a room for the same input the input is what you requesting for a room we have two different outputs one the room is available you’re getting a room and the room count is decremented two room is not available and you’re put on the waiting list so for the same input we have multiple output that’s what we call a finite State system now once after confirming the room the customer want to cancel the room booking so what he does he cancels and after that the room count is incremented if there are anyone who is in the waiting list they’re assigned with this canceled room and suppose if the user has moved in and he’s done with it and he’s reached the agreement date and he vacates the room the room count will be incremented and it will be archived and into added to the available room list that’s how everything happens in a sequence so guys this state transition technique is really unique approach for testing highly complex applications which would increase test execution productivity without compromising on the test coverage the last type under blackbox technique is use case testing so first of all a use case is basically a tool for defining the required user interaction it depends on user actions and the response of the system to those user actions this technique is completely functional testing approach as in there’s no programming skill required here unlike other techniques you can follow simple three steps to perform use case testing first of all you need to identify all the possible scenarios from a use case for each scenario you define a test case and a condition for that test case to be executed and lastly for each scenario you need to determine the test data for the test for example you can see a ATM system here so that’s an use case diagram which is representing a typical ATM system functionality and use cases that you can consider the first thing is you have operator who is responsible for starting the system and shutting down the system on responsible time then you have a customer so when a customer comes to ATM and he starts with whatever he’s doing in the ATM that’s when a session begins he’s either withdrawing the money depositing the money transferring the money or inquiring about the balance and sometimes it’s quite possible that when he’s performing all that he might enter an invalid pen that is also an use case which you can add to your use case diagram and the transaction obviously has to happen from the bank so that is also a part of use case diagram as you can see there’s no programming here in wall you just imagine the scenario and you create a use case diagram so this use case diagram is also one of the most popular blackbox testing techniques next up we have white box testing techniques so white box testing is also known as structure based testing unlike blackbox testing this method requires a profound knowledge of code as it includes testing of some structural part of the application so the main purpose of this white box techniques is to enhance Security check the flow of input and output through the application to improve design and usability just like blackbox we have lot of techniques that come under white box testing let’s discuss each of them in detail so you have something called statement coverage or line coverage in this technique every statement in the source code is executed at least once so each line of the code is tested which helps in pointing faulty code in case of a flowchart every node is to be traversed and tested at least once so basically this entire statement coverage or line coverage is based on the assumption that the more the code covered the better is the testing of functionality however the problem here is that with these Technique we cannot actually find the false condition in the source code so for example you have a certain set of code where it takes the value A and B and they added in the value is put to see if the C is greater than 100 then print it’s done so in statement or line coverage what are you doing you’re checking exactly that you’re not going to check what happens if C is less than 100 so what do you do if you have a case where A and B are in such a way that when added the value is less than 100 so this is where the next type of testing technique comes in that’s nothing but decision coverage or Branch coverage in this technique test cases are designed so that each branch from all decision points are traversed at least once so if you consider the previous example which we did earlier if C is greater than 100 is the decision point if C is greater than 100 print it’s done that’s what we checked in the statement coverage or line coverage but we didn’t check what happens if C is less than 100 so at that particular decision point you have two ways that are being traversed so in decision coverage or Branch coverage you check both the possibilities if C is greater than 100 print it’s done else print it’s spending so basically this method is helpful to invalidate all the branches in the code to make sure that no Branch leads to any abnormal behavior and obviously decision coverage includes much more than line coverage so it’s highly powerful than statement coverage or you can say aign coverage and next up we have something called condition coverage or predicate coverage condition coverage is basically for Boolean Expressions it ensures whether all individual Boolean Expressions have been covered and evaluated it to both true and false so I have a simple code here which reads X and Y value comp comp pass them checks if the value is zero and if either one of them is zero it prints zero so basically we have two conditions here x is equal to 0 and Y is equal to0 now these test condition get true or false as their values so one possible test case or one possible example that we can consider here is it should have two test cases in test case one let’s consider x0 Y is some random value but not zero in that case it’ll print zero right the program because X is zero similarly in test case 2 you put some value to X but consider y as zero so again it prints zero so in first test condition X is evaluated to True Y is evaluated to false in the second condition X is evaluated to false and Y is evaluated to two so basically you’re checking every individual Boolean expression has covered and evaluated to both true or false now a little bit extension of condition coverage is that multiple condition coverage unlike condition coverage in multiple condition coverage every possible combination of true or false for the conditions related to a decision has to be tested if we consider the same example which we did for the condition coverage I will have four test cases here in first test case I have both X and Y is Zer in the second test case I have X is equal to 0 in the third test case I have y is equal to 0 and in the four test case I have both of them evaluating to false that both of them are not zero so these are the four possible test cases that I can write right so all possible test cases I’ll consider in multiple condition coverage hence four test cases required for two individual conditions similarly if there are end conditions then 2 to the^ nend test cases would be required just for your information so that’s all about white box techniques next up we have experience-based testing as the name indicates these techniques are logically drawn from experience in designing test cases and test conditions there based on the experience background and skills of a person in the field of testing so basically here the tester makes use of proper strategy and documentation plan along with the gained experience now let’s discuss some techniques that come under experience-based technique well there are about four to five but in this session we’ll discuss the most important ones which is nothing but exploratory testing and error guessing so first up we have exploratory testing this technique is all about Discovery investigation and learning here the tester constantly studies analyzes the product and accordingly applies a skills traits and experience to develop test strategy and test cases to perform necessary testing so the keywords that you remember here are he studies analyzes the product and according to skills traits and experience he perform the testing it’s a very suitable technique when testing team has inadequate number of specifications requirements and severely limited time error guessing well it’s a simple technique of guessing and and detecting potential defects bugs and errors that are most likely to occur in software product so in error guessing no specific rules are applied there no uh rules and conditions as to tester should do this or that it takes advantage of tester skills intuition traits and expertise to find defects that might not be identified when other blackbox techniques are used so this technique totally depends on testers experience again the more experienc the testers the more errors he can identify well another way to actually perform ER guessing is that to regularly create defect and failure list this list can be further used to design test cases and Counterattack the box so guys with error guessing we’ve come to the end of the session so that’s all about software testing techniques each one of them serves best for the specific type of problems in the software if we use one more than others our test coverage will suffer guys so remember to choose the most suitable technique for your projects not the most popular one to conclude in this session we have learned about different testing methodologies and techniques there disadvantages advantages well there’s no such thing as one suitable methodology for all project types the choice of testing methodology or a technique actually depends on the type of project that you’re working on customer requirements schedule and many other factors so the same goes for the techniques as well so Choose Wisely so let’s discuss more about the benefits of software testing tools so first of all tools offer higher test coverage using tools to perform testing offers testers achieve higher coverage with greater process consistency and relevant repetition you can automate the repeated task with these tools and write test cases that cover maximum scenarios so basically software testing tools increase the test coverage and obviously they save time and and resources used in manual testing you have to spend lot of time and effort and money the main objective of any company as I said in the beginning is to achieve best product with less effort time and money testing tools are very helpful in that manner they automate the repetitive task decrease the weight to newans increase the speed and efficiency of testing this way they save lot of time and other resources thirdly they offer support for multiple platforms testing often involves performing same kind of test on multiple applications on different platforms and believe me when I say there are multiple platforms and doing that without help of any tools is too much work and just waste of time software testing tools are made in such a way that using a single tool you can check the functionality of your software or application on multiple Platforms in reasonable amount of time so this support for multiple platforms and next up we have bug-free releases software testing tools relieve the stress that occur before every release release and they earn kudos for buck free releases and next you have easy finding and fixing defects tools help find defects in early stages of development and fix them very easily in the beginning itself not only the beginning stages even later tools speed up your testing process they make it easy for testers to find defects find and fix defects of engineering and before they found by end users that’s what these testing tools offer and lastly they help in Faster release of software patches and new applications with fewer end user issu so to tell in one sentence software testing tools make testing more interesting more fun and less stressful for the team of software testers moving on to next part let’s see what are the characteristics of a good testing tool or the features that a good testing tool must and should have first of all any software testing tool should be easy to use if tool makes a life complex then what is the point of using it right so it should be easy to use used and maintained secondly it should be compatible with multiple platforms and technology that you are using idly a tool should support all and most of the applications and platforms that you use in your organization for your project and just because customers aren’t running your product on Mac today doesn’t mean they won’t be in future so a tool that supports a variety of different operating system configurations is great asset so tools should have operating system compatibility and plat platform compatibility it should include features for implementing checkpoints to verify values databases or key functionality of your application a good tool should support record and Playback test creation as well as manual creation for your automation test well apart from that a good testing tool should have a good debugging facility additionally the tool should provide detailed failure logs so that any script error can be easily identified and fixed without lot of time it should offer robust object identification object and image testing abilities and object identification it should also support testing of a database and finally the most important thing the cost a tool should do everything you need it to do without being a slow drain on your testing budget a good testing tool should always be worthy of your pay so these are certain features that a good testing tool should always have so before you go ahead and select any software testing tool make sure all these features are checklist so now that you know the features the next question obviously would be how do you select a proper tool that suits your requirement don’t worry I’ve got it covered for you guys a testing tool helps a product to be Market ready and climb up in the charts in terms of meeting user expectations there are many criteria to consider while selecting the automation tool or software testing tool in general let’s take a look at simple yet efficient approach to select the right automation tool or software testing tool for a testing project so the first step is to understand your project requirements thoroughly next is to consider your existing tool or the current tool which you’re using as Benchmark then you evaluate the shortlisted tool based on certain key points and finally you use some sort of Matrix to filter out a proper tool among the shortlisted tools so now that we have listed down the steps let’s go through each step in deep so the first step is always to understand your project requirements thoroughly firstly you need to clearly understand whether your current software testing project needs manual or automated testing while neither of these options are technically better or worse when compared to each other the size the budget and the time allowance of a project will certainly be the factors that affect which method will work best for you so get a deep understanding of your project requirements such as project type well it’s based on web or desktop or mobile scope of the project and the existing team strength on code language before you actually start the testing process you should know what precisely does one need to automate and what amount of test cases need Automation and which does not so basically the first step is you should have a thorough knowledge of your project requirements next step is to consider your existing tool as Benchmark you will never know if the tool is best or not unless you have some other tool to compare it with right well you can go ahead and experiment with all the tools but it’s cly timec consuming so consider the current tool of the the one which you’re using right now as a benchmark to evaluate and determine the best automation tool that’s suitable for your project for example let’s say selenium test automation tool is my current tool I’ll consider it as a benchmark the advantages and drawbacks of this tool or selenium web driver framework need to be understood before you actually go ahead and take next step for example like say selenium is free open source tool which is available to test web applications and websites it provides record playback tool to produce and record playback test scripts as well it provides language support for lot of languages like cop Ruby Java Python and not GS but it lacks proper Customer Support Services or documentation browser compatibility is also another challenge with this tool this way you should know all about the current tool that you’re using Pros as well as cons so once you have compared all the tools with your current tool make a list of selected tools and then the tools in the shortlisted list need to be Valu ated on other criterias or you can say vital parameters like is the tool easy to use and maintain does it support multiple application types well there may be desktop web and mobile or web service based application to test so the tools should support all these application types moving on it should support multiple test environments and platforms it should offer better scalability and access to other resources as well the test automation tool should be extendable enough to meet the increasing or decreasing demands later on and for testers it should offer easy authoring of test I mean a testing tool must let you create test very quickly and efficiently it should support integration with other kind of tools like continuous integration tools it should also offer proper logging of results features a software testing tool should keep a log of all the test activity and provide a detailed report for each activity a testing tool should provide users the facility to export test results to share it among team members other features are like like it should offer support for other features and functionalities it should also provide mechanism for comparing the test results and many more so these are few scenarios or you can say criterias or the V parameters where you can evaluate tool on after using your current tool as Benchmark and shortlisting a list of tools you can further short list or remove other kind of tools based on these vital parameters so once you have a list of tools shortlisted using the three steps that we just talked about the next step is to leverage a matrix technique for analysis and choose the best tool among the shortlisted ones for example you have something called pug Matrix p is how you spell it it demonstrates the pros and cons of various tools using parameters which are vital for the project so Guys these are four simple steps that you can follow to select a suitable testing tool for your project let me quickly summarize what we’ve learned the first step is to properly understand the requirement of your testing project the next step is to use a current tool or the one which you’re using right now as the Benchmark to evaluate rest of the tools compare all the tools that you have with your current tool list out pros and cons as well after that from the list of shortlisted tools evaluate them more on other features like we discussed if the tool is easy to maintain or does it support different platforms does it offer logging facility and many other features and based on those vital parameters you short list your tools again and after these three steps from the remaining Tools in your list create a matrix and find out the best one which is suitable for your project well this is not a fixed procedure or anything it’s one sort of procedure there are others as well you can Google them and learn more about it so now that we know how to select a proper tool let’s take a look at different type of software tools which are available in market so guys there are many testing tools available that are useful in several places while testing software product these tools can be categorized as static testing tools and dynamic testing tools so static testing tools test the software without actually executing it rather they’re concerned with analyzing the code or documentation for syntax checking consistency Etc static testing can be manual or even automated with the use of static analysis tools static analysis tools they examine or the test the source code of program highlight the statements with wrong syntax undefined symbols or variables or if there are any uninitialized variables and so on they also check for Flaws in the logic flow of the program apart from that they do not interfere with the execution of program so basically the software testing tools test the software without actually executing it next up we have Dynamic testing tools so as a name indicates these tools interact with the software while execution and help the testers by providing useful information about the program at different levels this information may include number of times a particular statement is executed or if or not all the branches of decision Point have been exercised the minimum and maximum values of variables and so on so basically these tools interact with the software while execution well that’s one way of categorizing software testing tools we also can categorize them as open- Source tools vendor tools and in-house tools so what are these first of all open- Source tools these are free to ous Frameworks and applications engineers build the tools and have source code available for free on the internet for other people to refer to for example you have selenium jmeter and AP so basically open source tools are nothing but free tools which are available online that you can use and you can get source code as well and as for the advantages of these open source tools there’s no license cost obviously they’re free we can modify the source code if you want and most of the time all open source tools support all popular operating and browser environments and as for the disadvantages obviously there is no reliable technical support as in you don’t know who you can contact if there is any error or anything new features may not work properly and very less documentation for you to get started with the tool these are advantages and disadvantages of Open Source tools open source tools are nothing with free tools which are available along with the source code on internet for you to use and next up we have vendor tools vendor tools are basically developed by companies that come with license to use and often they cost money and a lot because they’re Dev by an outside Source technical support is often available for use for customers and the popular examples of vendor tools we have V Runner silk test qtp and rational robot and many other tools as for the advantages like I said earlier vendor provides technical support if you raise any issue or complaint new features will work properly because these tools are developed by some company so vendors update test tools frequently they provide sufficient documentation that’s help manual as for the disadvantages since these are licensed tools they’re costly and this tools support some popular operating systems and browser environments but that’s it they don’t usually support all platforms and lastly we have something called in-house tools and in-house tool is a tool that a company builds for their own use rather than purchasing vendor tools or using open- Source tools for example Microsoft develop so many test tool for their internal use then you have IBM which has developed so many test tool for their internal use and same goes with Oracle Corporation as well so basically in-house tools are something that companies develop for their own use rather than purchasing the vender tools or using the free open source tools available on internet so yeah this is one way of categorizing software testing tools open source vendor and in-house tools we can also categorize tools based on their purpose like we have agile testing tools automation testing Tools Mobile testing Tools load testing and test management tools you also have something called user testing tools but let’s just discuss these five types today so there are tons of software testing tools available these days under each of these categories it’s really hard to keep track of 100 plus software testing tools out there so if you want to know more about any of the tool you can actually refer to articles out there which actually list out the popular tools we have one by Dua as well which is named as software testing tools as for today’s session let’s discuss selection of popular and well-known software testing Tools in various C categories so the first type that we discussing is agile testing tools actually the introduction of agile tools has Revolution the realm of software testing the software testing tools not just simplify the process but they also increase the testing credibility companies are adopting agile software development methodology such as crom extreme programming or XP for their projects so agile has become popular these days but agile testing comes with many challenges it requires experimenting and and trying new ideas anyway few popular agile testing tools include jira I’m sure you’ve heard of it it’s a popular agile testing as well as project management tool which is developed by atashian a software company that develop products for project managers software developers Etc this tool can be used for tracking defects planning creating reports and managing all agile software development projects it’s supports an agile methodology like scrum Canan and many others and next is soap I it is an agile testing tool and is most advanced rest and service oriented architecture developed by smart beer soap UI is basically used for functional testing of web services which include web service development and invoking of web services and many other web service related functionalities it’s a free and open source tool we did discuss what open source tools are right so the source code is available for you to edit so using this tool you can create and execute functional test regression test and load test it allows you to create test cases using drag and drop interface as well so apart from these both you also have other tools like test Trail jmeter practi test and many others if you want to know more about them you can refer to the blog bya on list of software testing tools so next category is automation testing tools as I said earlier automation testing these days is must for most software project to ensure the functionality of key features it also helps team efficiently run a large number of tests in short period of time while on the screen you can see a few tools that help software teams build and execute automated test we have something called HP unified functional testing or ufd it’s formerly known as HP Quick Test professional or qtp is an automated functional graphical user interface testing tool which allows the automation of user actions on a client-based computer application it offers cool features like object recognition error handling mechanism and and automated documentation as well it also uses a scripting language to manipulate the object and controls of application which are under test and I’m sure you’ve heard of selenium right the moment you type software testing anywhere the first thing that pops out is selenium it’s a popular testing framework to perform web application testing across various browsers and platforms like Windows Mac and Linux with selenium you can come up with very powerful browser centered automation testing scripts and these scripts are most of the time a aailable across different environments it is also compatible with several programming languages like C python Ruby net and automation testing Frameworks as well you have another testing tool or automation testing tool spelled w a r and it is pronounced as water it’s an open- Source testing tool made up of Ruby libraries to automate web application testing it’s loaded with Ruby libraries it also supports applications scripted in other languages as well you can link it with databases export your XML files read files spreadsheets and synchronized code AS reusable libraries it is a very lightweight open source tool apart from these three you also have ranorex rational functional tester tosa and many others next up we have mobile testing tools mobile applications have become more and more important for businesses and I’m sure you agree with that so testing teams need to adapt and get ready to verify and evaluate mobile apps as part of their projects there are various tools and online resources to help testers build their test for mobile devices record and run automated user interface and unit test on these mobile applications some of the popular tools that you might have heard of include appm Studio APM C test eggplant test complete and kobiton so guys APM is the most popular mobile testing tool and we have a separate video for APM and APM studio in the Eda software testing playlist you can go ahead and refer to that video if you want to know more about these tools we also have load testing tools the use for websites web applications and application programming interface or apis has become more and more critical in recent times it’s important to design and build them efficiently so that they can handle a huge number of requests that are coming from users so to actually test and verify the performance of these Services under load developers can perform load and stress test using different kind of load testing tools for example you have jmeter VA or WAP load ninja web load smart meter song and many others and lastly we have test management tools software development teams can benefit by test case management tools they can use web page management tools to manage their projects testing resources recording test results and generate report to help optimize all their texting activities so basically everything regarding test like creating test cases and analyzing the results of the test cases creating some statistics based on the analyze results for all these purposes they can use managed or test management tools so there are various test management tools which are available for different needs and the most popular ones include Zer qry Q test test Lodge test Trail test link and many others out there the primary objective of any software project is to get a high quality product while reducing the cost and the time required for completing the project and to do that companies most of the time need to test their software before it actually goes out the door software testing over time has evolved as an important domain in computer science software testing basically is the process of executing the software or in any kind of application to find out if there are any bugs or errors in it before software actually goes public programmers spend hovers trying to iron out every little bug that in an application or software they check for any mistakes or problem in the design and the functionality of the software until then the product won’t be available for commercial use in the market finding out bugs can be a lot of fun and it’s not only for testers but it’s also for everyone who wants their application to be bug free today’s tester has a very high demand in it Market while according to recent reports companies contribute about 25% budget to software test and by 2025 it might be around 33% so you get the point right the demand for testers is really high well that’s out of way now let me ask you guys a question is documentation really necessary in software testing what do you think yes it is documentation plays a very important role in software testing either it can be manual testing or automation testing here’s an example to convince your people well a company let’s call it ABC had delivered a project and the project had unnown issue that delivered this project to one of its client let’s say a very angry client and they found out the issue at client side which became a very bad situation for the company and as usual all the blame was put on on quality analyst of the company the issue was something regarding the compatibility of one website well when this issue was taken to higher authorities they showed the client a written proof of not receiving any requirement asking to check the compatibility of the website so the issue was resolved very peacefully in a way documented requirements save the company from getting suit and that’s how documentation comes handy now if you are asked to write a test case would you know what to do or what that is what would a test script or a test scenario be the first step is learning what these terms are each of this term implies a different level of detail and documentation and is used for different purpose once a tester knows what each of these terms mean they can figure out how to use them to describe the testing that they’re doing on a daily basis so let’s get started then the story actually begins with most detailed way to document testing which is the test script it is a line by line description of all the actions and the data needed to perform a test a script typically has steps that try to fully describe how to use the program like which button to press or in which order to carry out a particular action in the program as such sometimes they also include specific results that are expected for each step for example an example step might be click the x button and for that step example result would be the window closes so that’s what test script is it’s detailed way of documenting what you’re actually doing during or after of before the testing the second most detailed way of documenting testing work is to use test cases test cases describe a specific idea that is to be tested without the detailed steps which are actually specified in test scripts for example a test case might say test that discount codes can be applied on top of a sale price this doesn’t mention how to apply the code or whether there are multiple ways to apply the code will the tester use a link to apply a discount or enter a code or have a customer service app that apply the discount it doesn’t matter test cases give flexibility to the tester to decide exactly how they want to complete the test and apart from test script and test cases we have least detailed type of documentation which is test scenario a test scenario is a description of an objective a user might face when using the program an example might be test that user can successfully log out by closing the program just based on that light description tester might choose to close the program through the menu option kill it through the task manager turn the computer off or see what happens when the program runs out of memory and crashes since test scenarios offer little information on how to complete the testing they offer the maximum amount of flexibility to the tester who is responsible for testing so guys while these are three ways of documenting what you’re actually during before or after testing apart from these there are other types of documentation but as for today’s session we are going to concentrate on test cases the primary goal of a test case is to ensure whether different features within an application are working as expected under the given conditions or not it helps validate a software is free of defects and if it is working as per the expectations of end users the activity of writing test cases help you to think through the details and ensures you’re approaching the test from as as many angles as you possibly can so basically test cases ensure good test coverage which is really a key functionality when it comes to testing it improves the quality of the software and decreases the maintenance and software support cost it allows the testers to Think Through different ways of validating features as in as a tester you’ll have the option to think from different angles and in test cases you can write test cases for negative test data as well which is often overlooked most of the time and these test cases are reusable for future anyone can reference them and execute the test and they also help you to verify that the software meets the end user requirements and the end user or a customer is really happy about your product or an application so Guys these are few reasons why test cases are extremely useful in software testing test cases are powerful artifacts that are beneficial to Future teammates as well as a good source of Truth for how a system and particular feature should work however before we deep dive into the lessons for writing topnotch test cases let us have a basic idea on the terminologies associated with them so the primary ingredients of a test case are an ID description bunch of inputs few actionable steps as well as expected and actual results let’s learn what each of these terms mean first you have test case name the first step for writing an effective test case is giving it a name or a title that is self-explanatory as a best practice it’s good to name the test case along the same lines as the modules that you’re actually testing for example suppose you’re testing a login page title can be something like login page if the tool you’re using doesn’t already do this it might make sense to include a unique identifier instead of a long title so what I’m saying is that instead of using a test case name you can actually use an ID for the test case as well and make sure the ID is unique for each test case but if you are using a title or a name it should be self-explanatory so one look at the title name any person who is looking at it should get to know what you’re

actually testing on so moving on to next parameter it is test case description the description should tell the tester what they’re going to test sometimes this session might also include other information such as test environment test data preconditions as assumptions and all that a description should be easy to read and immediately communicate the high level goal of the test it should not be lengthy right so if it’s actually very lengthy nobody’s going to look at it it should be in such a way that it should be very small and one look at it the reader will know what it is actually about so crisp that’s the word I’m looking for so the next parameter is preconditions you should include any assumptions that apply to the test or any kind of preconditions that must met prior to the test being executed well this information can include which page the user should start the test on dependencies on the test environment and any special setup requirements that must be done before you actually start the test this information also helps testers keep the test steps short and concise for instance in our logout example the assumptions and prerequisite can be the user is logged in and already has a valid yahoo.com email address along with the password and as for the Assumption it could be the user is trying to access yahoo.com on a supported web browser so anything that you want to actually mention before you actually start testing you can do it in this preconditions the next one is actually the test case steps the test steps should include the necessary data and information on how to execute the test this is perhaps the most important part of a test case it is important to keep the steps clear and brief without giving any essential details in case the step is difficult to navigate having relevant artifacts like screenshots or some sort of commments can be very helpful and next comes test data testing for every data permutation and combination is really challenging and literally impossible hence it becomes important to select a data set that gives you sufficient coverage so select a data set that specified not just the positive scenarios but negative as well so this way you cover all around possibilities then you have expected result the expected result tells the tester what they should experience as a result of test steps it helps the tester determine if the test case passed or failed then comes the actual result actual result column in the test case specifies how the application actually behaved while test cases were being executed if the actual and expected results are the same it means that your test case was successful and to show if your test case was successful or not you can actually add one more parameter like status of the test case well I haven’t shown it here but you can go ahead and add it and finally you have something called commands any useful information such as screenshots that tester can provide to developers or some sort of instructions can be included in this comment part so guys this is the typical format the testers follow when the wrer test case along with these elements testers can include additional parameters like test case priority type of test case like is it a positive test case or a negative test case or or if you have lot of bugs you can actually assign an ID separate for each bug so we have another parameter like bug ID and all so this is not a fixed format it depends on the tester but basically every test case usually includes these parameters plus additional sum so now that you know about the basic format or how to represent a test case let’s go ahead and look at different techniques that you can use to write the test cases a good test case design technique is really crucial to improving the quality of the software testing process it helps to improve the overall quality and effectiveness of the release software or an application the test case design techniques are broadly classified into three major categories which are specification based or blackbox test then you have structure based and finally you have something called experience-based so let’s look at each of them in more detail specification based or blackbox test case design techniques are usually used to design test cases in a systematic manner they use external description of the software such as technical specifications design details client’s requirement and more to derive the test cases with the assistance of these test case design techniques testers are able to develop test cases that save time and allow full test coverage and under specification based or blackbox techniques you have five more types let’s look at them later moving on to our next major category it’s structure based or white box techniques the structure based designs test cases based on internal structure of the software program and code here developers going to minute details of the developed code and test them one by one it’s further divided into five categories again and finally the last major category is experienced based techniques these techniques are highly dependent on testers experience to understand the most important areas of software they’re usually based on the skills knowledge and the expertise of people involved in the testing phase so these are the three major categories moving further let’s look at different techniques which come under the categories that we just discussed first under specification based or blackbox test we have five types like I said earlier the first one is something called bound value analysis or abbreviation is bva this technique catches any input errors that might interrupt with the proper functionality of the program then you have equivalence partitioning or EP in this technique the test input data is partition into number of classes having an equal in number of data so the data is distributed equally the test cases are then designed for each class or partition that are made this actually helps you to reduce the number of test cases es and then you have decision table testing here test cases are designed on the basis of decision tables that are formulated during different combination of inputs and then you have state transition diagram as the name actually indicates testers use State transition diagram to write and filter out the test cases finally you have something called use case testing in this technique the test cases are designed to execute different business scenarios and end user functionalities moving on to our next major type white box or specification based here again we have five types the first one is statement coverage this technique involves execution of all the executable statements in the source code at least once then there is decision coverage well this is also known as Branch coverage it is a testing method in which each one of the possible branches from each decision point is executed at least once to ensure all reach code is executed then you have condition coverage condition testing is also known as predictive coverage testing each Boolean expression is predicted as true or false here all the testing outcomes are at least tested once this type of testing involves 100% coverage of the code and then you have multiple condition testing the purpose of multiple condition testing is basically to test the different combination of conditions to get 100% coverage which I mentioned in the previous step which is condition coverage and finally we have something called path coverage in this technique the source code of a program is used to find every executable path this helps to find out all the faults within a particular code moving on to our next major type it’s experience-based we have something called error guessing in this technique the testers anticipate the errors based on their experience availability of data and their skill and knowledge of product failure so that’s why it’s called error guessing and then we have something called exploratory testing this technique is used to test the application without any formal documentation in this the test design and the test execution are performed concurrently so Guys these are some major popular techniques that you can use to write a test case so the successful application of any of these test case design techniques will render test cases that ensure the success of software testing so guys test cases are very important for any project because they are the first step in any testing cycle and if anything actually goes wrong at this step it might impact As you move forward in your software testing life cycle knowing how to write good test cases is extremely important it doesn’t take too much of your effort and time to write effective test scripts As Long as You Follow certain guidelines let’s take a look at few guidelines of best practices that you need to follow while writing test cases first of all you need to consider test cases based on risk and priority prioritize which test cases to write based on the project timeline and the risk factors of your application for example a highrisk feature that is scheduled for delivery in 6 week might be of higher priority than a feature or a lowrisk feature which is due to be released the next week well there’s no given formula on how to decide on the priority here you will get to know with experience moving on make sure you don’t forget about the 8020 rule the 20% of your test should cover 80% of your application even writing a short scenario can uncover a significant part of your box so this is basically the principle which is used behind sanity and smoke test actually then start with the good enough test cases what I mean by that is writing test is never done in one swoop many times it’s better to write test cases that are good enough at the present but be sure to revise them in future if needed in the most most important thing is your test cases should be crisp test suits should be defined so that they take between 45 and 90 minutes to run while still covering a significant area of system in one swoop so when choosing what test to write focus on how they can be outsourced make sure your test cases can be completed by others if necessary next classify test cases based on business scenario and functionality this will allow you to look at the system from different angles the logic here is that you need to know what test to write and when to actually write it differentiating will also help organize your test in the test Library so you and your team can actually choose what test cases need to be run based on the need of your testing and another important thing put yourself in the shoes of customer it is often a common scenario like we discussed one in the beginning of the session that an angry customer would knock up at customer support explaining that software is not delivering an intended feature up according to his expectations so while writing test scenarios keep end users requirement in the back of your mind because ultimately the product or the software designed is actually for the customer right so that’s important put yourself in the shoes of customer think like a customer and actively use a test case management tool test case management tools are deemed necessary for managing a stable release cycle they help to develop a level of transparency where everyone knows about who is working on what they can also be used for tracking deadlines related to Buck fix and a lot more in order to write effective test cases it is important that you learn the Practical use of your respective test case management tool guys there are a lot of test case management tools in the market you can choose the one according to your requirements and actually be sure what you’re actually using the tool for and finally monitor all the test cases so when working as a remote software tester or if there are too many software testers who are working on a similar project then it’s common for two software testers to bump on two similar test case therefore monitor all the test cases which are written by you and make sure to note them if they are unique or if they’re common also remember to remove the irrelevant and the duplicate test cases well I can keep going on but there are way too many guidelines that I can actually cover in this session the ones that we learned just now should be good enough for you guys to actually get started in writing test cases so do check out for more as you progress now let’s see if your common problems that you come across in test case writing process the first thing is composite step so what is a composite step here’s an example let’s say you’re giving directions from point A to point B when you say something like go to XYZ place and then to ABC it doesn’t make much sense right that’s a composite step instead of that you can say turn left from here and go one mile and then turn right on the road number 11 to arrive at Place XY Z that makes more sense here’s an actual testing example so as you can see that’s the wrong way of writing your test case I have five steps here the first step is to log into website then actually to go to realtime test session select the configurations and the step four is hit start button to run the test and perform testing of your website on respective configuration and step five is to terminate the test session now which do you think of these steps is a composite step if your answer is four you’re absolutely right you’ll get to know why let me show you the right way of writing it instead of just saying hit start button to run the test and perform testing of your website based on the respective configuration you can just elaborate it for example let’s say let’s start from the step four hit start button to run the test scroll from the top to bottom of the web page check all the icons and paddings are supported or not check resolution display and then turn need the session well in the wrong way of writing we’ve actually skipped all these important steps so what I’m trying to say here is that test cases should always be self-explanatory it is important to write the test cases as granular as possible so guys be granula while writing down the steps for execution so break them down instead of making it complex and representing them in the single sentence another frequent mistake that you might make is including multiple conditions in one test case once again let’s learn from example on the screen you can actually see set of steps which are included in a single test for a login function let’s check them out so the first step is to enter valid details and click submit leave username field empt and click submit leave password field mty and click submit choose an already logged in username or password and click submit so basically I have included all the four step in one step now you might be thinking what’s WR with that it’s saving a lot of documentation and what I can do in four step is actually I’m doing in one step isn’t that great well not quite here are the reasons as to why so what if one of the condition fails we have to mark the entire test is failed right if you mark the entire case failed it means all the four conditions are not working which really isn’t the case it’s because just the first case is not working but you’re marking failed for all the four conditions that doesn’t make sense tests need to have a flow here which you cannot actually see so the solution is to write modular test so Guys these are the common mistake that you might make when you’re actually started writing test cases so please do keep this in mind when writing test cases so that you can avoid them so guys that’s all with the theory part let’s go ahead and write a test case now but before that here are the simple steps to get you started with first thing is to prepare to write a test case first of all consider if your test case already exists before writing a new test case for your module find out if there are any already existing test cases that test the same component if you do find anything as such consider updating the test case rather than writing a new one next know the characteristics of a good test case being aware of what constitutes a good test case will help you write a better and a strong test case while you might ask what characteristics here are a few first of all you have something called accuracy the test clearly articulates the the purpose then you have something called tracing the test is capable of being traced to requirements then you have repetition test can be used to test as many times as necessary reusability the test can be reused if necessary and then you have Independence every test case you write should be able to be performed in any order without depending on any other test case these are few characteristics that a good test case should have so make sure your test case Falls somewhat under these categories and the next step is to consider the different scenarios before you actually start writing concentrate on what could happen with the product when being used by customer think from the shoes of customer think about this carefully and design your test accordingly and finally give yourself sufficient writing time because scenarios and cases form the base for your future test cases and testing you need to give yourself enough time to write a quality test as well as time to have procedure thoroughly reviewed so don’t write the test es in hurry like I said the best guideline when you’re actually writing a test case is to write a good enough test case start with small and make it perfect as you progress so these are just prep before you actually start writing a test and now that You’ have started writing a test what you actually need to do is select a tool for the writing a test case there are a lot of tools out there Excel spreadsheets are highly recommended for writing basic test cases and for manual testing as well apart from that you have other tools such as test link web test test ofia and many others so according to your requirements choose the tool whichever you feel comfortable with and make sure you know the functionality of the tool and next step is to write a test case with a choosen tool well we did discuss the template of the test case earlier right so include all those parameters and write a well- defined test case so once you’ve written a test case the next step is to write a basic test case statement for example you have few parameters like verify what is being actually tested using what tool you’re using the tag name dialogue then you have withd what are the conditions under which you’re actually testing for and then two what is being actually fed as an input to the test what is being written and what is the expected result and all that so once you finished testing it’s like a final note on what you actually have written your test case or a basic test statement for your test case and finally review the written test case your job isn’t quite over once you’ve actually written the test case you still need to review everything that has been written and evaluate that all steps are clear and comprehensible and that the expected results match with those steps so I hope the steps were clear enough right and I guess now you’re good to go you can actually start along with me or you can actually see what I’m doing right now and after that you can go ahead and write a test case of your own so let’s go ahead and write a test case for banking website so guys as for this session in this demo I will be using Excel sheets to write my test case you can actually go ahead and use any other kind of test case management tool for your purpose so before you actually get started with the test case there are some basic details that you should mention it’s not a compulsory thing but it’s good to have a basic description about what you’re actually going to do so let’s say the project name project name then module name as in the module which I’m going to test the T case is written by written date executed or reviewed by and similarly executed date date and so the project name would be Bank website testing then you have module name which can be login because we’re checking the login functionality first it’s written by let’s give my name date some date some month and some year executed by some XY Z person and then again some date some month and some Year we’re good to go now let’s just mention the parameters which should be test case title or it can be ID if you want next should be test case description then test steps prec conditions if I have any test data expected result so I’m just going to add these for now if according to your requirement you can go ahead and add all things as well actual result and let’s add something called status to see if the test case was successful or not and finally comment here we go we are checking on login functionality so I’m giving the name as login functionality which is verify functionality with valid username and password let me align it okay and as for the test steps which should be navigate to login page enter username enter password click login prec conditions nothing for navigation here I’m saying it should be valid username similarly valid password now the test data let’s give username as some random data and as for the password again so what should be the expected result for navigate to login page you should be able to see the login dialogue box credentials can be entered or you can say same thing credentials can be entered if or not actually trying to enter when you’re trying to enter if the data is actually getting inserted or not then here for the click login you can say user logged logged in since we are using valid username and password let’s just write the actual result for each of these steps let’s say we have successfully navigator to login page so let’s just write as expected it means we are able to navigate to the login page then credentials can be entered again as expected what I’m trying to represent here by writing as expected is that it’s as expected to my expected results and user loged in since you are entering Valley details it’s successful login or let’s say user successfully now the status is pass which is from all my four steps so I’m going to do this pass I do not have any comments that’s it guys we’ve successfully written a test casage let’s write another one for the invalid details so again the name is same let me just copy this and paste it that’s better with invalid username and password the rest of the steps are same in valid username I have removed the U if you can see here then the password is going to be valid so I’m going to put that here same as for this you should be able to see the login page that should be successful credentials can be entered as in you’re able to enter the details and use a logged in this three should be same as expected because you’re able to navigate you’re able to enter in the details but as for here user login unsuccessful so that will be pass which is going to be same for rest of the three steps but this step is a fail so guys as for login these are two cases that I’ve written here we can go ahead and write for multiple possibilities like invalid username invalid password valid username invalid password or if your navigation to the login page is not happening like that for different combination you can actually test cases suppose let’s say you have logged in successfully let’s write a test case to upload photo in your profile so the name should be upload photo functionality here we go what should be the description upload a phototo as logged in user sounds good when I say logged in user I meant valid user now I want to add another extra field here let’s say preconditions or pre- steps actually I need to insert a column yep here we go and I’m going to make it as preep what is a preep the pre-step here is login with correct data login with valid data that’s the action I actually want to perform that’s why I’ve written in the step as for the preconditions I can say login details should be valid now the test steps I have three first one is Click the upload let’s say click the upload photo link or photo button link is more better then upload a photo as an add the photo and then you have click on the upload button so precondition I’ve already added that’s login details it should be valid I do not have any test data or anything let’s go for the expected result what I’m expecting to happen here is upload a photo page should open that’s what I’m expecting to happen and as for here when I upload a photo image should be selected image to add should be selected image to be uploaded should be selected now the next thing is click on upload button photo should be successfully uploaded so photo uploaded correctly properly or correctly anything now what are the actual results I’m expecting it’s the test case here is upload photo as a logged in user as in successful user so as expected if the navigation Works proper if I click on that photo upload link if it goes proper then as expected similarly and here’s the same as well so this will be passed because my test has passed successfully then Pass and Pass well this was for a logged in user if you do the same for the logged for the invalid user credential you wouldn’t have anything in the pre-step here so upload photo as a invalid user for all these actions upload a photo page if it navigates properly that should be a pass upload a photo if you actually have any photo that you’re uploading that would be a pass but when you click on the upload button it does work properly but before actually this happens you are logging in or you’re using this as a invalid user so here your test tape actually fails here itself before itself because you’re not a valid user so this way you can actually write the test cases according to your requirements so guys based on the things that we have learned today go ahead and write a sample test case according to your requirement there are a lot of sample templates on Google that you can search for and verify to actually Master writing test cases so what is a test plan the overall software testing process also has many other formal procedures fees but the plan is actually where we begin or where a testing company actually begins like any project when you have a plan in place chances are it will go very smoother so a test plan and software testing is the document that outlines the what then how who and more of a testing project well in general it includes the objective and the scope of test that are to be run it contains guidelines for testing process such as approach testing task environment needs needs tools requirements schedule constraint and many other things so test planning is the first thing that should happen in the software testing life cycle it’s very important because it summarizes the testing process the plan is basically broken down into manageable pieces so that we know how to deal with each aspect of that process and it’s a record of our objectives as in the tester’s objective so the tester can look back and see how he actually did the testing and where he has to change did he follow according to the plan and all that so a test plan essentially contains the details of what the scope of testing is what the test items are what the test items test or pass criteria will do and what is the need to set up the entire test environment and many other things well now that I’ve talked so much about what a test plan is like I said it contains all the details before you actually start testing you might be probably wondering why is it necessary to invest all this time and effort to create a test plan how about just jumping off to testing and getting the work started while hold on you might need to rethink testing is an important process in software development like cycle which controls and determins the quality of your deliverables so if you want to deliver a bug free product at its plan timeline you need a good test plan to make it happen well here are some reasons to convince you why test plan is really beneficial before you actually start testing so first of all it serves as a framework and a guide to ensure your testing project is successful and it will help you control risk as well the very Act of writing helps us think through things in a way we might actually not consider normally not just in software testing it’s the case even when you plan anything in your life right so yeah the test plan contains details of testing scope which prevents testing team from putting any efforts in testing out of scope functionalities with test plan you can have rough estimate of time and effort which is needed to complete the software project it clearly defines roles and responsibilities of every team member so every individual in the testing team knows what he is required to do and what is expected to do also it provides schedule for testing activities hence it provides you a baseline schedule to control and track your team’s testing process but one thing guys as changes to the test plan are made the test plan document should be updated to reflect the the new decisions that you have actually made so test plan is not some a fixed document or something it keeps changing according to the requirements and the test process that you follow it also outlines the resource requirements and equipment needed which are essential to carry out the basic testing process so it guidelines the testers thinking it acts as a source of proof If you need to refer to anything in future just like the example which we discussed in the beginning of the company ABC like the CL had an issue but then the client didn’t specify the requirement when he was listing out his requirements the company had proof so somehow they were saved from getting sued so basically it’s a proof which you might refer to or which you can refer to in future so apart from that it encourages better communication the test planning and the plan itself it serves as a vehicle for communication with the other project team members such as testers peers managers and other stakeholders it also helps people outside the test scene such as developers business managers customers understand the details of testing so that’s how important a test plan is in this way it serves as a guide book for entire testing process even though we are aware of the benefits of having a test plan we also know that testers may choose not to write one arguing for reasons like it takes a lot of time so even though we are aware of the benefits of having a test plan we also know that some testers may choose not to write one for multiple reasons like it takes a lot of time and effort to prepare a very lengthy and detailed test plan changing Management in the test plan can be challenging for dynamic projects and that plan often has written information and many of reasons so what happens when one doesn’t have a test plan let’s check out first of all it creates a misunderstanding about roles and responsibilities when there are no clearly defined roles and responsibilities it could lead to important task of testing being left undone or to an un NE effort for example when two testers work on the same task so basically both of the testers are think that they have to test the product but they’re testing the same feature of the product and it’s just waste of time so there’s a misunderstanding about roles and responsibilities secondly the test team does not have clear test objectives for example the test team is unaware of the different types of testing that should be done on a system as well as the reasons for doing the different types of test without clear objective for running tests there’s an increase likelihood that critical and essential system characteristics will not be adequately or properly tested well again it’s a huge loss for the company and testers without a test plan doesn’t know when the process actually ends because the exit criteria has not been specified the testing team does not know when the software testing process actually ends this is essential as in the test team should know when the process ends because it helps to finish the task within the stipulated deadline without compromising the quality functional ity and efficiency of the software so basically without a proper test plan the test team or any tester doesn’t know when the software testing process actually ends and what are the proper timeline schedule and all that and lastly testing scope is not defined this is important since the client have false expectations regarding the amount of testing work that has to be done and the test items that are out of scope which should not be tested so due to these reasons you need to understand that writing a test plan or developing one is really important task before you actually begin with testing as you can clearly see writing a test plan is more advantages than disadvantages well there are different types of test plans let’s check what they are so basically first you have a Master Test plan it’s a single highle test plan for entire product or the software project that you’re working on and you unifies or it’s a combination of all the test plans as you can see the word Master right in the name so basically it’s a combination of the my new test plan which you create along the process of testing then you have something called level specific test plan I might have discussed in previous session that the software testing has different levels especially four important levels like unit testing integration testing acceptance testing and system testing well not in the same order but anyway so you can write a separate test plan for each of these levels and when you do that that’s what we call a level specific test plan and then comes type specific test plan as you already know there are multiple types of software testing basically having a single test plan for different type makes it complex I mean it doesn’t put out the benefits of test plan actually so to make the entire process easier you create separate plan for different types of testing that you’re employing while you’re testing the product so that we call a type specific test plan this type specific and level specific combined we call all of them together as Master Test plan so I hope you understand the distinction between different test plans right moving on you already know that making a test plan is really important task of test management process so how do you go ahead and write a test plan is that a procedure or a standard procedure at that let’s check it out so basically to write a proper test plan there are six simple steps that you can follow first step is to analyze the test product so can you test a product without any information about it well no right so you must learn a product thly and you need to understand the product more deeply before even testing it so the first step towards creating a test plan is to analyze the products its features functionalities so that you gain deeper understanding of the product further explore the business requirements and what the client wants to achieve from the end product understand the users use cases to develop the availability of testing the product from users’s point of view so basically at the end it’s user who you’re are trying to impress or satisfy the requirement so you need to have proper understanding of the product the user requirements and expectations of the product so how can you actually analyze a product in a systematic way the first thing is you can go ahead and interview your client designer developers of the software product because it’s who they start preparing the product from the scratch so they’ll know more about the product than you do so go ahead and ask them about each and every minute detail review the product and the entire project once you get them don’t avoid the important details go through all the details secondly you perform a product walkth through that’s nothing but just use the product as if you are the user and see if it’s as end user if it satisfies your requirements or not so that’s how you analyze the product moving on the second step is to develop a test strategy once you have analyzed the product you’re ready to develop the test strategy for different test levels so your test strategy can be composed of several testing techniques keeping in mind test cases and business requirements you can decide on which type of technique that you want to use for example if you’re building a website which has thousands of online users you will include load testing in your test plan similarly if you’re working in an e-commerce website which includes online transactions you will emphasize more on security and penetration testing so depending on your requirement or actually the user requirements you decide on the different technique or the strategy that you want to use when you’re testing well under this step we do have multiple steps which is to define the scope identify the testing type document the risk and the issues that you might come across and how to face the risk and all that and lastly create the the test Logistics let’s not make it more Theory based I hope you’ve understood the Second Step let’s move on to next step which is to Define objectives so basically a good test plan clearly defines the testing scope and its boundaries so as you guys know the objective of testing is to find as many software defects or bugs as possible ensure that software and test is bug free before you release it to Market so you need to define a test objective to do that you can just follow two steps which is to list all the software features it can be anything functional performance graphical user interface security many other things which you might have to test secondly after listing all the requirement features Define the Target or the goal of the test based on the features that you have listed down make a list of features which has to be tested which need not be tested this will make your test plan specific and more useful so like I said one of the benefits of test plan is you can avoid your time spending or testing the features which needs to be tested and avoid out of scope functionalities and along with that you might also have to specify the list of deliver BS as output of your testing process you might need to explicitly Define if any testing techniques such as security testing for example is out of scope for your product or if you need it or if you don’t need it all such things come under defining test objectives moving on to next step we have something called resource planning obviously when you’re testing you need a lot of resources tools people and all that so resource plan is a detailed summary of all types of resources required to complete a project task it could be human like I said all your equipment materials needed to complete testing project it’s an important factor of test planning because it helps in determining the number of resources it could be employment equipment anything to be used for the project therefore the test manager can make the current schedule and estimation for that particular project while I’m not going to list down all the roles and responsibilities or the people involved in all that but uh to understand the step it’s nothing it’s just planning about the resources which you might require when you’re actually testing the next step is schedule and estimation so with the knowledge of testing strategy and scope in hand you’re able to develop schedule for testing so divide the work into testing activities and estimate the required effort you can also estimate the required resources for each task so make a table it’s simple right in one column you can have the list of testing activities in second column you can have the members who are responsible for performing those activities and then you might actually include the schedule as well as in when this task has to be completed by when is the deadline and all that you can also include another column which says what resources are required to complete the task so that way you can control the progress or of your testing process so to create the project schedule the test manager needs several types of inputs like we discussed about deadline estimation risk and many other details so a good test plan clearly list Downs to roles and responsibility of testing team as well as the team manager as well so basically the table which you’ve created which you should create will tell everyone what to do when to do and what are the risk that might they might come across and all that and last step is to determine test deliverables so test deliverables is basically a list of all the documents tools and other components that has to be developed and maintained in support of the testing effort there are different test deliverables at each phase of software development like cycle so basically you can divide entire software testing into three parts before testing during testing and after testing testing and during this three phases of testing you do have different test deliverables for example before testing you might need something regarding test plan document test case document test design specifications this all before you actually even begin testing then during testing you need something like test scripts test cases simulators test data Matrix error logs execution lcks and many other things similarly after testing you might need to create reports defect reports release notes issues regarding the risk that you have faced and how did you overcome and all that so these are nothing but test deliverables well these are the six simple steps that you should follow but lastly your test plan is incomplete without anticipated risk mitigation techniques and risk responses well there are several types of risk in software testing such as schedule budget expertise knowledge so you need to list down the risk for your project along with the risk responses and the mitigation techniques to lessen their intensity so that’s how we write a test plan guys it’s easy right you analyze the product after that you develop a test strategy decide on the type of testing that you want to do then Define your objective as in why do you actually want to test then estimate the amount of resources that you might have to require or that you might require by performing testing then do think about shedule and estimation write that as a point in your test plan and lastly determine the test deliverables well it sounds easy but what do you actually include in a plan different people may come up with different section to be included in testing plan but who will decide what is the right format well you can go for a toly standard test plan template to assure that your test plan meets all the necessary requirements while anybody just can’t go and write test plan according to their requirements right it messes up so there’s a standard format which is created by it that you can write or you can use to write your test plan now if you’re wondering what an it is it’s an international institute that defines standards and template documents which are globally recognized so you can use the standard template to write your test plan it has defined i e 829 standard for system and software documentation 829 it specifies the format of set of documents that are required in each stage of software testing so let’s briefly discuss what are the things that you should include in your template I won’t make it much Theory based I’m just going to mention the parameter and what does it actually have to include so let’s start so the first parameter is test plan identifier so as a name actually suggest it’s it uniquely identifies the test plan it identifies a project and it may include version information as well it also contains information of test plan type the types that we discussed earlier Master Test plan test level specific test plan and testing type specific test plan so that’s all basically a one look at test plan identifier you need to know what testing is done what are you going to test and all that then an introduction it contains the summary of entire test plan it sets the objective scope goals and many other things of test plan it also contains resources budget constraints it will also specify any constraints and limitations of a particular test plan coming up next is test items it’s a software item that is application which is under test this parameter lists the test items such as software products and their versions and all that and next you have features to be listed in this section all the features and functionalities which need to be tested are listed in very detail it should also contain references to requirement specification documents that contains details of features which need to be tested so basically it contains all the features and the links to the features which need to be tested obviously since we have features to be tested we also have a parameter which says features not to be tested it basically lists the characteristics or the products or the features of the product that need not be tested or you can say out of scope it also contains the reasons as to why these featur should not be tested and then you have something called approach in this section approach for testing will be defined it contains details of how testing will be performed it contains information of of the sources of test data inputs outputs testing techniques and priorities it will Define the guideline for requirement analysis develop scenarios derive acceptance criteria construct and execute test tases and many other things and then you have something called item pass or fail as you can see in straightforward it describes a success criteria for evaluating your test results basically it documents whether a software item has passed or failed the test and based on what you should decide if it has passed or failed the test then you have something called suspension criteria it will describe any criteria that may result in suspending the testing activities and subsequently the requirements to resume the testing process then you have test deliverables we did discuss the different things that you might require during three stages of testing that’s before testing during testing and after testing and all that then you have testing task in the session testing tasks are defined it also describes the dependencies between any task resources required and and estimated completion time for these task testing task may actually include creating test scenarios or creating test cases creating test scripts executing these test cases and scripts reporting bugs creating issue logs and many other things basically the tasks that you want to perform while testing are all come under this testing task then you have environmental needs so this section describes the requirements for test environment it includes Hardware software or any other environment requirement for testing So the plan should identify which testing equipment is already present what needs to be newly brought and all that moving on we have something called roles and responsibilities obviously when you’re performing testing you have a lot of people in your team so you need to define the roles and responsibility of each person involved that’s what you do in this parameter then you have staffing needs it basically describes the training needs of the staff for carrying out the plan testing activities successfully well if they need they can be further trained on before moving on or before putting them onto next level of testing then you have something called schedule so you provide a summary of the schedule specify key test Milestones or you provide a link to the detailed schedule and all that the schedule is created by assigning dates to the testing activities you can prepare a detailed table like we discussed earlier and then obviously the risk risk play a very important role you have different risk regarding security bugs and many other fields so you list out risk and how to mitigate them and what how does that risk actually affect your testing and all the details here and finally you have approval this section basically contains the signature of approval from your stakeholders that your test plan is perfect and you can proceed to testing so I hope it wasn’t very difficult to understand right it’s straight forward you can actually understand by just looking at the names of the parameters really straightforward so please do go through it again if you found that the theory part was more the slide should help you out here so that’s it guys with this we have reached the end of the session we discussed the details of the test plan and what to include in a test plan basically a test plan is a guide book for testing process and it’s vital to keep testing process on right track so basically you can use a test plan as a mechanism to seek answers to drive information exchange and consensus and to prepare yourself for further runs of testing make it valuable for you and your stakeholders make your test plan work for you and not against you so the main aim of the test plan is to make testing much more easy easier for you so what is functional testing now this particular testing is defined as a type of testing which verifies that each function of the software application operates in conformance with the requirement specification now this testing mainly involves the blackbox testing and it is not concerned about the source code of the application now each and every functional of the system is tested by providing appropriate input verifying the output and comparing the actual results with the expected results now let’s have a look at some of the advantages of functional testing that makes it more preferable so this testing reproduces or is a replica of what the actual system is that is it is basically a replica of what the product is in the live environment now testing is focused on the specifications as per the customer usage that is system specifications operating system browsers Etc also it does not work on any if and buts or any assumptions about the structure of the system so basically there are no assumptions for this testing next up this testing also ensures to deliver a highquality product which meets the customer requirement and makes sure that the customer is satisfied with the end results it also ensures to deliver a bug-free product which has all the functionalities working as per the customer requirement finally the risk-based testing is also done to decrease the chances of any kind of risk in the product so now that we have seen all the advantages of functional testing let’s move ahead and have a look at the different steps involved in this functional testing now the very first step involved is to determine the functionality of the product that needs to be tested and it includes test the main functionalities error condition and messages usability testing that is whether the product is user friendly or not now the next step is to create the input data for the functionality to be tested as per the requirement specification later from the requirement specification the output is determined for the functionality under test this is the step three here now in the step four the prepared test cases are executed and finally the actual output that is the output after executing the test case and expected output are compared to find whether the functionality is working as expected or not now functional testing has many categories and these can be used based on the scenario so let’s have a look at some of the most prominent types of functional testing first up we have the unit testing now unit testing is usually performed by a developer who writes different code units that could be related or unrelated to achieve a particular functionality this usually entails writing unit tests which would call the methods in each unit and validate those when the required parameters are passed and its return value is as expected now code coverage is an important part of unit testing where the test cases need to exist to cover the line coverage code path coverage and the method coverage next up we have the sanity testing now testing that is done to ensure that all the major and vital functionalities of the application or system are working correctly now this is generally done after a smoke test so what is smoke testing now the testing that is done after each build is released to test in order to ensure build stability is known as the smoke testing it is also called as build verification testing then we have the regression tests now testing performed to ensure that adding new code enhancements fixing of bugs is not breaking the the existing functionality or causing any instability and still works according to the specifications is known as the regression test now regression tests may not be as extensive as the actual functional tests but it should ensure just the amount of coverage to certify that the functionality is stable next up is the integration tests now when the system relies on multiple functional modules that might individually work perfectly but have to work coherently when clubbed together to achieve an endtoend scenario validation of such scenarios is called integration testing and the final one is the usability testing now the product is exposed to the actual customer in a production like an environment and they test the product the users’s comfort is derived from this and the feedback is taken this is similar to that of user acceptance testing so these were some of the important types of functional testing now moving on let’s have a look at the different functional testing techniques so basically we have two main techniques that are known as the positive testing and negative testing now in positive testing we have the end user based or the system tests now the system under test may have many components which when coupled together achieve the user scenario then we have the decision based tests now the decision based tests are centered around the ideology of the possible outcomes of the system when a particular condition is met and the alternate flow tests are basically run to validate all the possible ways that exist other than the main flow to accomplish a function now in negative testing we have the equivalence test now in equivalence partitioning the test data are segregated into various partitions called the equivalence data classes now data in each partition must behave in the same way therefore only one condition needs to be tested then we have the boundary value tests now the boundary tests imply data limits to the application and validate how it behaves therefore if the inputs are supplied beyond the boundary values then it is considered to be a negative testing so a minimum of six characters for the user sets the boundary limit then we have the ad hoc tests now when most of the bugs are uncovered through the above techniques ad hoc tests are a great way to uncover any discrepancies that are not observed earlier now these are performed with the mindset of breaking the system and see if it responds gracefully so these were the different techniques involved in functional testing now let’s move on and have a look at the various tools that are used for this particular testing now you can explore the best tool based on your project requirements almost every highlevel company is working on Automation in today’s world so just being a manual tester will affect one’s career for sure so you need to know something called automation to boost your skill and get shortlisted for some good companies so now is the right time to know more about the need for functional testing tools but which tools we should opt is really a confusing one so let’s have a look at some of the top most functional testing tools so first we have the ranor studio now this one is a commercial Windows GUI test automation tool that supports functional UI testing on desktop web and mobile applications it is used by over 4,000 companies worldwide now ranar studio is easy for beginners with a codeless click and go interface and helpful wizards but powerful for automation experts with a full IDE next up we have selenium now selenium is an open source functional testing tool and one can download and use it without any cost it is supported by the Apache 2.0 license it is a web application testing product and it accepts many languages to write its test scripts and the languages can be C Java Pearl PHP python Etc it can be deployed on Windows Mac OS and Linux now this one is also one of the most preferable tools for functional testing now moving on next up we have the test IO now for this make sure that your web apps websites and mobile apps work Everywhere by running functional tests on real devices real browsers and under real world conditions now running functional tests with test IO lets you call upon on the skill and insight of thousands of testing professionals to improve the quality of your websites and mobile apps over 200 customer obsessed organizations rely on the power and flexibility of test IO to ship highquality software faster next up is the teler now this is one of the most simple and userfriendly testing tools in the market it provides functional exploratory performance as well as load testing Solutions though it’s not not free its subscription to download the complete tool along with its license is available at a reasonable amount now it comes with Visual Studio plug-in hence in order to bring the best out of this tool one must know the visual script finally we have the cui test now cui test is a Microsoft tool to use this tool the user shall need visual studio 2013 virtual machine which is also a Microsoft product Now by using the cui test tool one can complete completely automate tests for validating the functionality and the behavior of the application now before considering this tool one must check for the latest cost of the cui test tool and vsts licenses cost with Microsoft now out of all these tools selenium is one of the most preferred tools when it comes to functional testing so let’s have a look what makes it the most preferable one so let’s talk about some of the advantages of selenium so SEL ium is basically an open-source tool which is used for automating the test cases carried out on web browsers or the web applications that are being tested using any web browser so it’s an open- Source tool which supports cross browsing and automates web applications so now let’s see why do we need selenium IDE for automation testing now selenium is basically an open source and also there is no licensing cost involved which is a major advantage over other testing tools now the other major reasons behind selenium’s ever growing popularity are about their test cases OS platform and browser support so the test scripts can be written in any of these programming languages such as Java python C PHP Ruby PE and net and the tests can be carried out in any of these OS such as the windows Mac or Linux also the tests can be carried out using any browser that is the Modzilla Firefox Internet Explorer Google Chrome Safari or Opera so now that you know what is functional testing and also you have learned about the best tool that is used for performing functional testing let’s have a look at a small example that will help you understand how we are performing this functional testing with the help of selenium so now let’s have a look at the example so here we will be performing functional testing with the help of selenium so let’s take the example of our edira block page so now if I want to click this particular element let’s see how I can do this with the help of selenium so now this can be done with the help of locators so first let’s see what are locators in selenium now the locator can be termed as an address that identifies a web element uniquely within the web page now locators are basically the HTML properties of a web element which tells selenium about the web element it needs to perform the action on selenium uses locators to interact with the web elements on the web page now there is a diverse range of web elements like the text box ID radio button Etc and identifying these elements has always been a very tricky subject and thus it requires an accurate and effective approach thereby we can say that more effective the locator is more stable will be the automation script essentially every selenium command requires locators to find the web elements thus to identify these web elements accurately and precisely we have different types of locators namely the ID name link text CSS selector partial link text and xath so now in this particular case I’m using the link text to connect to the particular link so here we will be clicking on the interview questions and select on inspect now here we will get to see a link text named as the interview questions so here I’ll copy this and use the link text locator to locate the element now before that let me first tell you what is link text now all the hyperlinks on a web page can be identified using link text now the Links on a web page can be determined with the help of anchor tag now the anchor tag is used to create the hyperlinks on a web page and the text between the opening and closing of anchor Texs constitutes the link text so let’s switch back and see how we are going to do it now this is the example that we are going to use for our test so first of all I have created a class named example and after that I have set the property where I have used the Chrome driver and next up I have used the system. set property in order to launch my Chrome driver here so now this is the path where I have saved my Chrome driver now Chrome driver is very important when you are using Google Chrome next here I have added another object for Chrome driver and next up I have used driver. manage. window. maximize in order to maximize the window and next up there is delete all cookies where I have deleted all the previous cookies that existed and next up I have specified an implicitly wait time as 30 seconds where the page would wait for 30 seconds until it is loaded and next up I have used the driver doget in order to navigate to our edura block page now using the driver doind element by link text locator I’m trying to click on to the interview questions link now let’s run this code and check the output so now here you can see that the Chrome driver launched the Google Chrome and navigated to our edira page as soon as it entered the Eda blog page it went to the interview questions link and here you can see the output so basically whatever we would have done manually has been done with the help of the automated tools it navigated through our Blog Page and also went inside the interview questions link all by itself so this is how functional testing takes place with the help of selenium let’s understand the parameters based on which we’ll compare these two types of

testing so we’ll compare them based on these particular parameters starting from their objective we’ll discuss on how these two testing types differ based on their objective and then we’ll move on to their area of focus or where exactly the testing is done and once we’re done with this we’ll talk about their ease of use stating how easy is it to run a case in functional and non-functional testing after that we’ll talk about their functionality where we’ll understand their main features and finally we’ll compare them based on their execution process process so let’s start comparing them based on their objectives first functional testing is carried out to verify or validate the software actions like the login functions and so on whereas the non-functional testing helps in verifying or validating the performance of the software that is how the system performs under a given situation or condition so these are the objectives of functional and non-functional testing now let’s move on to understand that area of focus functional testing mainly concentrates on the user requirements that is what are the functionalities that takes place in the process and so on whereas the non-functional testing mainly concentrates on the user expectations that is how the system interacts with the user how the system is built and how you can customize your functionalities so the functional testing basically provides the answers to the what functions here whereas the nonfunction testing provides answers to how functions here okay so this is about their area of focus now let’s understand their ease of use functional testing finds it easy to execute the blackbox testing by blackbox testing I mean the internal structure or the implementation process is not known to the user so the functional testing supports this kind of execution whereas the non-functional testing finds it easy to execute the white box test cases in whitebox testing the internal structure or the implementation process is known to the user that is the user can actually see the process that takes place in the system okay so this is about their ease of testing so now let’s move on to understand the functionalities functional testing helps in describing what the system should do whereas the non-functional testing describes how the system should work okay so I think you’ve already understood what this means like I’ve mentioned earlier functional testing provides answer to all what functions in the system whereas the non-functional testing provides answer to all the how functions in the system so this is about their functionality now let’s move on to understand their execution process functional testing is executed before the non-functional testing I think you guys have figured out how the execution process takes place right functional testing helps in defining the test case okay so this is the reason why the execution of the functional testing happens before the execution of the non-functional testing whereas the non-functional testing execution takes place only after functional testing that is only if the test cases are defined you can proceed further and test them according to your wish so now that you’ve got an idea of how functional testing and non-functional testing work let’s take a look at their types software testing is brought Broly classified into two major types that is functional testing and nonfunctional testing let’s start the discussion by understanding the different types of functional testing functional testing comprises of the unit test unit test is basically the first phase of testing that is you can prepare the test cases review them rework on them if there are any errors and create a baseline for the test cases this particular type helps in testing the units of the test case so this is about unit testing say if you don’t want to test the system unitwise and you want to integrate the entire process and then test how would you do that we will use integration testing where the integration testing is the level of software testing where the individual units are combined and tested as a group so this is about integration testing now if you want to test the entire system on a whole and not integrate the process and then test How would you do that we will use system testing system testing is actually a series of different tests whose sole purpose is to exercise the computer-based system okay so this helps in testing the system on a whole now say if you want to run the test scripts on another system how would you do that we will use interface testing interface testing verifies whether the communication between two different software systems are done correctly okay so this is about interface testing now say if you want to change a particular piece of code or if you want to add a few more commands to the test cases how would you do that we will use regression testing regression testing is a test to confirm that the recent program or code change has not adversely affected the existing features that’s what you want right you need to have a test scripts which doesn’t change even if there are modifications okay okay so this is about regression testing so now let’s try to understand the last phase of functional testing that is user acceptance testing user acceptance testing helps in handling the real world scenarios according to the specifications so this is about the different types of functional testing now let’s move on to understand the different types of non-functional testing let’s start by understanding the first type that is the documentation testing documentation testing helps in estimating the testing effort required the test coverage and how to track the requirement so these are the particular features of documentation testing now once the documentation process is done say if you want to install any particular software to your system and what if there is a bug in it how would you test it we are going to use a type of non-functional testing called installation testing installation testing checks if the software application is successful fully installed and it is working as expected after installation so this helps in simplifying the test cases during installation now say if you want to check the performance of a system how would you do that we will use performance testing performance testing is basically considered as the heart of testing let’s understand what is performance testing performance testing is used to ensure that the software application will perform well under under any expected workload that is the main objective of testing right to check if the system performs well under any workload like I mentioned performance testing is the heart of software testing so now let’s try to understand the different types of performance testing we’ll start with understanding the first type load testing load testing is used to monitor the response time and staying power of any application when the system is performing well under heavy load okay so this is about load testing now let’s understand what is stress testing stress testing is used to determine or validate an application’s behavior when it is pushed beyond the normal or Peak load conditions so stress testing is used under these conditions now what is endurance testing endurance testing involves testing a system with the expected amount of load over a long period of time to find the behavior of the system now what is Spike testing spike testing is carried out to validate the performance characteristics when the system under test is subjected to workload models and load volumes so this is about the different types of performance testing now let’s move on to understand another type of non-functional testing that is reliability testing reliability testing checks whether the software can perform a failure-free op operation for a specific period of time it also assures that the product is fault-free and is reliable for its intended purpose so this is about reliability testing now let’s try to understand the last phase of non-functional testing that is security testing security testing helps in determining that its data and resources are protected from possible Intruders that’s the whole point of testing right security is the key to Software testing so this is about the different types of functional and non-functional testing now let’s try to take a look at their use case let’s understand the use case of functional testing functional testing helps in checking the login functionalities say for example if you want to log into a particular web page and you want to sign into an account you’ll be asked to fill a few details like your name your mail ID create a new password and so on so these particular Fields can be checked using functional testing so this is one of the use case of functional testing now let’s understand the use case of non-functional testing non-functional testing helps in customizing the test cases according to the user requirements say for example after logging into a web page you want the particular page to load for a few seconds and then pop up so this kind of customization can be done using non-functional testing and say if you want to add a wait command and want to wait for a few seconds in the dashboard you can do that using non-functional testing so what is the first thought that comes to your mind when you hear the word sanity testing if you make a guess by its name then as the name implies sanity testing aims at checking whether the developer has put some same thoughts while building the software product or not that’s quite clear close to actual meaning of Sanity testing sanity testing is a software testing technique which does a quick evaluation of quality of the software relis to determine whether it is eligible for further rounds of testing or not so sanity testing is usually performed after receiving a fairly stable software build and sometimes the software build might have minor changes in code or functionality and it is sent for sanity testing to check if the books have been properly fixed so what exactly is the intention of Performing sanity test let’s discuss the objectives first thing is to verify and validate the veracity of newly added functionalities and features secondly to evaluate the accuracy of new features and changes if they are added and thirdly to ensure that introduced changes doesn’t affect other existing functionalities of the product lastly test rational thinking and logical implementation of the developers that’s the core and basic purpose of Sanity testing so basically sanity testing is surface level testing which helps in deciding if the software built is good enough to pass it to next level of testing or not well that’s clear right so here’s a basic representation of Sanity testing as you guys can see I have three builds here and I want to send these table builds for sanity testing and once they are sent to sanity testing sanity testing is performed on there to see if any new features or changes are made if yes then if they have affected the existing features in any way and if there are any bugs were they fixed and all that are checked or performed under sanity test and the bills if they pass the sanity test then they’re sent for further rounds of testing else they’re rejected or you can say they’re added to the rejected build list it’s simple right that’s all the isas about sanity testing well it’s very simple and basic form of testing that’s performed before any product is sent for further rounds of testing so to make it more presentable and simple here’s an example let’s say the build which are just subjected to sanity test is a new feature which is added by Gmail that’s nothing but Auto acknowledgement feature what does this Auto acknowledgement feature do it sends a written email that the email which you tried to send is delivered successfully now this is a new feature and it’s fairly developed so we already have a built that’s stable sanity testing is performed to see if this new new feature that’s Auto acknowledgement feature is working properly or not and because of this feature if any other features are affected if not it means that it has successfully passed the sanity testing and the auto acknowledgement feature is sent for further L of testing it’s as simple as that so to summarize sanity testing is performed when a new product or functionality or change is implemented to see whether the software product is working correctly or not it determines if thorough testing of software product shall be carried out or not so if sanity testing fails rigorous testing is not necessary to be conducted well that’s well and good but how do you perform sanity testing is there a specific procedure that you need to follow well unlike other types of software testing sanity testing does not come with handful of techniques you do not need to script the test cases for sanity testing because you want to perform very quick and Speedy testing so what I want to say here is is that sanity testing is a very speedy and quick process of testing the application as it does not involve the scripting of test cases so guys the thing that you need to remember here is the main purpose of Performing sanity testing like I have been saying from the beginning of the session is to verify if the newly added changes and functionalities have affected the existing functionalities are they working properly or there any software bucks so that’s the main purpose now how how do you perform sanity testing it’s quite simple well just three steps the first step is to identify the newly added functionalities and features along with the modification or changes introduced in the code when you’re fixing bucks or you can say bug fixation process so the first step is to identify all the bugs new features or any changes made to the code second step is to evaluate these identified features and changes to ensure that they’re working as intended and they’re properly working and that’s what we call evaluation and the last step is testing that is we consider and test all the related parameters Associated functionalities and elements of the above evaluated features and changes to ensure that the related features are working properly as well what I mean to say is that the new changes or the functionalities or the bugs which were introduced did not affect the existing features that’s what you do in testing so very simple right just the three steps first you identify if there are any new changes to the features and functionalities then you evaluate them and then you test if they are affecting the existing features in any other way if all these three steps goes well then the build can be subjected to more thorough and stous texting so if all these three steps go well then the build has successfully passed the sanity testing and it can be sent for further rounds of regress testing so that’s how you perform a sanity testing imagine ing the following scenario you have several modules in your application you have a user registration form in module X that allows user to enter data and submit it the client has now requested to add preview my profile button in the user registration form which enables the user to preview his profile before he actually submits the details you got my point right you have an application multiple modules and you have a module called X now the client is requested for additional feature called preview my profile before he actually submits his profile or the details so now the development team has implemented the request according to the client’s requirement the release in your hands and the build is sent to you so the release is in your hands that is testing team and you want to perform sanity testing so first you will ask the development team or the manager what’s the new feature that’s been added to the release then you’ll get to know that preview my profile is the feature that’s been added and according to that the code has been modified so then you go through the code you test that particular feature which has been added and check if it’s working properly or not that’s what we call evaluating so once you check that the preview my profile feature is working or not then you come to testing feature there you see if on adding that if it has affected the submit button in any way if it has it means that the software build has not passed sanity test else it means that the software product or the software change which is being made to the build has worked properly and it can pass to further rounds of testing simple right so by now you might have figured out certain key points of Sanity testing if not don’t worry I’ve got them covered first of all sanity testing is carried out on relatively stable builds secondly it doesn’t require any documentation like I have been saying and obviously it’s performed without any scripts unlike smoke test in which is performed from end to end sanity testing is just performed on limited functionalities which we will discuss about later while discussing the differences between smoke testing and Sanity testing and usually it’s performed by the testers not the developers so the developers are not involved here well if I have to Define sanity testing in simple terms it’s a narrow and deep type of regression testing and yet it’s performed in limited functionalities not from end to end lastly it acts as a gatekeeper as an it helps the testers to decide if the software build is worthy enough or stable enough to be sent for the further rounds of testing so these are some important features if have to summarize it doesn’t require documentation less scripting carried out on relatively stable builds limited functionalities are covered in this testing usually performed by testers it’s a very narrow and deep type of regression testing and it helps decide if the software build is to be passed for next level of testing or not so these are some basic features of Sanity testing so what would you consider would happen if sanity testing is not performed so when a new release comes in the tester would put entire effort in preparing test cases and executing them and all that the testing team would thoroughly test each test case each functionality of the application and its user friendliness as well well do you see any problem in here no right but there is a problem the scenario sounds good only as long as new and old functionalities are working well and fine what if the changes and the newer code have messed up your previous functionalities what if the newer release is crashing down at every other action do you still consider it’s wise to undergo such aist through the full testing cycle no right this is where sanity testing comes in it’s really important phase of testing so what are the advantages of Sanity testing first of all it offers you Speedy valuation it offers speed sanity testing has a very narrow Focus for functionalities or areas to be tested like I said it’s not end to endend testing it’s performed on limited functionalities so you don’t need to script the test cases before carrying out sanity testing rather you can say it’s very unplanned or intuitive approach to perform sanity testing next it saves a lot of time and effort on testers part sanity testing it determines whether the application should be further tested or not like I said it acts as a gatekeeper this saves testers time if the release is in a very poor condition to meet the rigorous rounds of testing also testers do not need to report the issues or lock down them anywhere this saves a lot of reporting time as well secondly sanity test identifies deployment and compilation issues as well suppose a tester May phas inaccurate user interface if the developers do not check all the resource files in the compilation sanity testing also identifies deployment and compilation issues a tester May face inaccurate user interface if if the developer did not use all the resource file in the compilation also developers may not specify some important features to make them visible for testers a sanity check detects any such problem and it offers a quick solution for well functioning release and obviously like we discussed earlier it does not involve any documentation while you can say very less documentation so that’s one more Merit and the other one is sanity testing gives you a quick state of product which can help you plan your next Next Step accordingly so if sanity test fails you might plan your development team or you can tell your development team to postpone the next task and fix the found out issue on other hand if sanity test is passed you might ask your team to go ahead with the next release and spend less time on fixing bucks so that’s how it is lastly compared to other types of testing sanity testing is usually coste effective well guys now you know how important sanity testing is right with this we have almost reach the end of the session last topic of today’s session is how smoke testing and Sanity testing differ from each other smoke testing and Sanity testing are two very different practices but people still get confused because the distinction between them is somewhat subtle so let’s discuss few key differences between them so the first difference is the software build here we already discussed what software build is well if you’re not sure the term build is the process by by which source code is converted to a standalone form that can run on any system the smoke tests are executed on initial build of software product whereas sanity tests are performed over the builds which have passed the smoke test and gone through rigorous testing cycle or you can say regression testing cycle what I mean to say here is smoke testing is usually performed on very initial builds whereas sanity testing is executed on slightly stable builds than they are and smoke tesed moving on to motive of testing smoke testing makes sure that the core functionalities of your program are working absolutely fine so the motive of smoke testing is to measure the stability of newly created build so that you can move on to the next round of rigorous testing whereas sanity testing is to check if the new functionalities or the Bucks have been fixed properly without going any deeper so the objective here or in the sanity testing is to verify the rationality and the originality of code functionalities to proceed with further rounds of testing talking about competent tested throughout the session I’ve been telling that smoke testing is performed from end to end whereas sanity testing is a narrow testing which is performed only on limited functionalities or you can say certain components of software where it’s required next St is documentation usually smoke testing is documented and well scripted compared to sanity testing whereas sanity testing is not that documented and it’s usually not scripted at all test coverage smoke testing is shallow and wide approach to include all the major functionalities without getting into detail well it may be seen as a general type of testing covering all basic functionalities but sanity testing is a narrow and deep approach involving detailed testing of functionalities and features it’s more focused on certain features rather than from end to end and lastly performed by smoke testing is usually performed by developers as well as testers because it’s usually performed on initial bills and initial bills are passed on from developers to testers and it’s quite possible that sometimes developers themselves perform the smoke testing before sending it to testers but when it comes to sanity testing it’s usually done in between the development of software product as not on initial bills so it’s usually executed by the testers well that’s it guys with this we have come to the end of the session so let’s wrap up the discussion and quickly take a recap of what we have discussed so far while we did discuss what sanity testing is it is a tool to tell whether your software release meets the Merit to go to further rounds of testing or it’s too flawed to be tested it’s performed when a new functionality change request or buff fix is implemented in the code its scope is narrow and it’s focused on only functionalities that have been implemented or impacted by the change and lastly many people confused between sanity testing and smoke testing so we did discuss the key differences between them so before jumping straight into smoke testing let’s just first understand what a software build actually is when you are developing a simple software program that consists of a few lines of source code it’s easy to compile and execute the code but this is not the real situation in companies a typical software program or application usually has hundreds or even thousands of source code lines create an executable program for huge code is quite complicated and timec consuming process as you guys know so in such cases you need a build to generate the executable program the term build is the process by which source code is converted to a standalone form that can be run anywhere on any system well it’s not just the matter of compiling the individual components of an application but the linking them together as well so you will need to tell the individual components which you have compiled where to find the things they require or depend on to run properly and this complete process is what we call software build and software engineering so in simple terms you can consider build as a particular model of an application or a software that’s still in testing phase this build is further put on the test environment and it’s handed over to QA team for testing purpose each time a developer fixes anything in the code or if he writes a new code for different functionality it goes through same process again so there are number of development builds planned in any given project but it is always a risk that bill does not work properly on the environment because of number of issues like configuration issues code issues regression issues and environmental issues so a initial build after it’s developed by the development team is subjected to basic testing before it’s sent to other levels of testing this basic testing is what we call Smoke testing so smoke testing is a highlevel test performed on initial software build to make sure that the critical functionalities of the software or the application that you’re testing on is working properly it is executed before any detailed functional or regression test are executed on that particular software build so the process of smoke testing targets all key features and it’s often considered a cost effective approach because you’re just checking the basic functionalities and you do not have to spend much effort time and cost on that so if key features aren working or major bugs haven’t been fixed there’s no reason to waste time on further rounds of testing right so smoke test should be scripted this ensures that you’re touching all the major components of the software and no key features or the core functionalities are missed by you and most of the time all the high quality smoke tests share common characteristics and area of coverage like it involves clicking or navigating through many or sometimes all screens of an application testing the key functionality such as signup forms adding to the shopping cards exporting files moving data and rest of other things verifying correct layout of the graphical user interface and visual correctness so all these are the basic features which we check during any smoke test but it’s optional that even after checking these features you can add on other features to check on according to your requirements but the question here is how important are these smoke tests let’s consider a simple example to understand smoke test test suppose if you’re given a Gmail application to test what are the important functions there log into Gmail compose mail and sent correct yeah so for instance if there’s an error in sending an email does it make sense for you to test sent mail drafts folders and other features no right which means you are rejecting the build without further testing or without testing other functionalities that’s because your basic functionality or the core functionality of your application is not working properly that’s what smoke testing is all about of course thoroughly testing your application is really important for uring the good quality but performing a suit of smoke test is even more important since it’s sensible to get answer to preliminary questions like can the application that you’re testing will be successful without any error does the login process function correctly what happens when you click on the primary buttons or the menus so A major benefit of running a smoke test is that it provides quick feedback back within a matter of few minutes and as a tester you do not have to wait for house to get the results as you can see I have like about three Builds on the screen and I want to check the functionality of my last build so I have subjected it to smoke test if all the functionalities are working well as in if it passes the smoke test it’ll be passed on to next rounds of testing if it doesn’t the build is either rejected or it’s subjected for further development to remove the errors or the bugs that we have found so that’s why what smoke testing is all about guys have you ever wondered why the name smoke testing since smoke testing came into existence there are lot of theories and studies associated with the nomenclature however out of all this only two of them seem appropriate one theory is that according to Wikipedia the term smoke testing likely originated in the plumbing industry plumbers would use smoke to test for leaks and cracks in the pipe systems sometime later the term was applied to testing of electronic things as well another theory states that the term smoke testing is originated from Hardware testing where a device when first switched on is tested for the smoke or the fire from its components like power up a device and if you see a smoke then well that’s bad right so these are like the two most popular theories about a smoke testing but today the concept of smoke testing is widely used in software development while actual smoke may not be involved the same principles are applied in Smoke testing software as well but to get a better insight into this process it’s important for us to understand various features of smoke testing so let’s go ahead and check them out first of all smoke testing is often referred to as build verification testing so next time you hear someone telling build verification testing it’s nothing but smoke testing it’s known as build verification testing or build acceptance testing where the build is verified by testing the important features of the application and declaring it as good good for further detailed testing it delivers quick and decisive answers on the viability of the particular build that you’re testing on smoke testing is an integral part of the software development life cycle which ensures that the critical functionality of an application are working well and fine this you already know because that’s the main definition or the concept or the objective of smoke testing as smoke testing decides the path of the build for further testing process it’s often referred to as intake test so with the help of automation test developers can check build immediately whenever there’s a new build ready for deployment smoke testing can be done manually or it can be automated usually it’s the testing team begins manually and then later on they automate the entire process it also works as a gatekeeper to accept or reject the bill based on its stability to undergo through further rigorous and in-depth testing activities so you can say it’s called build verification test or build acceptance testing it en Jaws critical functionalities are working fine it can be referred to as intake test because it decides on the next level of testing it often refers to as gatekeeper as well smoke testing as you guys know a subset of regression testing but it’s not a substitute for regression testing and it’s applicable to different levels of software testing like integration testing system testing and acceptance testing as well finally it’s a nonexhaustive testing with very limited number of test cases you don’t do testing here very deeply you you just check the basic functionalities and usually smoke testing is performed with positive scenarios and with valid data and the entire process is usually documented for referring later on so these are the basic features well in conclusion you can think of smoke testing as a normal health check on the build of an application so guys now that we aware of what smoke testing is and its key features let’s go ahead and answer some important questions about smoke testing well the first question is when is the right time to perform smoke testing or when do we do smoke testing first of all smoke testing is done whenever the new functionalities of the software are developed and integrated with existing build that’s developed in qat it ensures that all critical functionalities are working correctly or not it is done in a development environment on the code to ensure the correctness of the application or the build before releasing it to qat after the build is relate to QA environment smoke test is performed by QA Engineers or QA lead so whenever there’s a new build QA team determines the major functionality in the application to perform smoke testing this actually answers our second question as well which is who performs smoke testing like I said it’s done by development team before build is released to QA team it’s done by QA team before subjecting the build to further rigorous testing so smoke testing basically is performed either by developers or testers or both sometimes moving moving on to our next question why to do smoke testing what are the benefits or advantages of Performing smoke testing smoke testing offers various advantages to team of testers and allows them to effectively evaluate various aspects of the software so let’s check out what those benefits are first of all it helps you in finding the bugs and defects in the early stages of testing itself you can uncover and fix as many as 80% of the bugs that discovers simply by configuring or executing a simple smoke test so with smoke test you might be covering only 20% or less than that of your test cases and yet you can catch up to 80% or more of the buck secondly it minimizes the integration risk and help in finding the shoes that get introduced whenever you integrate the components of the unit testing smoke testing can be carried out in small time it can be executed within few minutes for every particular build smoke testing also improves SA effectiveness of the QA team instead of spending and wasting test Cycles by attempting to run a large test suit when there are issues QA team can simply opt for smoke testing smoke testing also reduces the manual intervention because you can easily automate the entire process and the test cases are not many here it helps in verifying the issues fixed in the previous build are not affecting the major functionality of the application currently this way it improves the quality of the system that you’re testing on as well and lastly very limited number of test cases are needed to perform smoke testing and it also offers the advantage of getting faster feedbacks as it’s frequently run very quickly so these are the advantages let’s list out first of all you can find defects and bug in the early stage of testing integration risks are reduced when the components are combined there’s no need for manual intervention you can opt for automation it improves the effectiveness of your QA team it saves a lot of time and effort on testers part it improves the quality of the system as a whole and the most important thing is very limited number of test cases are needed to perform smoke testing of entire application so smoke test take your code build it run it and verify a thing or two they will not verify that your software is 100% functional or not in a production app they will act as a quick bailout if the smoke test fails then the whole build is failed and the entire process is so quick that you do not have to waste a lot of amount of time here so my point is that for a simple applic ation smoke test is often all you need next question is how do you actually perform smoke testing well it’s quite simple and it’s very similar to other testing process so the common first step for companies who want to build a suit of smoke test is that they start with manual testing builds are deployed by the development team and are then sent to QA team or testing team for further rounds of testing or you can say smoke testing now once the qat team receives the build according to the requirement they’ll start designing the test cases to expose all errors before this build is released to Market so once you have the test case you read and create a test suit a smoke test suit combines a number of smoke tests into small suits of test so that when application is ready to deliver to pre-production environments developers will know in matter of minutes whether the latest build is worth sending it to next level of testing or not so to be efficient and purpose-built a smoke test suit should contain easily manageable number of test cases well the recommended number of test cases is generally 20 on the low side and around 50 on the high side any less than this and you’re probably not covering enough amount of test cases and any more than this you’re probably trying to cover too much ground at a single point of time so you should always concentrate on sizing your smoke test suit that’s very important step once you have suit of smoke test defined you’re going to want to think about automation right automation can improve the quality and it can be efficient and it reduces lot of effort and time on tester part the many reasons for automating your smoke testing like I said just now but the best reason is that your test will run faster more consistently and the written results automatically there are number of automation Frameworks available in Market that you can prefer to to perform smoke testing so once you have your suit created and an automation framework selected you will want to think about a couple of key areas in order to keep your test running and healthy and what are those you need to keep track of test creation and maintenance you need to execute smoke testing on daily basis you need to access a penality on any developer whose contribution fails to pass you should consider continuous integration made possible with such as Jenkins and circle CI lastly execute the test cases and clean up the entire setup cleanup might include stopping a server deleting files or emptying the database tables this can also be done before the initial setup because so when you start testing the entire environment is clean and it’s like a clean slate where you can begin testing so these are General steps that you can follow to perform smoke testing well these are the general steps that you need to follow but let’s consider a simple example to understand how is smoke testing performed in real world so assume that you’re working on an e-commerce site when a new build is released for testing as a software QA tester you have to make sure whether the core functionalities are working or not so you try to access the Ecom site and add an item into your car to place an order that’s a major flow in most of the e-commerce sites you agree with me right what’s the major flow you log in you add the item to your card you purchase it and sign out if this flow works you can say that the build is PASS testing you can move on to next level of testing like functional testing and regression testing so here’s an example you have a build which is being released by the development team it’s being sent to you or the QA team so you create a set of test cases and and combine them and place them in a test suit you execute the smoke test what are the smoke tests that you’re going to execute on first if you are able to access the homepage or not after that you access the menu links are you able to access the menu links or not you check that part after that you add the item to the card and check if the functionality is working the main functionality is after adding the items to the card you need to purchase them so that’s what we checking basically in Smoke testing so you’re checking the checkout and the place order functionality if this functionality is pass the test you move on to next level of testing otherwise the build is rejected and it sent back to development team to make changes so it’s as simple as that moving on there’s another term that you should know about like sanity testing it’s often misunderstood with smoke testing the sanity testing is done on a software build after it is gone through smoke testing and other levels of testing sanity testing is done to enjoy that the bugs are fixed and there are no persisting problems with the application so that’s the major difference motive of smoke testing is to measure the stability of newly created builds so that you can move on to next round of regress testing whereas sanity testing is done to check either new functionality or the bugs that have been fixed properly without going any deeper so the objective of Sanity testing is to verify the rationality and the originality of core functionalities it might sound complicated the simple thing is that whenever you start on in initial bills you go with smoke testing after your initial builds are smoke tested and after they’ve gone through other levels of testing you perform sanity testing that’s the most basic difference so in smoke test you verify the critical functionality or the core functionality in sanity test you verify new functionality and check out if there are any errors so guys with this we have almost covered all important Concepts which are related to smoke testing now let’s check out the best practices that you should follow when you’re performing smoke testing first of all conduct smoke test during the early stage of project record all your smoke test it’s a very good practice and it’ll provide you reliable data later on smoke test cases should be short and very precise like less than 6 Minute at most the intention with smoke testing is to catch those bugs that block the development progress during the initial stage of a project your goal should be to get the developer to resume the development as quickly as possible without having to wait for the complex and drawn out test phases so at Max you can go up to 60 minut well it’s not a fixed time limit but that’s what is suggested to be effective automate whenever possible tests will run faster more consistently and they’ll written results automatically maintain a test case repository chances are 90% of your team are working on projects that bring new features or transform an established project or the making changes constantly so it’s always suggested to maintain a test case repository to keep track of all the test cases don’t just stop with smoke testing it’s just a first level of test testing move forward with other rigorous testing if the build has passed the smoke test and once again remember that you just have to use smoke test to test the basic functionalities so don’t go testing very deep now talking about tools many tools are available in the market to perform smoke testing in an automated way actually top tools include selenium and Phantom JS but the question here is which tool is best out of these two well both of them have their pros and cons let’s take a look coming to selenium I’m sure you might have heard of it it’s an open source automation tool and the JavaScript run automated testing Frameworks that enables you to run tests across different platforms so the most commonly used browsers with selenium are Chrome Firefox Safari and Internet Explorer selenium it does have a downside when compared to Phantom GS it needs a userfriendly graphical desktop for running the test making the entire process of testing literally slow however you can leverage the full potential of selenium when you set up virtual machines for various operating system and connect them all together what developers love about selenium is that its capability to use Bindings that allow them to run test on common programming languages like Java which is a native language of selenium JavaScript python Ruby and C so basically all these languages are supported and you can use any of them to perform tests on selenium coming to phantomjs it’s an incredibly powerful tool for testing as it supports several web standards and this makes it suitable option for automation and integration with CI tools Phantom JS gives you the advantage of capturing screenshots being a headless version of webkit it works as a windowless command line browser so it’s without graphical user interface portion and it’s mainly because of this fact that the entire process of testing is very much easier and faster on phantomjs phantomjs works as a single version of webkit so that’s the main disadvantage of phantom GS so I hope this has cleared the differ between both these tools and again when it comes to choosing out of them it’s up to your requirements so go ahead and think properly and choose one that suits your requirements that brings us to the end of the theory part now let’s check out how to write smoke test in the demo part we won’t be performing any kind of smoke test here we’ll be learning how to write smoke test cases so that you can send your application or part of your software to next level of testing while I’m using Excel sheet to write down test cases here so guys here we are in this demo we’ll learn how to write simple smoke test cases and for that purpose I’ll be using Excel you can use any other tools to write test cases so uh let’s give a proper name to this sheet let’s say smoke test cases before we begin the most important thing to remember is that speed is better than thoroughness when it comes to smoke testing so don’t worry about trying to get everything 100% right the first time you can always improve later on just think about the things you would normally do in your application and make a list where each line is a separate test for example let’s say if you’re browsing through an e-commerce site you found an item that you like and you’ve added the item to the card and after that you’ve logged out now let’s try to write a smoke test for this particular scenario before we actually get started with the test cases let’s go ahead like I said earlier and create a test plan where each line should indicate a separate test so let me give a project name and the name would be smoke test application or e-commerce site okay so if you want to test on e-commerce site what are the basic functionalities that you want to check according to the scenario which I said earlier the first thing would be the login functionality right and the next thing would be the cart functionality as in are you able to add the item to the cart or not I’m just skipping the purchase option here because the test cases get very complicated and I’m sure you guys know how to write test cases if you do not there’s another video in the dura software testing playlist you can go ahead and refer to that the video is out to write test cases in software testing it’s explained with an example in a very proper way so if you want to know how to write test cases you can refer to that coming back to today’s demo what are the functionalities we were discussing the login functionality card functionality and obviously the last thing is sign out so these are the three things that we want to check and now we’re going to write the test cases for these three functionalities so every test case has few components and you can add on more components according to your requirements but as for today’s let me add few components here let’s say about six of them the very basic so the first thing is test ID then the test scenario then the description part the test steps expected results actual results and the status so let me explain you each of these properties give me a second okay so the test ID because you have lot of test cases you need to assign an ID to keep track of them the scenario is very simple explain in very detailed way what you’re going to test on description is a oneline description it should be very brief and up to point one look at it any tester anyone who’s looking at it should understand what you’re testing on then these are the test steps as in what you’re testing on the steps that you follow these are the expected results that the results that you’re expecting actual it is nothing with the actual result which you’re getting after performing test and status is if or not expected and actual results meet or not based on that the status will be either pass or fail so let’s start with the first test case what we want to check here the first case is login and description would be test the login functionality of the application as simple as that it should be very short and up to point in this case application is nothing but the e-commerce site which we’re testing on and what would be the test steps the first step would be to launch the application or e-commerce site and the Second Step would be to navigate to the login page before we proceed guys I need to remind you these are just sample test cases for a particular scenario you can write any number of of test cases according to your imagination and what you can think is relevant for example when we go for login functionality I can go ahead and write a test case for registration as well because to become a user first you need to register right but I’m skipping that part here just so we won’t take a lot of time for you to understand the concept but you can go ahead and add the test case as well so what would you do the next thing after you navigate to the login page obviously enter the username then enter the password and the last step would be to click on login button so what would be the results that you’re expecting login successful and let’s say the actual results that you’ve got after performing the test case is as expected so the status definitely be pass because the expected results and the actual results are nothing but same moving on to Second functionality which is cart functionality we want to see if we can add the item to the card successfully that’s what we’re going to check so what are the steps involved the first step that you would do is select the item right The Next Step would be to add the item to the card or you can say click on add to card option or button and what would be the expected result item added successfully to the cart and suppose item is not getting added so you have tested the functionality but the item is not getting added to the card so what would be the status definitely fail this particular component has failed so the third component would be to check the sign out check out the sign out functionality it’s very simple right first thing is you navigate to settings well again it depends on the application sometimes you have log out option directly on the screen but sometimes you need to go to settings and check for the S out option and what is the result that you’re expecting that should happen when you actually do that the user should be able to log out and let’s say user is able to log out and based on that what would be the status it’s pass so that’s it guys we have written test cases for a simple scenario of an e-commerce site as you can actually see these are very simple set of test cases that you can easily pass to a manual team and you do not have to give them a lengthy explanation on what to test as well because it’s very clear that all they have to test is login functionality and if the item is being added to card properly or not and after adding the item if the user is able to log out properly or not so your test cases should be in such way that they shouldn’t be complicated and whenever a QA team takes a look at that they should understand what they’re actually going to check but again these are the basic functionalities you can use include any number of test cases for the functionalities but the main purpose of smoke testing is to check the core functionalities so when you pass these test cases to manual team they should be able to easily understand even if you are going to automate or take the trouble of writing selenium code you should handle these steps very easily now after you’ve got a solid fast automated smoke test suit in a place a good Evolution would be to integrate your full suit of test into CI tool or a continuous integration tool this continuous integration tool or CI tool can automatically initiate your test suit it will communicate you with the alerts and it finalizes the reports concerning the results of all the tests now if all these three critical components after being tested or smoke tested by the QA Team B fine it means that the build is stable enough to proceed with detailed testing so that’s all about smoke testing guys very simple right well there are mainly four stages of testing that need to be completed before a program or an application can be cleared for use namely we have unit testing integration testing system testing and acceptance testing the first level of testing unit testing is the micro level of testing it involves testing individual modules or units to make sure the working properly a unit here can be anything it can be a functionality a program a particular procedure of a function within an application it can be anything unit testing helps verify internal design internal logic internal paths as well as error handling after unit testing we have integration testing integration testing is done after unit testing this level tests how the units work together individual modules are combined and tested as a group it’s one thing if units work well on their own but how do they perform together when combined integration testing helps you determine that and ensures your application runs efficiently it identifies interface issues between modules well there are different techniques that can be used for implementing integration testing we will discuss more about them later since the topic of today’s discussion is integration testing the next level of testing is system testing as the name implies all the components of the software are tested as a whole in order to ensure that overall product meets the requirements which are specified so basically system testing is particularly important because it verifies the technical functional and business requirements of a software or an application well there are dozens of types of software testing like you have usability testing regression testing functional testing and many more if you guys want to know more about these testings you can refer to Eda software testing YouTube playlist We do have videos on different type of software testing there and do subscribe the DEA Channel if you like them getting on with our today’s topic the system testing is usually done by testing team and it includes a combination of automation testing as well as manual testing techniques as well and the final level of testing is acceptance testing or basically we call it uat which is user acceptance testing it determines whether or not the software product is ready to be released to Market well let’s face it guys requirements keep changing throughout the development process right so it’s important that the Tester verifies the business needs are met before the software is released into production so are the functionality or the functional requirements met or the performance requirements met or not well these are the questions that you ask in this level of testing so uat is the final say as to whether the application is ready for the use in real life or not so basically each level of testings that is unit testing or it could be integration testing system testing acceptance testing each have their purpose and they provide value to software development life cycle cycle so the most basic type of testing is unit testing or component testing the main goal of unit testing is to segregate it isolates the smallest piece of the testable software from the remainder of the code and determines if or not it behaves exactly as you expect generally we refer to those small pieces of software as unit but the problem is although each software module or unit is tested defects still exist for various reasons let’s check few of them out for example a module in general is usually designed by an individual software developer whose understanding and programming logic May differ from other programmers and sometimes programmers are highly skilled and very creative they won’t read all the design specs or approach coding features the same way like others do while this can lead to disconnects and glitches when their modules must talk to each other so there’s a clash between different modules developed by different developers secondly unit test work with internal module communication s using software STS that simulate the rest of the systems well these stbs are make do walkarounds and when the systems module have to communicate features like data formatting error trapping Hardware interfaces and thirdparty service interfaces tend to have unforeseen issues that were not observable at the unit level testing that’s another problem while at the time of module development there are wide chances of change in requirements by clients right because user requirements keep changing these new requ requirements may not be unit tested and hence we have to perform integration testing similarly you might have external hardware interface issues as well inadequate exceptional handling could also be a problem so even after performing unit testing even after testing each module specifically you do come across these problems so as a solution to this we perform integration testing so keep in mind no matter how efficient each unit is running if these units aren properly integrated it will affect the functionality of the total software program to avoid all these issues integration testing is introduced as a level of software testing integration testing is done to test the modules or components when integrated to verify that they work as you expected that is to test the modules which are working fine individually does not have any issues when integrated so the meaning of integration testing is quite straightforward integrate or combine the unit test in module 1 by one and then test the behavior as a combin mind unit that’s what integration test means so we normally do integration testing after unit testing as you guys already know it once all the individual units are created and tested we start combining those unit tested modules and start doing the integration testing so once again the main function or goal of integration testing is to test the interfaces between these modules not the modules but the connection or the communication or the interface between these modules that’s the aim of integration testing let’s learn more about integration testing integration testing basically makes sure that integrated modules and components work properly integration testing can be started once the modules to be tested are ready well it does not require the other modules to be completed for testing to be done and how is it possible we’ll check that out later and integration testing also helps detect the errors which are related to interface between the modules like I said earlier it is also helpful when there are frequent requirement changes it’s very common for a developer to deploy changes without unit testing sometimes so integration testing can help when the modules need to interact with apis or some sort of third party tools you can test the modules to find out if the third party tool accepts the modules data or not integration testing typically covers large volume of your system than a single test so it’s more efficient and lastly writing both unit and integration test increases the test coverage at fastest speed and it improves the reliability of your software well these are the advantages of using integration testing here I have a simple diagram for you to understand what integration testing is as you can see I have four levels of testing We Begin from down we have unit test integration test n to end is nothing but system testing then UI test that’s nothing but acceptance testing as you can see in the diagram we have the red coded part which is a small unit or a module it’s tested then it’s combined with other unit and these both are encoded as you can see in the green part so that’s integration testing you’re combining two modules and you’re checking out the interface or the communication or the interaction between these modules that’s integration testing as Next Level obviously you have system tests that you combine multiple modules and check them as a whole and lastly you have acceptance test before the product or application is released to Market so it’s as simple as that so before we proceed any further here’s one more question who performs integration testing well software Engineers or developers usually perform integration testing however there are instances when the company employs indep dependent testers to do it for them so guys there are different approaches to perform integration testing but before that you should note that integration testing does not happen at the end of the cycle rather it’s conducted simultaneously with the development so in most of the times all the modules are not actually available to test so the challenging thing here is how do you test something which does not exist for that we have concept called stops and drivers so sometimes we might face a situation where some of the functionalities are still under development so the functionalities which are under development will be replaced with some dummy programs these dummy programs are named as stops and drivers let’s check what they are so here I’m considering a single application and this application has two components component one which is login page let’s say module a and we have module B which is admin page as you can see login page is dependent on admin page now suppose if you have to test login page developers have developed the login page and they have sent it to the testing team to test the problem here is that admin page is not yet developed so what do you do instead of the actual admin page you create an dummy admin page which has same functionality of the original one but not all the core

functionalities and then since login page is dependent on dummy page you check the functionality of the login page in linking with admin page so without waiting for another module to be developed you finish the test it here the dummy admin page is what we call stop or a called program next coming to drivers it’s just reverse of stops let’s say you have to test the admin page it’s ready it’s developed it’s been sent to testing team for testing but the problem is login page is not yet developed what you do just like you created D admin page here you create a dummy login page which is dependent on admin page so this dummy login page is what we call a driver it’s called a calling program so now you know the difference between stops and drivers right stops is a call program and drivers is a calling program so now that you’re aware of these Concepts which is tops and drivers let’s get started with different approaches to integration testing so basically there are three types to begin with we have top down approach the top- down approach starts by testing the topmost modules and gradually moving down to the lowest set of modules one by one and then we have bottomup approach which is exactly opposite of that of top down so in bottom up approach starts with testing the lowest units of application and Gra gradually moving up one by one and then we have something called Big Bang testing this big bang testing involves testing the entire set of integrated modules or components together simultaneously since everything is integrated together and being tested at once this approach makes it difficult to identify the root cause of problems we will discuss more about advantages and disadvantages later on let’s explore each of these techniques in detail so let’s begin with topown approach first so like I said earlier top down approach testing takes place from top to down following the control flow of software system or architecture so high level modules are tested first and then low-level modules and finally integrating the lowlevel modules to a high level to ensure the system is working as it’s intended to but it’s quite possible that like we discussed earlier when we are testing the higher level modules lower level modules might have not been developed yet so what do you do in such cases you deploy stops like we discussed stops are dummy modules that simulate the functionality of a module by accepting the parameters received by the module and giving an acceptable results basically it acts as a dummy missing module generally stops have hardcoded input and output that helps in testing the other modules integrated with it so for you guys to understand top down approach in a better way I have an example here I have seven modules module M1 is dependent on M2 M3 and M4 similarly M3 depends on M5 and M4 depends on m6 and M s now while performing top- down approach we begin with a granular module the first one which is module M so you want to test module M as you perform unit testing it’s working well and fine before you even start with integration testing all these modules undergo unit testing so they’re well and fine now that we start integration testing the module M1 depends on M2 M3 and M4 we want to check module M1 but M2 M3 and M4 are not get ready what you do you employ or deploy stops instead of these origal module since they’re not developed yet these TBS simulate the activity of M2 M3 and M4 similarly when you’re testing M3 it depends on M5 and if M5 is not ready yet you again use a stub here same goes for the next level of testing which is M4 which depends on m6 and M7 easy to understand right with the help of an example so that what stops are these are called programs and one more thing simple applications may require stops which would simply written the count control to their Superior modules or higher level modules more complex situation demands that sub stimulate a full range of responses like parameter passing and many other features these stops may be individually created by tester or they can be provided by software testing harness which is a sort of software specifically designed to provide a testing environment so in top- down approach if the dependent modules are not ready yet we use a concept called stops well just like any approach this approach has advantages and disadvantages as well the tested product here is extremely consistent because integration testing is performed in an environment which is mostly similar to real world environment secondly the stops in top- down approach can be written in lesser time compared to drivers because these stops are simpler to author here fall localization is also very much easy in top- down approach the critical modules are tested in priority which further helps tester in finding major design flaws early in the stage of testing detect major flaws is done very early in the process coming to disadvantages as you can see if the modules are not developed or ready yet they requires several stops modules at lower level of software are tested inadequately when compared to other modules in the most popular disadvantage that you have to remember is that the basic functionality of the software and top- down approach is tested at the end of the cycle that can be a problem sometimes that’s all with top- down approach let’s go with next approach which is bottom up approach while it’s complete opposite of top down here the bottom level units are tested first and upper level units are tested then step by step after that so here testing takes place from the bottom of the control flow to upwards again it’s possible that the higher level modules might not have been developed by the time lower level modules are tested just like we use tops in top down approach we use something called drivers here these drivers are calling programs they simulate the functionality of higher level modules in in order to test lower level modules let’s consider the similar example which we did earlier as you can see I have seven modules M1 M2 M3 M4 M5 and m6 and M7 M1 dependent on M2 M3 and M4 and M3 on M5 M4 and m6 and M7 now each of these modules are unit tested so that’s well and fine so we begin here from the lower level so we start with M5 m6 and M7 but as you can see M3 and M4 are not developed yet so what you do you replace this M3 and M4 by drivers and and then you test M5 m6 and M7 same goes for M3 and M4 if m1 is not ready yet and same goes for M2 because M1 is dependent on M2 and if m1 is not ready we create a driver which simulates the functionality of module M1 here just like stops the driver can have different functionalities the driver would be responsible for invoking the module under test it could be responsible for passing the test data or it might be responsible for receiving the output data and similarly just like stops the driving function here can be provided through a testing harness or may be created by tester as a program so that’s the choice that the tester have to make here coming to advantages in this approach development and testing can be done together so the product of the application here will be efficient and it will be according to customer specifications the time requirement here is comparatively less and tester conditions are much easier to create here coming to disadvantages just like top- down approach the bottom up approach also provides poor support for early release of limited functionality and the need for drivers because we use drivers right if the modules are not developed it complicates the test management sometimes high level logic and data flow are tested late during the test process and even the key interface defects are found later on than earlier stage so these are the disadvantages and then after that we have another approach called Big Bang approach once all the modules are ready after testing individually this approach of integration testing combines them at once and perform testing that’s what Big Bang testing is so instead of just starting from top or down it just combines all the units or modules once they are ready and performs testing at once though Big Bang approach seems to be advantageous when we construct independent modules concurrently this approach is quite challenging and risky because when you combine all the modules and test them at once and if there are any errors it’s difficult to find out what is the reason for errors since all the modules are combined and tested at once I’m going to take similar example here there’s nothing to explain it’s pretty straightforward all the modules are unit tested then you wait until all the modules are developed you don’t use any stabs or drivers here once all the modules are developed you combine them and test them as a unit as a combined unit as a whole so that’s what Big Bang testing is and we have advantages and disadvantages talking about advantages you can see all the components are tested at once so it saves a lot of time because we don’t use any stops and drivers and all so it saves a lot of time and this process is convenient for smaller systems because there’ll be less number of modules to combine or act on coming to disadvantages you’ll have to wait for each of this module to be developed right before you start testing so a lot of time is wasted or delay there’s a lot of delay before you actually start Big Bang approach and since there are a lot of modules which are combined and tested at once it’s difficult to trace the cause of failures if there are any and sometimes it’s quite possible that when there are so many modules few interface links between some modules might be missing and you will not even notice that and as you can see no module is prioritized which sometimes might be problematic critical modules need to be prioritized sometimes so these are the disadvantages so to overcome the limitations and exploit the advantages of each of these top- down bottom up and big bang approach we have something called sandwich integration approach or it’s also known as hybrid testing approach well as the name suggest it is a mixture of two approaches like top- down approach as well as bottom up approach in this approach the system is viewed as three layers consisting of the main target layer in the middle another layer above the target layer and the last layer below the target layer so three layers as you can see M2 M3 M4 are the middle layer the target layer M5 M6 M7 are the layer below that and M1 a layer above Target layer so the top down approach is used in the topmost layer that’s layer one and bottom up approach is used in the lower most layer which is layer three it might sound a little complicated but sandwich approach is very useful for for large Enterprises and huge projects that further have several sub projects and sometimes when development teams follow a spiral model the module itself is as large a system then you can use sandwich testing the resources that are required here are immense and big team perform both top down as well as bottom up method at once or sometimes one after the other so basically here you use the advantages of both top down as well as bottom up well obviously this process as it looks complicated it has a lot of disadvantage ages since both top down and bottom up are executed at the same time or one after the other the cost of testing is literally High it cannot be used for smallest systems because the interdependency between the modules is quite complicated it also makes sense that when individual system is as good as complicated system then sandwich integration is best and obviously you’re using different approaches here so the development team or the testing team should have different skills to ensure that the testing is done in a proper way so these are the disadvantages moving on to next topic let’s see how you actually perform integration testing well it’s highly similar to any of the testing process just like unit testing or any other testing so the first thing you do is choose the module or the component which you have to test and you also select the strategy that you want to employ out of the strategies which we just discussed and before you actually proceed you have to make sure that each of these module which you have selected is unit tested already then you deploy the choosen modules of the components together and you make the initial fixes that are required to get started with with integration testing then you perform functional testing and test all use cases for the components choosen similarly you perform structural testing and test the component choosen after you’ve done all the testing you record the results of the above testing activities you repeat the above step until the complete system is fully tested as in you combine two module test them and again everything is proper you combine with with third module and do the same thing again and again so to summarize very simple first you should prepare a test plan then you design test case test scenarios test scripts according to your plan execute the test cases followed by reporting of defects now track and retest defects as soon as they arise and then you follow the entire process again and again until your entire system is tested so that’s how you perform integration testing simple right moving on to the next part of the session I’m sure you guys have understood what integration testing is by now but anyway let’s go ahead and try to understand it in much better way with help of an example so as you can see I have three more modes here a login page a mailbox and a delete email page so like I said earlier integration testing majorly focuses on interfaces and the flow of information between these software modules so priority here is given to the integrated links in of the unit functions that are tested in advance so you do not have to focus on testing the login page as it’s done already in the unit testing you should focus on its interface link with the mail box page similarly check the interface link of mail mail box with the delete email module so let’s go ahead and take a look at the test cases so the first test case objective here is to test the interface link between the login page module and the mailbox page module so the description you enter the login details and you click on the login Button as soon as you do that you should be taken to the mail page if that’s happened it means that the interface link between your login page as well as mail page is working properly similarly we have second test case to check the interface link between mailbox and delete email module so what do you do you go to mailbox check the email that you want to delete and click on delete option as soon as you do that it’s quite straightforward that email should be deleted that’s not what we’re checking what we’re checking here is that the deleted email should appear in the trash folder so that’s the interface between the mailbox and the delete interface page so integration testing like I said earlier is all about the interfaces between modules not about the functionality of individual mod mod so guys like any other testing integration testing also has challenges that you might come across for example integration testing means two or more systems are integrated to ensure that system is working properly so not only the integration links are to be tested but exhaustive testing related to environment should also be performed it ensures that all the integrated system components are working properly there are different paths and permutations to apply for testing the Integrated Systems so basically test data management becomes difficult because you have multiple test cases and different paths and permutations that you have to follow to perform integration testing it’s tough managing integration testing sometimes because you have various factors that you should consider like database platforms environments Etc similarly whenever a new system is integrated with the Legacy system it needs a lot of testing efforts and changes same goes when you’re combining one Legacy system with other Legacy systems in such cases you have to develop test cases which test the entire unit functionality or combined unit functionality so developing test conditions and test cases also becomes quite challenging and lastly when you’re integrating two systems developed by two different companies it’s a big challenge for programmers no one is sure how one system will affect the working of another system so to minimize this impact several considerations should be kept in mind to make integration more successful while we cannot avoid all this but you can follow certain practices to at least make the effect of these challenges a little lesser on your testing first of all you need to check if the testing strategy that you’ve applied is suitable one for your requirement that is for your application requirement or software requirement or not and based on the test strategy that you’ve chosen and if you’re sure it’s right you prepare the test data and test plan accordingly after that you need to focus on the architecture design of an application and identify the critical modules these critical modules should be tested on priority and then you get the interface designed for the application from the architecture team and generate test plans to verify interfaces in detail so the main concept or goal of integration testing is to check the interface link between modules right so you need to have the basic understanding of the interface architecture each of these interfaces like database external hardware or any other software application should be tested and should be understood in detail test data plays a critical role in any integration testing so you have to take into consideration that as well so keep mock data handy before the execution of test cases so do not decide on the test data while executing test cas cases itself because as you know the user requirements keep changing and according to that you might have to change the data that you want to test on apart from these I have few things which I put up on the screen as you can see you need to identify each module check how data is communicated understand the user requirements create multiple test conditions according to those requirements and focus of one condition at a time so these are certain things that you can follow to make integration testing much more simpler and less complex so guys that’s all about it integration testing its types examples strategies practice challenges we have discussed everything have tried to explain what integration testing is with an example for better understanding of the concept so integration testing is an important part of testing cycle that makes it easy to find defects when two or more units are integrated so that’s all about integration testing API have been around since 1960s so if there aren’t a New Concept why are there such a Hot Topic lately why why do you think so because without apis the digital experiences that we expect everyday as consumers wouldn’t be possible apis are doing everything from driving information Rich marketing campaigns to connecting mobile apps to streamlining internal operations well here’s a brief introduction to what apis are and what they can do to understand apis better let’s consider a simple example imagine you’re sitting at a table in restaurant with a menu of choices to order from the kitchen here is part of the system that will prepare your order what is missing here is that the critical link to communicate your order to the kitchen and deliver your food back to your table that’s where the waiter or an API comes in the waiter is the messenger or an API that takes your request or order to the kitchen or the system and tells them what to do then the waiter delivers the response back to you well in this case it is the food while put it in that way it’s easy to understand API just like a waiter is a messenger between you and your application with that being said let’s take a look at real world example of an API let’s see how we are using apis in our daily life let’s say you are searching for a hotel room from an online travel booking site using the site’s online form you select the city you want to stay in fill in the checkin and check out dates number of guests number of rooms and other information then you click the search button so what’s going on between you entering your information and the application displaying you the choices apis that’s what so as you know the traveling site Aggregates information from many different hotels so when you click search option the site then interact with each hotel’s API which delivers the result for variable rooms that are available according to your choice this can all happen within seconds because an API which acts like a messenger and runs back and forth between your application database and devices now you understand what I meant when I was comparing API with a waiter so it’s basically a messenger API is an acroni for application programming interface which is a software intermediatory that allows two applications to talk to each other without any glitches so every time you use an app like Facebook to send an instant message or to chat with your friend whenever you check weather on your phone you’re using an API so why use an API what are the main reasons first of all it offers effortless integration it allows customers to access data server or any other application in very stable and secure way secondly mobile phones and devices embedded with sensors fit perfectly with the service based structure of API so as you know cloud computing is already in Rise apis are mainly needed for both the initial migration and integration with other systems in the cloud and next API offer flexibility they allows you to quickly leverage and use your desired services on mobile and web and the IT Market is rising so everyone wants their product to be best which depends on how intuitive and usable their API is and lastly the youth success of apis if any company has employed or deployed API and has been successful using that then other companies also want to do as well so because of these reasons API is very popular these days as you know software is exactly not perfect every time so guys now you know why is this so much hype about apis API are what gives value to your application it’s what makes makes our phone smart and it’s what streamlines business processes so if API doesn’t work efficiently and effectively it will never be adopted regardless if it is free or not also if an API breaks because errors weren’t detected there’s a threat of not only breaking a single application but an entire chine of business processes hinged with it so the solution to test apis before they’re put to use here are the most common reasons as to why you should test your apis before putting them to use First of all you want to be sure that they’re doing what they’re supposed to do you want to make sure the apis are handling the maximum load or the amount of load that’s being assigned to them and you want to find all the way users can mess things up when they’re using the applications that are linked with API you also want to make sure your API work across different devices browsers and operating systems and lastly if you don’t test your API it can be costly for you later on so these are the simple reasons as to why you should test your apis before putting them to use so basically the entire process of testing these apis is what you call Api testing it’s a type of software testing that involves testing your application programming interface or apis as a part of integration testing to see if to meet expectations for functionality reliability performance and security so as you can see I’m stressing on four words here so basically in API testing you check if apis meet expectations for functionality reliability performance and security most basic level API testing is intended to reveal bucks inconsistency or derivations or deviations from the expected behavior of an API and obviously the next question that follows after knowing what API testing is where do you perform API testing since apis lack a graphical user interface API testing is usually performed at the message layer and can validate application logic very quickly and effectively there instead of putting it that way let me make it more simple to you guys commonly applications have three separate layers or tires you can say first comes is presentation layer or user interface then you have business layer application user interface or you can say for business logic processing and then you have database layer for modeling and manipulating your data so application programming interface testing is performed at the most critical layer which is the business layer where business logic processing is carried out and all the transactions between user interface and the database happen so basically in API testing our main focus will be on business logic layer of the software architecture and I have to tell you guys API testing like graphical user interface testing won’t concentrate on the look and feel of the applications so it’s entirely different from graphical user interface testing and API testing also requires less maintenance and effort when compared to GUI testing which makes it perfect choice for agile and devop teams so making sure that API offers complete functionality allows for the easy future expansion of the application if you want to do so later on in the future so that’s what API testing is all about so now that you know what API testing is and where you perform API testing how do you actually go ahead and proceed or perform API testing well it’s a five-step process first step is documenting the API testing requirements like what is the purpose of API what is the workflow of your application what are the Integrations supported by the API here or in your application what are the features and functions of the API that you have included in your application documenting all these API testing requirements is the first thing you need to do this will help you in planning API test throughout the testing process so the first step is just preparing a plan next step is setting up test environment according to your plan so You’ set up testing environment with the required set of parameters on the API this involves configuring the database and the server for the application’s requirements so so once the setup is done it’s good to make an API call right away to make sure nothing is broken before we move forward with any kind of testing so the next step is to combine your application data with your API test to ensure that API is functioning as it is expected to under different or basic conditions or you can say different input configurations and then you need to organize yourself around the API test for that you need to start asking questions like who is the target audience here who is your API customer what aspects are you testing what problems are we testing for what are your priorities to test what could potentially happen in such circumstances now after performing the test when you should consider a test as a pass or a fail what other apis could this API interact with and so on like that many different questions so after you have created these testing boundaries and requirements you need to decide what you want to test on your API for while we will look into what kind of API we can perform in the next part of the session so I leave that step blank for a while which is our fourth step deciding on what to test API for and finally once you have decided the next step obviously is to create test cases around that requirements and execute them a basic guideline is to identify the most common parameters and conditions that an end developer will use when calling the apis and based on that you should create your test cases and execute the test and I’m sure the last step is the common step you document your test results and give it for review so let’s just summarize what are the steps the first step is preparing a documentation or a plan on what you’re doing or you’re trying to do then according to the plan you set up your test environment then you combine your application data with your API test to make sure that your API is working perfectly under different input configurations and then decide on what kind of API test you want to perform and lastly create the test cases based on your requirements and execute the test and create the test result report so it’s the that easy so one of the most important step while performing API test is to decide on what kind of test you want to perform for that you should be aware of different types of API testing as you can see there are multiple types of API testing first you have functionality testing the basic testing so you perform functional test to check if the API works and does exactly what it is supposed to do functional testing includes testing of a particular functions in the code base so that’s what functional testing is it’s all in the name then you have reliability testing basically here you’re checking if API can be consistently connected to whenever you want and lead to consistent results always and then you have load testing well load testing you can say is a test which is obsessed with reality here you ask yourself you test your API on different scenarios like does this code of my API work in theory will this code work with 1K request 10K request and 100K request so basically you’re trying to check if API can handle the load load testing is basically performed to ensure that the performance under both normal and at Peak conditions is normal for an API you have different scenarios on the that for example you have Baseline scenario it test the API against textbook values regular traffic that API expects in an ordinary usage then you have theoretical maximum traffic that is to make sure during the full load periods the solutions respond to the request properly then you have overload test to test the maximum capacity according to the theory maybe then add 10 to % more to the peak traffic so this way you have different kind of load testing and then you have end to end testing or UI and ux testing it involves testing user interface for the API and other integral Parts interface here naturally can be graphical user interface or GUI or it can rely on the command line end points as well and then you have interoperability testing and compliance testing this type of testing applies to soap apis it ensures that the predefined standards of your your API is met and then comes security testing security testing penetration testing and first testing are the three separate elements of security auditing process they are used to ensure that the API implementation is secure from external threats that’s the common point for all security penetration and first testing so besides enclosing with penetration and first testing security testing also includes additional steps like validation of encryption methodologies and of design of the access control for the API and then comes penetration testing it’s considered the second step in the security auditing process in this testing type users with limited API knowledge will try to attack to access the Threat Vector from outside perspective well it’s all about functions resources processes or sometimes it can be an entire API from the outside perspective and then comes first testing is another step in the whole audit process in this testing type of vast amount of random data which you usually refer to as noise of first will be input in into the system with the aim that they want to forcefully crash the system and see what happens this way when there’s an actual threat from the outside they can react back to it very quickly that’s what first testing is all about so basically first testing will help the API in terms of limit to prepare for the worst case scenarios with that said these are the most frequently performed API tests so by performing this test what are you trying to test for and what will you find so basically by performing all this tests you’re checking for duplicate or missing functionality or improper messaging multi-threaded issues or performance issues or it could be about incompatible heror handling or it could be about reliability issues so basically by performing all this different kind of API tests you are trying to find these kind of bucks since API testing is gaining popularity we have many tools available for performing the same here are some of the top API testing tools that you can use for rest and soap web service testing for example you have Postman you have Caton Studio well we’ll be using one of these which is Caton Studio to see how to create API test then you have soap UI then you have tosa parasoft assertable well these are very few basically I just listed the most popular ones apart from these there are many other tools outside while you can choose any one of them according to your requirements and comfort now let’s discuss benefits and challenges that you might face while performing API testing so as we discussed API testing is an important activity that testing team should focus on it offers a number of advantages over other kinds of testing for example first of all it’s language independent data here is exchanged via an XML or Json format so any language can be used for automation independent from the languages used to develop the application XML and Json are typically structured data so the verification is literally very fast and stable in these XML and Json also have built-in libraries to support comparing dat data in different data formats so the first reason is it’s language independent then it’s graphical user interface independent or GUI independent we can perform API testing within the application prior to GUI testing and this early testing will help you get feedback sooner and so that you can improve the team’s productivity core functionality can be tested to expose small errors and to valuate team strength or your application built strength then it offers improved test coverage most API services have specifications allowing us to create automated test with High coverage including functional testing and non-functional testing as well and nowadays there are multiple techniques which are available using which you can find API test cases that could not be automated so this way you can improve the test coverage by using either manual API testing or automated API testing and another most important benefit of API testing is it reduces testing cost API testing helps us to reduce the testing cost with API testing we can find find minor bucks like I said before graphical user testing these minor bugs will become bigger during graphical user interface testing so finding this buck in the early stage itself is a very good process and will be beneficial and lastly API testing is a step for faster release it’s common that executing a UI regression test takes about 8 to 10 hours while the same scenario with API testing takes only 1 to 2 hours you see the difference there right the flakiness of API testing is also lower than that of UI testing all these allows to release are built faster with API testing so these are certain benefits that you get out of Performing API testing before putting your API to use it’s language independent so basically you can use any language irrespective of the language the application is developed on it’s graphically user independent you can find out the books in early stage because of that the testing costs are also released I mean reduced and obviously it offers improved test coverage and faster release as well well that’s about the benefits but again like any other testing process there are certain things that you will come across or you will feel difficult when you’re performing just in API testing as well the point of not having graphical user interface can be a benefit as well as a challenge we discussed why is a benefit now let’s see why it’s a challenge API are primar intended for computer to computer communication like I said they’re like a messenger between two applications computer doesn’t need an a user interface this is a challenge if you’re a tester who is used to testing applications designed for end users with a graphical interface where you can click drag and in general manipulate an application or data visuality so basically if you are familiar with all those graphical user interface features it might be difficult to jump into API testing and then you have synchronous and synchronous dependencies so often apis rely on other apis or other backend systems to function properly so if any of these steps of systems are out of place all the assertions connected to it will fail so this way when your API is connected to other apis or any back inance like synchronous and asynchronous dependencies are there then it might pose a problem and during API testing it’s difficult to test data management so basically API testing verifies the business logic of an application layer which often has millions of permutation and use cases so it can be difficult to propagate scenarios that sufficiently test your API boundaries and then there is a problem of request and response response as stated before apis work on a request and response relationship soap and rest apis have different standards for the request and response calls that you will have to be familiar with before you actually start performing API testing and that task can be a difficult soap based API use XML as a communication protocol that means as a tester you must be able to read understand create and update XML documents with rest Based Services the request can be much simpler for the most part it only involves sending in url to the service thing here is you need to have certain technical knowledge before you actually jump into API testing that’s very necessary and lastly there’s no documentation and there are a lot of time constraints in API testing the API developed will hardly have any documentation without the proper documentation it is difficult for the test designer to understand the purpose of these calls parameter types the possible valid and invalid values the written values the calls it makes to other functions and usage scenarios to avoid that like a certain earlier the first step of your API testing should be documentation thorough testing of API is almost timec consuming it requires a learning overhead and resources to develop tools and design tests that will suit your requirement so these are certain challenges that you might come across while performing API testing so guys that’s all with the theory part I hope at this point of time you’re aware of what API is and why do you need to test your apis before you put them to use and how to perform API testing like I said there are different tools which you can use to perform API tests like you have Postman Caton studio parasoft assertable and many others now that we aware of the theory part let’s go ahead and use a tool called Caton Studio to see how to create API test cases and how to perform test on API so guys in today’s session or demo we’ll be using a tool called catlon studio so basically catlon studio is a robust and comprehensive automation tool for testing apis web and mobile testing I already have it downloaded and installed on my PC all you have to do is search for catalon studio and you can just go for the first link that you find so this Caton Studio provides easy deployment by including all Frameworks Alm Integrations and plugins in one package it has a unique feature which is combining UI and API web services for multiple environments and another thing is that it’s a free tool and apart from that catalon studio also offers pay support services for small teams businesses and Enterprises as you can see the most benefits of using catalon Studio are listed here simple deployment it’s easy to use interface and like I said it has a full feature package and it has active community of about people from different 160 countries across YouTube channels GitHub repositories uty courses so if you face any problems or if you have anything to contribute you can go ahead and discuss your queries there so the things that we might are interested today or we would be interested today about Caton Studios that it supports both soap and rest requests soap and rest are two different kind of apis it also supports data driven approach and it supports cicd integration apart from this it has many other cool features that you can go ahead and research on so I like I said earlier I already have it installed if you do not you please go ahead and click on this download button a zip file will be installed on your computer or downloaded on your computer you can unzip it and install the application well guys I am using this tool for no particular reason there are many other tools which might suit your requirement and you’re free to go ahead and use any of these so let’s proceed with the demo part now so guys if you have installed catalon Studio perfectly then this is the homepage where you will land on so as you can see this page is basically what is known as catalon help or you can say the documentation part here you have tutorials on how to use different features of this application then you have different FAQs and different plugins that you can add like I said earlier you can use catalon to perform test on web us interface API mobile testing and scripting as well but as for today’s demo we are interested only with API so you have getting started as in the tutorials here you have the sample projects that you can go ahead and start with if you’re not familiar with the tool then you have the folder that shows the recent project that you might have done so as you can see I’ve done a sample demo so it’s showing a sample demo here but if you have missed the page all you have to do is go for help here and you have catalon help here you can click on that and you’ll land on this page again so let me close the tab so if you have gone for API the page we land on is this page you can see the test cases object repository you have test suit data files checkpoints different keywords and you have test listeners reports and other features or other plugins we won’t be using all these today for few so the first thing you need to do is go ahead and create a project you can see the plus symbol or the new symbol click on that and go ahead and create a folder let’s say testing API and okay so the first thing here is we need to have an API to perform test on right for that you can go ahead and search for sample apis that are available on the net before that we’ll create a folder in object repository where you actually store your apis so go for new create a folder let’s say API testing and okay under this you can go ahead and create web service request user details it’s a restful API for now since we don’t have URL let’s just leave it blank and click okay so as you can see it’s ready here but the only thing that we need here is an API a sample API to perform tests on for that we have a Google all you have to do is I’m going to search for sample apis so like I said guys there are different apis rest API op API but for today we’ll be checking out how to perform test on rest API so I’m basically going for the first link that’s here you can go ahead and use any of these fake online rest apis or the sample rest API available online so as you can see I have different kinds of apis here I have get I have post put then I have delete patch post and all that so let’s go ahead and take one list users and all you have to do is copy this link in and paste it in a new folder and copy the request contrl C so as you can see here is our API but it’s in a different format all you have to do is copy this URL go back to catalon studio and place it here and click on this test request button and it’s asking if I want to save the changes and okay so request has been sent and we’re waiting for the output let’s see so here it is so as you can see the status of this response is 200 okay it has taken so and so time and the size is about 1 KB you have different formats of representing your API request here for now it is in Json format you can opt for XML or HTML or JavaScript and all that so let me get back to Jason and you have something called pretty format as you can see it’s better to understand and easy to figure out you have something called raw format which we saw when we just copied the URL right this is the raw format going back you have preview and that’s how it’s supposed to look in the preview and all that so any of these you can choose according your comfort so right now we have created a folder under object repository called API testing and we have a get API or the get command this is the URL we have pasted it here so now that our API is ready for testing the next thing is to go ahead and create test cases so guys I’ve directly started doing all that stuff here but you have an option to go and start with the sample project where the sample test cases and the sample API will be provided to you in the Caton Studio go ahead and explore the Caton Studio application you’ll find it so now that we are done with our object repository as in we have our API let’s go ahead and create few test cases so the good practice to follow is always a create a folder and create test cases under that so that your test Cas is not jumbled or placed here and there so let’s create a folder let’s give it a user detail verification details verification and okay now under that new and and create a test case verification let’s say a details verification tags are really important because right now I have only one test case so it’s very easy to search but when you’re doing an actual project of performing an API testing you’ll have multiple thousands of test cases like I said earlier when we were discussing the challenges that you come across when you’re performing API testing so you’ll have multiple test cases for multiple scenarios so it’s better to add TX so that whenever you want to search a particular test case case and if you just type the tag related to it you’ll be easily able to find where the test case is details and okay so here we go as soon as you create a test case you land on this page where you can add your service for there’s a option where it says add web service keyword then you have just add option this is for the web service keyboard because we are doing a simple project or a sample project on web service testing here or API testing but you can go ahead and do it for mobile testing cucumber keywords or cust keyword if you create one you can add different kind of decision- making statements and all that that’s way too complicated for this video so let’s go ahead with our demo so anytime you’re performing an API test on web services the first thing you need to do is send a request you have that here as well so click on this add web request the first thing that pops out is send request and the object repository or the API which we’re performing test on or for the API request to get all you have to do is copy drag and drop it here or you just double click on the folder and will take your a page where you have list of apis and you can choose on the one you want and you need to assign a name to the output which you get for the object so let’s just say response let’s say result one so yeah we have added our first command and let me save it so what I want to check for here let’s go back to the view I want to check if the status code is 200 or not in while testing so what I’ll do is I’ll add the web ser service command there but before that you have different status values here you can just click on this and it’ll take you to a page where you’ll be shown with what each respond code means for as for now we have something called 200 okay similarly you have different things like 100 one not1 2001 and all that what does it say for now it’s 200 and then you have 2 not2 which says the request is accepted then you have 2 not6 for the partial content then you have 3 not3 for C other then you have to use proxy 35 like that multiple every request has an status associated with it right so if you want no more you can just double click on that you’ll be taken to that page so where was I getting back to what to test Let’s test if the status code is 200 or not let’s go back to our test case and I’m going to add a new web service you have a drop- down command here you can just click on that and what I want to check I want to check verify response status code click on that so input to test you need to give the input right so you can double click on that and it’s the response object which a variable what did we give it’s result so type that here and obviously the value which you want to test it for let’s say 200 and okay that’s done let’s add one more command let’s say for now I know that this request supposed to be 200 status but what if I don’t know the status I just know the range of it then I want to check if the status of my request lies within the range you have that option as well you can go on ADD web service again and you have something says verified response status code in range again you can just go ahead and add the input here so again guys if you are new to web service keywords or this API testing and if you have no idea what keywords choose what do you want to test for and all that you have an option which says keywords browser and there you have different kind of options to browse or you can say documentation you can actually go for official documentation in the Caton Studio website but you also can do that here you have buil commands for web UI keywords you have mobile keywords you have cucumber keywords you have web service keyboard so the thing which is related to the demo which you’re doing right now is web service keywords so you have different options for element number request test and your lead let’s say for request you have we just use the send request so when you click on that dialog box pops up which says what exactly does that keyword do it sends an HTTP request to web server that’s what the send request does and what if an error pops out it throws an exception so what are the parameters that you need to mention for that keyword and all that there’s something called send request and verify as well it sends an HTTP request to web server and verifies the response it does the both we’ll check that out later and then we have something for number basically or equal to greater than less than and all that you can go ahead and check that then you have element features which you want to check we’ll do that right now in the demo part you have an option to check verify element property value let’s see what that is so if I scroll SC down it says verify that there’s an element with expected property value appear in the return data from a web service call basically you’re checking if the particular value which you have given in the input is there or not for that particular element using this element keyword you have text verify element text verify element count then you have verify element Response Code which we just did and verify Response Code range that we using so if you’re not familiar with the keywords you can go ahead and use these I mean refer to that or in the documentation getting back to our Command we have three options here the first one is basically the object variable which you’ve assigned so it’s a variable and what is that it’s result it’s a number I want to check if it’s between 100 and let’s say 150 and 2011 and okay so let’s get back to our request format and see what else we can do as you can see under this data I have three elements I have one which is related to id4 and one id5 and id6 so basically I have three elements for this data so I want to check if for the id4 the first name is Eve or not so what do I do go for the detail verification and click on ADD web service keyword here verify element property value and as you can see we have three inputs that we are supposed to provide obviously the first one is the variable name which you’ve given it’s result next is locator locator is something which is basically telling the application or the Caton Studio application that please go there to that particular location and that’s the element value that I want to check on it’s like a path so what do you do for that let’s just click for okay for that you can find something called Json Pathfinder you have a chrome plug-in as well that you can add to your plugins or you can just use an online Json Pathfinder I’m just using the first one I found so what you have to do is here enter your Json and the editor select the item to view its path and replace x with the number or the name of your variable so that’s what I’m going to do user details this is my Json input so I’m going to copy the entire thing and paste it over here so as you can see the details are shown in the third page I mean the next part of the screen so as you can see under data I have three elements what I want to check is if the first name is z or not so click on that you can see a locator here in the path variable so copy that go back to the Caton Studio in the string I’m going to paste it here and next is obviously again the string that I want to check for right now I’m giving the right value which is e right so again the string if and click on okay so guess this is enough for now let’s go ahead and check the test is running all you have to do is Click On The Run button here so guys this is what you say the manual format as in you’re manually entering using different drag and drop options and all that you have something called Script format as well you can go for that as you can see this is a script format let me just minimize this so these are the commands that we just added first of all we sent a request for the web server then we added a command to check if the response code is 200 or not then we had did the same thing to find out the range of it as an if it lies within the range and to check the property value now so guys what I’m trying to tell here is that you can either use the manual format of it or the script format of it if you are most familiar with the script go ahead and use that so again let’s go back to manual and now I want to check if the test is performing well or not all you to do is click on this run button and to view the output you can just go for this log viewer as you can see on the screen the test is being performed the output for every step or the every keyword that we’ve added will be shown here it says the first step is a success as in the request is being sent a status code is 200 and status code range is 200 which lies between 150 and do not1 but then there’s a failure with the last one which says enable to verify element property value root cause null pointer exception cannot get property data in the null object give me a minute guys I’ll figure out the error so guys so what do you think the error is let me check the user details again okay the first name is a but it’s in capital so as you can see that is why the test has failed now let me edit the string value here and see if it works capital E and click on okay let’s save it and try to run the test now I’m going to go for the log viewer for the full thing so again the test conducted again it’s wrong so it’s not the problem so sorry about that guys the error was that here in the Json path I had another variable which is x. data the copy thing I mean there was an extra letter in the Json path which I pasted here so I did paste the currect part right now it says the zero or the first element of data and the first name that I want to check is Eve or not so after doing that I did and then if I click on run button so here we go the log viewer so as you can see all the four steps are correct by mistake I’ve shown you the the result of giving the wrom input as well so that way you can make sure your API testing is working well by giving different options for different web service keywords here while we have checked few let’s go ahead and add one more so as you can see in the user details I have three elements under the data elements as you can see the one with ID one with ID 5 and one with id6 so I want to go ahead and add one more command add keyword uh I want to check the elements count here it checks the number of elements present well again the variable is result so I’m going to enter that and again I need adjacent path and let’s say I want to check if it’s two it should basically give me eror because there are three elements so let’s go ahead with the negative case and okay so data and I’m going to copy this so as you can see the error which I did earlier was I copy the X as well I don’t need to do that I just copy data from data whatever it is so when and I say first name I just have to copy from this data to the first name right now I just want the path of this so that’s just data we can just type it here so data and enter well it should show us an error but how about we give positive case anyway we’re testing so going to save it so what do we do before that I’m going to show you another thing let’s make it negative case let’s say if and okay now after saving if I run the test so it’s basically checking for the every step the request is being sent the next step is to check for the response code that’s done Response Code range that’s also done but since the fourth keyword which is to check the element property value since we have a negative case the program stop executing there I didn’t it didn’t go beyond that but after that we do have another keyword for which it has to check to so for that we have different properties to go ahead and change how this keyword has to behave okay right click on that you have something called change failure handling here so you have different option which says you have to stop on failure or continue on failure let’s say we have given continue of failure so it will stop I mean it will execute the step even if it’s there error it shows an error and go to the next part of it let me save it and if you click on run again let’s go for the log viewer here we go guys it didn’t stop there it went for the next step as well and since that was also a negative case it shown that there’s an an error it says it’s not equal with the actual property value Eve and there’s one more error right and you click on that particular step it says expected limit count two which is not equal to the actual count three so that’s the error that’s how you perform tests on API apart from this if I click on the objective or the API request here which is get request basically you have different options here as well to check out you have something called authorization if you are actually providing some email ID and all that you have a resen your testing for the login page and all you have authorization right now we do not have any authorization you have multiple authorization options as well basic or one not 0 to0 and all that then you have something called HTTP header right now we do not have an HTTP header if you do you can add it here same goes for the htb body but the important thing here is something called verification so as you can see there are already some Snippets here or the test skips which are already written for this for which response is received you have get a variable response body contains string then you have convert to Json is equal to a string or not status code so if I click on that you can see a command being added let me hide this and let me expand this for you as you can see when I clicked on that this was added assert that the entire thing to verify if the status code is 200 or not and to assert that it’s equal to 200 similarly let’s check out on the snippet I clicked on Json value check let’s see what does that have to add so it says the verify element property value is so and so but right now the actual data is not put here it says the random data let’s say I want to check if the ID is six all you have to do is place the cursor on the option that you want to check on and press control K you can see command or the verification command being added to it you can see a fly command property value so it says verify element property value data two as in the for second element if the ID is six or not so that’s another way of adding verification Snippets once you’ve added all you have to do is click on this test request and do you want to save changes okay so the request has been sent again now you can go for something called verification log here so guys as you can see when I plac the cursor on id6 and pressed control K the command has been added to my script which is verify element property value if the ID is six or not for the second element now that I’ve added it I want to check if the verification is passing what have to do is test click not just click on the Run button click on that and say test request and verify if you do that again a request will be sent and you have something called verification log here as you can see when you see that it says the result has been passed so that’s another way of doing it now let’s go back to details verification and after send request let me add one more command I want to send request and verify for the same thing Result One and click then let me make all this right I want to give the right data Eve and I’m going to make it three so now if I run everything should be green because we have given the right data right so I’ve clicked on the log viewer let maximize the screen so as you can see the first is to supposed to send the request it’s walk and verify the status code is 200 yes there is one send request and verify so it’ll verify the verifications which you just added that also work then you have status code range 200 lies between 150 and 200 m one so it worked then the property value for Eve and result data is three so as you can see everything is passed properly so guys that’s as easy it is to perform testing using Caton Studio well what I’ve done is really basic because since we’re learning the basics here so we have just performed testing only for the get request so like I showed you guys earlier here we have different kind of request here we have post request patch request but when you go for the Post you have two things you have response and request here so you have an HTTP body as well that you will have to add well obviously this is your Json format API request but this is the body where you have to add I did show you here in the user details you have something called HTTP body so when you are trying to test

for post or p and all that you’ll have two things you’ll have to paste this thing in the body part and then proceed with your testing then same goes for the get for the get we do not have any body so that’s it so guys that’s all about it and one more thing this is for the rest API you also have something called soap API for that as well you have an option to go ahead and perform test so guys that’s about it we did see how to use catlon Studio to perform API test like I said it’s a very basic testing which we did earlier you can go ahead and use the catalon Studio for Performing soap test and add your test cases to test studio so that you can view your reports and all that so what is this agile testing now agile testing is basically a software testing process that follows the principles of agile software development now agile is basically an iterative development methodology where requirements evolv through collaboration between the customer and self-organizing teams and agile aligns development with the customer need it is not sequential but a continuous process now this methodology is also called release or delivery driven approach since it gives a better prediction on the workable products in short duration of time so let’s move on and have a look at the different principles of agile testing now the first one is that testing is continuous now the agile team tests continuously because it is the only way to ensure continuous progress of the product then we have the continuous feedback as well so agile testing provides feedback on an ongoing basis and this is how your product meets the business needs and also satisfies the customer requirements then we have the tests performed by the whole team now in a traditional software development life cycle only the test team is responsible for testing but in agile testing the developers and the business analysts also test the application next up is the decreased time of feedback response now the business team is basically involved in each iteration in agile testing and continuous feedback shortens the time of feedback response then we have the simplified and clean code so all the defects which are raised by the agile team are fixed within the same iteration and it also helps in keeping the code clean and simplified next is less documentation now agile teams use a reusable checklist the team focuses on the test instead of the incidental details and finally we have the test driven now in agile methods testing is performed at the time of implementation whereas in the traditional process the testing is performed after implementation so these were some of the principles that are followed while performing agile testing on any software now let’s move on and have a look at the different advantages of of agile testing so the first benefit is that it saves time and money now with the help of agile testing you get to know about the problems in your software in the earlier stages and this saves a lot of time and money as well next up is the documentation so agile testing basically reduces a lot of documentation involved in the process then we have the flexibility and adaptability so agile testing is basically flexible and highly adapted able to changes so you would not face any trouble if there are any changes that are to be made in the software during the process it also provides a way for receiving regular feedback from the end user so the more amount of feedback that you receive the easier it becomes to solve the problems and also meet the requirements of the user easily and finally there’s better determination of issues through daily meetings so there are daily meetings happening for the agile testing that lets you know about the whole process and also the Improvement that is happening so these were some of the advantages now let’s have a look at the different testing methods for agile testing now there are various agile testing methods so first we have the behavior driven development then the acceptance test driven development and finally there’s the exploratory testing so the first one is the behavior driven development now the behavior driven development improves communication amongst project stakeholders so that all members correctly understand each feature before the development process starts now there is continuous example based communication between the developers testers and business analysts now these examples are called scenarios which are written in a special format the scenarios hold information on how a given feature should behave in different situations with different input parameters these are called executable specifications as it comprises of both specification and inputs to the automated tests next up we have the acceptance test driven development that is the atdd now the atdd focuses on involving team members with different perspectives such as the customer developer and tester so the Three Amigos meetings are held to formulate acceptance tests incorporating perspectives of the customer development and testing so the customer is focused on the problem that is to be solved the develop ment is focused on how the problem will be solved whereas the testing is focused on what could go wrong the acceptance tests are a representation of the user’s point of view and it describes how the system will function it also helps to verify that the system functions as it is supposed to in some instances acceptance tests are automated now moving on the final one is the exploratory testing now in this type of testing the test design and test execution phase go hand inand so the exploratory testing emphasizes working software over comprehensive documentation the individuals and interactions are more important than the process and tools so the customer collaboration holds greater value than contract negotiation exploit testing is more adaptable to changes as well now in this testers identify the functionality of an application by exploring the application so the testers try to learn the application and design and execute the test plans according to their findings so the process goes like this first you learn then you design a test and then execute that particular test and then finally you analyze the test results so these were some of the agile testing methods that you need to know about now moving on next up let’s have a look at the life cycle of agile testing so the life cycle of agile testing consists of five different phases so first we have the impact assessment then Agility Test planning then daily scrums then agility review meeting and finally release the Readiness so in the first phase we gathered the input from the stakeholders and users and this will act as feedback for the next deployment cycle the next phase is the test plan Meetup now here all the stakeholders come together to plan the schedule of testing process meeting frequency and deliverables the third phase is the daily standup meetings now this includes the the everyday standup morning meeting to catch up on the status of testing and set the goals for whole day next up is the agility review meeting so weekly review meetings with stakeholders meet to review and assess the progress against milestones and finally the last stage is the approval meetings for deployment so at this stage you review the features that have been developed or implemented and are ready to go live or not so this is the life cycle that is followed in the process of agile testing in case of any particular software so now that you know what is agile testing and also the different advantages and how it actually works let’s have a look at the test plan for agile testing and also the quadrants so first let’s talk about the agile test plan now in agile testing the test plan is written as well as updated for every release so the test plan in agile includes the scope of the testing then the consolidating new functionalities that are to be tested then we have types of testing or various levels of testing and next up we have performance and load testing that needs to be performed on your software next we have the consideration of infrastructure and then we have mitigation or the risk plans where you have to know about the risks that might occur during the testing then we have the different planning of resources and finally deliverables and Milestones because you need to deliver your product as soon as possible in in order to meet the requirements of your customer so this is the plan that you must follow while performing agile testing on your software and also in order to deliver an error-free software now talking about the agile testing quadrants these basically separate the whole process in four quadrants and help to understand how agile testing is actually performed now for the first quadrant that is the agile Quadrant One the internal code quality is the main focus in this quadrant it consists of test cases which are technologically driven and are implemented to support them so it basically includes the unit tests and the component tests so here we have the various unit tests and component tests and also this is the automated quadrant now the agile quadrant 2 contains test cases that are business-driven and are implemented to support the team now this quadrant focuses on the requirements the kind of test performed in this phase is the testing of examples of possible scenarios and workflows testing of user experience such as the prototypes and also pair testing this can be automated and manual as well now the agile quadrant 3 provides feedback to quadrants one and two the test cases can be used as the basis to perform automation testing now in this quadrant many rounds of iteration reviews are carried out which builds confidence in the product so the kind of testing done in this quadrant is basically the usability testing exploratory testing pair testing with customers collaborative and also user acceptance testing now moving on to the final quadrant the fourth quadrant basically concentrates on the nonfunctional requirements such as the performance security stability Etc now with the help of this quadrant the application is made to deliver the non-functional qualities and the expected value now in this quadrant the kind of testing done is the non-functional test such as the stress and performance testing then we have the security testing with respect to authentication hacking and also infrastructure data migration scalability and load testing so now that you know why we need to perform agile testing in our everyday life let’s move on and have a look at the big companies that actually use agile testing for their software so let’s have a look at some of the big names so there are Cisco Sky Phillips Vista Print JP Morgan Chase IBM and many more such companies that use agile testing as one of their methodologies now sky might be a household name famous for its satellite TV broadband and telephone services but the media provider is almost making a name for itself in software development so the company which has launched products to combat the likes of Apple’s TV box has been placing aile methodologies and open source at the center of the software development approach not just that Phillips has also adopted the agile principles now after numerous changes to management structure The Firm introduced several agile coaches that went to deploy scrum principles such as scrum boards and breaking down teams into smaller ones as a result of changes like this teams could react to situations quicker bureaucracy was removed and it was ultimately easier for these smaller teams to take responsibility for their respective products not just that Vista Print is also the goto marketing company for small businesses now the company performed some analysis of their existing waterfall methodology and found that teams were taking more than 60 days to move from the ideation phase to product delivery now the 60-day cycle only amounted to 40 hours of actual work the company looked further into why this was the case it transpired that unclear decisions and long creativ times were to blame all of which resulted in feedback loops that’s when they moved to the agile testing this is also the case for JB Morgan Chase now a few years ago the baking giant overhauled their business processes to help improve product development and simultaneously slashed the cost of training as part of a high-profile it initiative now agile methodologies were a key part of that particular initiative so the most basic type of testing is unit or component testing the goal of unit testing is basically to segregate each part of the program and test those part individually to check if they’re working properly or not so it isolates the smallest piece of testable software from the remainder of the code and determines if it behaves exactly as you expected and according to your requirements or not generally those small pieces of software that have been telling before are usually referred to as unit so this unit can be almost anything you want it to be it can be a line of code it can be a method or a class or some sort of program or a part of application program anything but smaller the unit test it’s always better smaller test give you much more granular view of how your code is performing at basic level there is also the Practical aspect that when you test very small units your test can run very fast like a thousand test and second fast that fast while here’s simple example to help you understand what a unit can be or how unit testing is so consider the simple code well I have a simple function or method here the function as you can see the main function it’s performing division operation it’s accepting two parameters A and B and it’s wring the value that you get after dividing a by B and next comes the testing function as you can see the testing function is written in Ruby well the language doesn’t matter the language whichever you’re comfortable with you can use that anyway as you can see I have two variables A and B and I’m assigning values 6 and two and in the assert equal function I’m calling the divider function and I also have the first parameter which is the value which I’m expecting that the division function should give it to me so the value which I’m expecting is three and I’m passing the function and parameters to that function so after dividing a by B which is 6 by 2 I get the answer three and assert equal functions tells me that three and three the expected answer and the actual answer I got are the same so my function is working prop properly while this is a positive case you can also do that with the negative case as in you can just change the three expected value to four and see if the assert equal function returns to you the actual answer it says that your test fails it means that the expected answer and the obtained answer not the same so that’s how you perform a testing on small unit which is a part of your entire program so here the small unit is division function so like I said a unit can be almost anything you want it to be it can be a line of code or it can be a method or it can be a class so this is very basic example but I’m sure it gives you an idea of unit testing right so guys unit testing is usually performed at the earlier stages of development process like I said earlier and many cases it is executed by the developers themselves before handing the software over to testing te one of the biggest benefits of this testing is that it can run every time a piece of code is changed so that way you can resolve if there are any errors very quickly and since you’re dividing your code into modules here you can reuse your code and testing becomes much easier and efficient and your product is well wors in the market now to understand unit testing better let’s go ahead and see a simple algorithm so you start writing your test so you add your test to the test suit then you run the unit test if the test passes then you add one more test or add it to the next level of testing in case your test fails what you do you make the necessary changes and you run unit test again and after you run your test again if it fails then you make changes again and you repeat the cycle until the code which you’ve written is perfectly working and it’s wring the value that you’re expecting or the results that meets your requirement and suppose after making changes if your test passes then you can add it to the test Swit and move it on to the next level of testing so once you sure that all your tests are working properly it means your test suit is perfect and your product is working properly you can stop unit testing and perform next level of testing very simple right this type of basic testing offers lot of advantages guys unit testing provides numerous benefits including finding software bugs facilitating change simplifying integration providing a source of documentation and many others so let’s take a look at them right now in more detail so here are the benefits of using unit testing in software development cycle so first of all it makes coding process process more agile when you add more and more features to software you sometimes need to change old design and code I’m sure you agree with that however changing already tested code is both risky and extremely costly if we have unit test in place then we can proceed for refracting very confidently because we know that each part of a code is working properly so code completeness is very important in software testing especially agile process so running unit test can demonstrate code complete Nets so unit testing makes Code Practice more agile and very simple secondly unit testing improves the quality of your code it identifies every defect that may have come up before the code is sent further for further testing so writing test before actually coding makes you think harder about the problem it exposes the edge cases and makes you write better code also the code that you’ve written is since divided into modules it becomes reusable this means that codes are easier to reuse when you perform unit testing unit testing also helps find software bugs early since unit testing is usually carried out by developers who test individual code before integration issues can be found very early and can be resolved easily without impacting other pieces of code so that advantage of detecting any errors in software early in the day is that by doing so the team minimizes software risk and avoid spending too much money in time unit testing also facilitates changes and it simplifies integration it allows program programmers to refactor code and upgrade system libraries at later date and make sure that the module still is working properly unit testing helps with maintaining and changing the code it reduces the defects in your newly development or the newly developed module of your code it reduces box when changing the existing functionality as well unit testing actually verifies the accuracy of each unit afterward the units are integrated into an application by testing parts of the application via unit testing so basically it makes integration much more better it provides documentation to developers so code documentation is basically drag and it shows mostly how little code documentation gets written unit testing can make the documentation burden a little easier by encouraging better coding practices and also leaving behind the piece of code that describe what your program is actually going to achieve unit testing also makes debugging easier and quicker it helps simplify the debugging process if a test fails then only the latest changes made in the code need to be deared it’s easy right it helps create better software designs writing the test first forces you to Think Through Your Design and what it must accomplish before you actually write the code this not only keeps you focused it also makes you create better designs so that way you’re sure that the code you write will perform the right thing at the right time and lastly it reduces testing costs since the Bucks are found early unit testing helps reduce the cost of buck fixes so just imagine the cost of buck found during the later stages of development you will have to modify the entire code of your project that sounds really tiring and waste of money so performing unit test saves you a lot of money and effort on your part so Guys these are few benefits of regression testing I’m sure there are others as well make sure you research on it and learn more about them so there we go guys I hope you convinced as to why you should use unit testing so we have covered the basics of unit testing if you have any queries regarding what we have discussed till now please do post them in the comment section and we’ll get back to you as soon as possible so moving on let’s do a simple demo on how to write unit test but before diving into the main part of this tutorial and writing unit test let’s quickly discuss the properties of a good unit test unit testing principles demand a good test is easy to write it’s easily reliable it’s readable and fast earned efficient so easy to write developers typically write lot of unit test to cover different cases and aspects of application Behavior so it should be easy to code all those test routines without much effort it should be readable the intent of unit test should be clear a good unit test tells a story about some behavioral aspect of your application so it should be easy to understand which scenario is being tested and if the test fails it should be easy to detect the bug without actually going through the entire program that’s how easily readable your unit test should be so with a good unit test we can fix a bug without actually debugging the code then it should be reliable your unit test should fail only if there’s a bug in the system under the test well the thing is programmers often run into an issue when the tests fail even when no books are introduced so good unit test should be reproducible and independent from external factors lastly you write your unit test so that you can repeatedly run them and check that no books have been introduced if your unit test is slow it will affect the final product one slow test won’t make a significant difference but add 1,000 more and we surely stuck waiting for a while slow unit test may also indicate that either the system under the test or the test itself interacts with external system making it environment dependent which is not a good thing in unit testing so that’s it guys there are no secrets to writing unit test so let’s go ahead and write one so guys before we actually start with the simple demo there’s certain things which you should know first of all to perform this demo you need IDE it could be your eclipse or intellig anything that you’re comfortable with and you need a unit testing platform or you can say framework in here in this demo I’m using a framework a popular framework for Java called test ngng there’s another one called junit you also have different Frameworks for different languages that you can use we’ll discuss about the unit testing Frameworks later but as for in this demo as you should know I’m using Eclipse ID and I’m using test NG for my unit testing framework so that’s all you should know and regarding how you should install test NG there are different ways you can install it using Maven the easiest way in Eclipse is you can actually install it using Eclipse Marketplace while you you have help command here you can see the menu you can go for Eclipse Marketplace here and click for test ngy and just click on install after you’ve done that to make sure it’s installed properly all you have to do is go for Show view here and click on other and on the Java make sure that you have test ngy installed here if it’s showing test NG here it means that installation has been done properly so that’s all guys I’ve already written program but it’s a very easy program as you can see I have a math function first of all and it has one method which adds two numbers so it’s returning in value and I have first parameter and the second parameter and I’m adding and I’m returning the value to my testing function so this is my basic function and I have a test function which is conducting the test here so as you can see I’m using annotations here and importing this pick is to perform test since I’m using test ngy I need to import these details so I’m using annotations which is at test this is called what we call annotations and I’m using a method called assert equals so I’m importing that as well so again this class contains a single method which is adding two numbers I have two variables here one is expected and actual expected is the one which you want the method to return to and the actual is the one which actually the method returns to you so as you can see the expected value I’m giving it as let’s say four and as for the actual value I’m using a math add function which I’ve created here as you can see I have ADD function here and I’m sending two parameters which is two and two so if I go back to function since I’m calling this function the parameters here will be first is also 2 second is also two so 2 + 2 it should written four and here I have a method assert equals this is the actual value which I’m getting from the math function and this is the expected value which I’ve given it four and since both are four the test should result success let’s go ahead and check it it’s as easy as that guys so this is one unit of your entire program you can keep adding units in this way so first we’re checking if this unit is working properly for that let me run the test as you can see it says this test has passed and the test run one failure zero skip zero it works right let’s go ahead and check another F values let’s say Let me give it as -4 and -2 + 2 that should be let me just give it as -3 so -2 + – 3 should be Min -5 now if I call S equals function the expected value is min -4 and and the actual value is minus 5 so the test should written failure let’s go ahead and check it so here as you can see it’s giving a long message it says this test is failed because expected value is minus 4 but the actual Valu is found to be minus 5 and as you can see in the default test one test was run you have one failure and zero skips that’s it guys and now let’s make it a little more bigger as and let’s add one more function in the math function I I have a multiply function here so let me go ahead and add it so I’m not negating or I’m not commenting that function let it be there it’s going to give us result for both the functions here so this multiplier function again it’s taking two parameters one is multiplican and one is multiplier it’s multiplying them and returning the answer to us let’s go to math Java test here I don’t have a test annotation for that right so let’s go ahead and write one so public void multiply two numbers return some any name of your function could be according to your wish and here I go so final int expected let’s give it four let’s keep it simple for a while and then we’ll make it complicated Final End actual so multiplic and let’s give it as two and the multiplier Also let’s give it as two assert equals actual and expected okay let me save it so obviously the add function it should result a failure and multiply it should WR the correct value so let’s go ahead and test it so as you can see two tester performed one failure so let’s go ahead and see it says multiply two numbers has successfully passed but add has failed because expected value is minus 4 but it was was found to be Min – 5 so that’s how you write unit test let’s make it Min -4 and check if it’s working for the negative numbers as well as you can see it’s showing two failures here both are multiply function and add functions have failed so guys it’s as easy as that first I wrote a unit test for add function so that’s add function is a unit you can call it a unit a part of your program and I’ve checked and tested since the method is working properly I’m going one step ahead and added one more unit which is a multiply function even it’s working properly then you go ahead and add one more part of or one more unit to your function or the program of your application so guys that’s how you write simple unit test as you can see the tests were very simple and these are very basic level tests you can go ahead and make explore and make them complicated so I’m not going to do the divide function the purpose of this demo was for you to understand how simple it can be and how your unit test should be not very complicated there should be very easy to understand one look at it the person who is looking at your cach should understand and what your code is actually performing so there you go guys that’s how you write your unit test let’s get back to the theory part so I hope you have understood what we did in the demo let’s move forward and check out the most popular or the best unit testing Frameworks to automate unit tests so the unit testing framework for cop is nunit nunit is a unit testing framework that belongs to xunit family and it’s written entirely in cop now as for Java you have many the most popular ones are junit and test ngng junit is basically a open open source unit testing framework for a test driven development environment we call it tdd it supports the core concept of first testing then coding this framework is specifically designed for Java programming language in this data is first tested and then it is inserted in the piece of code so it provides the simplest approach for writing code very swiftly and easily it also offers annotation for test method identification as withed in the demo part we use test ngy and I’ve showed you how to use annotations and an assert equal functions moving on a unit testing framework for C and C++ is munit it’s an open- Source unit testing framework which is designed for software application which is written in C or C++ well it’s used by both developers and testers for software applications which are written again in C and C++ so next we have unit testing Frameworks for JavaScript as you guys know JavaScript is the language of web which is the reason there are large number of test automation Frameworks that support jav JavaScript so here’s one of the most popular unit test in framework for JavaScript which called HTML units it is an open-source unit testing framework that supports JavaScript and it provides graphical user interface features like forms links tables Etc it offers an open- Source Java Library which contains graphical user interface less browser for Java programs it also supports cookie submit methods like get post and proxy server it is used for testing applications that are used within Frameworks like junit and test ngy so Guys these are not the only ones which are there in the market there are many other popular Frameworks but these are the top unit testing Frameworks which support different languages as we discuss for cop it’s n unit for Java you have junit and test ngng for C and C++ you have munit for JavaScript you have HTML unit junit test engine and many of others so if you want to know more about them you can go ahead and research on them so what is regression testing a regression test is a syst systemwide test that’s intended to ensure that a small change in one part of the system does not break existing functionality elsewhere in the system it’s important because without regression testing it’s quite possible to introduce intended fixes into a system that could create more problems than the solve so let me give you a simple real world example you take your car to a mechanic to get the air conditioning fixed and when you get it back the air conditioning is working properly but the gas tank sensor is no longer working if regression test is an unintended change then regression testing is the process of unting for those changes put simply regression testing is all about making sure old bugs don’t come back to haunt you let’s take a look at technical example that illustrates what can happen when regression testing is not used so one day the manager of accounts receivable department at vain Industries uncovered a bug in company’s Financial system it turns out that the module responsible for reporting overdue invoices was not listing all the overdue invoices the bug was assigned to a developer to make the fix the developer followed company policy and unit tested the new code the unit test proof beyond a shadow of doubt that fix worked as intended developer did a good job the fix was released into production so far so good a week passes then a strange Behavior occurs when the accounting department tries to run the company month and profit and loss statement whenever the system tries to issue an aging report the system times out so what is aging report now a aging report separates and sums invoice amounts according to age like 30 days pass due 60 days pass due 90 days pass due Etc so what happened was when they were trying to issue an aging report the system timed out without its month and profit and late statement the company doesn’t know if it’s making money or losing money the the accounting department is really upset about it the accounting manager contacts the software development manager to report the issue and seek remedy as soon as possible so tech leads and quality analyst manager brought in to find out the issue turns out that the new code which was encapsulated in the function was only tested for small database when the same was applied for production data which is usually very large the code didn’t work as expected so what you have to notice here is that if the fix had been incorporated into into systemwide regression test that used a copy of data running in production the chances are very good that issued have been resolved before the released to production or discovered actually that’s how important regression testing is well that was a little technical right here’s a simple one this is just the testing of a simple e-commerce website and here we’re checking the functionality of payment options so first of all there was only one payment option let’s say credit card so item has been added into card you use the one payment option which is available then make the payment and everything is working properly when tested now the company wants to add one more payment option let’s say PayPal so now the company checks if the option of using PayPal is working properly or not so again the item is added to card the payment is made through the new option which is added and everything is working again now what company does is it goes ahead and test for the previous payment option again then they find out that the previous payment option is is not working properly so what happened here the new payment option which is Paypal has affected the old one which is credit card so what they do they perform regression testing so what they have done here is they’ve checking if the new payment option has affected the old one in any way if so the Bucks are identified and resolved that’s what regression testing is all about so basically this regression testing is not just done at the beginning it’s done throughout the testing phase and that we call regression testing cycle let me show it to you guys here it is so as you can see the one on the left side is the regression cycle so you incorporate your Cod into the Bild and schedule the testes you find a bug resolve it and write your regression test again based on those bugs and the fixed issues and run those regression test and the cycle goes on until you get a perfect product and then you release your product into the market so that’s what we call a regression cycle and on the right side you have a graph which represents what regression testing is basically let’s say you have version one of your any software product and this is the feature one which you have enabled during the version one and that was released after 20 days of its development and then you have version two or release 2 you have added new feature F2 it’s working properly so you go ahead and check if F2 has affected F1 in any way that’s what regression testing is all about and your second release is released after 40 days similarly it goes on next version you add new feature you check out if the other features or the previous features are dependent on it if there are any errors because of the new feature if no then you release your product so that’s what regression testing is so I hope after so much explanation you guys are clear with what regression testing is right yes let’s carry on there well the basic aim behind conducting regression testing is to identify bucks that might have got developed due to changes introduced conducting this test benefits a member phase such as regression testing increases our chances of detecting bugs caused by changes to any software or application these changes can be anything it could be just updates or patch fixes or defect fixes or anything during unit and integration testing regression testing can help catch defects early and thus they reduce the cost to resolve them so basically it’s cost effective it also helps in researching unwanted side effects that might have been occurred due to new operating environment it enjoys better performance software and why is that because using regression testing we can identify bugs and errors in the early stage itself because of that the performance your product is literally High it makes sure that the issues which are already fixed do not occur again that’s one of the best thing about regression testing most importantly regression testing verifies the code changes do not introduce any old effects improve the quality of deployed software this way it en ures the correctness of the program and as a result the best version of your product is released to Market so to summarize it reduces the amount that you have to pay on your testing by reducing the amount of bugs and making sure that the old bugs don’t written it gives you the best product or the quality of product is improved when regression testing is performed and you can actually catch the box or any kind of issues in the early stages itself so these are some benefits of regression testing however in real world designing and Main maintaining a near infinite set of regression test is not actually feasible so it is important to determine when to perform regression testing and when not to regression tests are frequently executed throughout the software testing life cycle at each different level it can be unit testing level integration testing level system testing level or acceptance any level however it is recommended to perform regression testing on the occurrence of following events let’s discuss what they are first of all when new function ities are added idly you should perform regression testing after making any changes to the code for example a website has a login functionality which allows users to do login only with the email now you add a new feature like Facebook login so you need to check the entire login functionality of the Facebook just like the simple e-commerce website payment option which we discussed earlier we need to make sure that the new payment option or in this case the new login feature hasn’t affected the old login functionality then you apply regression testing when there is change requirement or usually you call it CR in the market for example whenever you log in there’s this option which pops out right do you want the system to remember the password I’m sure you’ve seen that so remember password should be removed from loging page which was available earlier that’s change requirement it was available earlier but you want to remove it that’s when you can apply regression testing to see if the removal of thing is affected the website that you’re using in any way and then you can apply regression testing when and there is defect fix that’s straightforward you already know that imagine login button is not working in login page and a tester reports a bug stating that the login button is actually broken so once the bug is fixed by the developers tester test it to make sure whether the login button is working as per expected results or not simultaneously tester test another functionalities which are related to login button like registration or any other features which are directly related to login functionality and then you can apply regression testing when there’s performance issue fix for example when there’s modification of code based on your needs and requirements you’ve made some changes to the code and since then the loading homepage takes 5 Seconds you want to reduce the load time to 2 seconds and you have done it but you want to see if this has affected the functionality of your website in any other way you can also apply regression testing when there’s an environment change for example when you’ve updated the database from MySQL to Oracle all the features which are dependent on your database should be tested and lastly you can apply regression testing when there’s a patch fix although meant to fix problems poorly designed patches can some sometimes introduce new problems like they can break the functionality or disable a device so in such cases you need to perform regression testing to see if fixing a patch has actually been a profit for you or loss so Guys these are some test cases or you can say situations or scenarios where you can apply regression testing and that would be beneficial for you so guys often regression testing is done through several phases of testing it is for this very reason that there are several types of regression testing out there let’s check out what they are to begin with we have unit testing so immediately after coding changes are made for a single unit a tester usually the developer who is responsible for the code reruns all the previously passed unit tests so test driven development which we call it tdd and in continuous development environments autom unit tests are built into the code making unit regression testing very efficient when compared to other types of testing that’s what unit testing is then you have Progressive testing so Progressive testing Works efficiently when there are changes done in software or application specifications as well as new test cases are designed that’s when you use progression testing and it be more helpful for you as well then there is selective testing in selective testing testers use a subset of current test cases to down the cost and the effort so in this strategy a test unit must be rerun if and only if the program entities example functionalities variables Etc it covers have been changed so basically only things like functionalities variables which are under the unit test are changed only then you should perform testing on that unit test the challenge is basically to identify the dependencies between the test case and the program entities it covers so basically as the name indicates you do not perform test in all units you just select few out of those which might have affected you to change and then test those units that’s what you call Selective testing and then you have reset all testing reset all testing is very time-taking because in this testing we reuse all the test this strategy is not much useful when you have small modifications or small kind of changes which are done to your code in the application you can straight away point out right you have made a very small change and you are trying to retest everything because of it small change it’s literally costly and it takes a lot of effort and time on your part during small modifications or changes to your code in your application it’s not effective retest all strategy involves testing of all aspects of a particular application as well as reusing all test cases even where the changes have not been made so that’s one of the most costliest type of testing when compared to others lastly we have something called complete testing don’t confuse it with retest all testing sometimes people off can refer to is both of them as the same thing but anyway complete regression testing is very useful when multiple changes have been made in the existing code performing this testing is highly valuable to identify unexpected bugs actually so once the testing is completed the final system can be made available to the user so guys it is important to make sure the type of regression testing that needs to be conducted so you should choose the one which suits your requirement properly and how you choose or which one you choose totally depends on other factors such as recurrent defs criticality of the features Etc but what remains on the priority is ensuring that the software delivers the best functionality and proves to be beneficial addition to your company or industry so guys now that we have established what regression testing means let’s go ahead and check out how regression testing is actually performed so every time the software under goes a change and the new version update or release comes up the developer carries out these steps as a part of regression testing process the first thing it does is developer execute unit level regression test to validate the code that they have modified along with any new test that you have written to cover new or the change functionality basically whatever the changes they made to check if the changes are working properly or not so that’s the first step we did learn what unit level regression test are earlier right so any code changes made for a single unit a tester or basically the developer who’s responsible for the code reins all the previously passed units as well so that’s what unit level regression is once that is done the changed code is merged and integrated to create a new build of application under test after that smoke test are performed these smoke tests are executed for Assurance that the build which you have created in the previous step is good before any additional testing is performed these tests may be automated and can be executed automatically by continuous integration services such as denkin Hudson’s and bamboo so once the build is perfect sanity testing confirms that new functionality works as expected and known defects are resolved before any other conducting or regor integration testing is actually performed so why do you perform this integration testing to verify that the interaction between the units of application with each other and with the backend services such as databases is working properly or not for that you perform integration testing the next step is to schedule your regression test so depending on the size and the scope of the released code either a partial or a full regression test may take place defects are reported back to the development team and many require additional rounds of regression testing to confirm the resolution so lastly based on the reports that you’ve written you analyze and figure out what taste cases should be added for the next checking process as well and you create a report on that so that’s how you perform a regression testing so like you’ve seen it’s similar to any other testing it’s just that you check the function fun ality of your developed software Whenever there is an update or some new release so basically on introduction of new feature you check out if the previous features are working or not so remember guys regression testing is not just performed in the beginning so basically it’s carried out throughout the testing process whenever a new feature is added and we discuss when to perform regression testing earlier right so whenever one of such cases occur we perform regression testing during the entire testing phase so basically what you’re doing here you select the test for regression choose a proper tool and automate the regression test verify your application with checkpoints manage regression test or update when required you schedule the test integrate the build and analyze the result so that’s as simple as that if that was a little theoretical and if you’ve not understood here is a pictorial representation of it so first of all whenever we make some changes to the code for any reasons like adding new functionality optimization Etc our program when execut fails in the previously designed test suit for obvious reasons so after the failure the source code is debugged in order to identify the bugs in the program after identification of bugs in the source code appropriate modifications are made then the appropriate test cases are selected from the already existing test suit which covers all the modified and affected parts of the source code so we can add new test cases if required in the end regression testing is performed using the selected test cases so selecting test cases is very important effective regression test can be done by selecting the following test cases test cases which have frequent effects test cases which verify core functionality of the product that you’re checking the complex test cases integration test cases you have functionalities which are frequently used so those are the first ones that you should check out then you have test cases which cover the module where the changes have been made those are obvious then test cases which frequently fail for no reason then you have boundary value test cases so these are certain test cases where you can apply regression testing or you can actually select these test cases for regression testing so when you’re trying to short list the test cases for regression testing these are some points that you should consider so regression testing simply confirms that modified software hasn’t unintentionally changed and it’s typically performed using any combination of following techniques so basically what I’m trying to say here is that there are three techniques that you can apply for regression testing so the first type we have is retest all this method of regression testing simply retest the entire softare suit from top to bottom in many cases the majority of these tests are performed by automated tools and certain times automation is not necessary at all moreover purely using automation ignores the benefits of human testers and any change for exploratory testing so this retest all type of technique is an expensive method as it requires more time and resources when compared to other techniques while it’s all there in the name itself right retesting the next is selective test cases again from the name itself you can guess what that is rather than a full retest process this method allows the team to choose a representative selection of test that will approximate a full testing of test suit the primary advantages to this practice is that it requires far less time and effort when compared to retest all method so these kind of regression testing is usually performed by human testers such as quality analyst team or development teams who will typically have better insights into the working of test cases and their unexpected behaviors and lastly we have test case prioritization this is one of the popular technique the goal here is to prioritize a limited set of test cases such that more potentially impactful tests are executed ahead of all less critical wants so try to prioritize test cases which should impact both current and future builds of your software that way you’re not wasting your time money and effort apart from from these three we have another one called hybrid hybrid technique is literally a combination of regression test selection and test case prioritization so rather than selecting the entire test suit select only test cases which are executed or re-executed depending on their priority so what are the different techniques we have retesting where you perform testing on the entire test cases that there are then you have selective test cases based on certain criteria you select the few test cases then you have prioritization you select the more impactful test cases compared to less critical ones and lastly the hybrid which is combination of selective and prioritization so these are various ways of implementing regression testing guys now that we know what regression testing is its types and its techniques let’s go ahead and do a demo on how to create a regression testing plan for that I’ll be using an Excel sheet so guys here we are in this demo our main goal is to actually learn how to create a regression testing plan it’s a very simple example so with this example I’m sure you’ll be able to get started on how to perform regression testing so first thing there are certain terms that you should know about as for this regression testing plan we’ll be using an e-commerce website to test on or to create a plan actually so let’s take MRA here we go okay what do I want to see so we go I’m choosing wall lamps and lights anything just an basic example to check on let’s perform or create a regression testing plan for the sort option here you can see right the sort here when you click on that you have different options like sort the elements based on what’s new popularity better discount price high to low price low to high and faster delivery so we’ll be creating a regression testing plan on that let’s go back to Excel sheet like I said earlier there are certain words or terms that you should be aware of the first thing let me just write the headings first let let me increase the size then we have what they mean and then comes our example okay let me increase the size of this one as well okay first terminology is test objective so what does a test objective mean it’s basically what you’re trying to do here in this you’re trying to test a functionality of your feature that’s what your objective the goal or the objective of of creating this plan that’s what we call test objective so you can say what you are planning to do so what would be the example here we trying to check the functionality of a feature here trying to check a check the functionality the next term is test object so what do you mean by test object it’s basically the component which you perfect test on but performing test on so component to be tested so what’s the component that we’re trying to test here the sort component so that’s our test object so I’m going to say sort feature so we’re done with test object and test objective we have something called test item next so what’s in test item test item is the subset of your test object or the item that you’re performing test on so this is the object that you’re performing test on which is sort like I said under sort we have multiple options so these are nothing but test items here so let’s say let’s perform a test on this price high to low so let me write it as sub set of test object so what are the item that we checking here on price from high to low the next thing is test condition so under test items like I said it’s a a subset right you can have any number of items or subsets for an object for example like we said here we have what’s new popularity and also let’s say if I want to select two options or two objects or items that I want to check here which is price high to low and price low to high I can add both of them here high to low comma low to high so the test condition is the one thing which you’re testing of these items so let’s say we want to check the Sorting feature by price is high to low so you get the point right basically the condition on which you’re performing testing and then you have test case test case are just parameters that you can relate to when you’re actually performing testings for example um you have test data that you’re checking on then you have preconditions if you do have any or you can say assumptions and then you have expected results actual results of test and all that so guys if you want to know more about test cases there’s separate video by Eda on test case it’s in the software testing YouTube playlist go ahead and refer to that so yeah I don’t have to give you an example right so I’m just leaving it blank and lastly you have test suit test s is nothing but a combination or collection of test results that come under test suit so I can write it as set of test cases so these are certain terms which you should be aware of of when performing a testing or writing a test case or when you’re creating a regression testing plan or anything so the first thing is test objective is your goal or thing what you want to do for example here we trying to check the functionality of a feature then you have something called object or the feature on which you’re performing test on soft feature under soft object you have multiple options those come under your test item and the test condition is based on what condition you’re trying to check your test object under which a test item comes so basically we trying to test out the sort feature based on price and high to low so in test condition you have three things you have your test objects which is sorting buy the item which is price and an item which is high to low and then you have test cases these are like certain parameters which are associated when you’re performing a test like test data preconditions if you have any expected results actual results or any other commands status and all that comes under your test cases and lastly you have something called set of test suit which is set of test cases which come under the same C category you can say so what are we trying to test here testing project name let’s give it a name which is mintra release one let’s say so for this first release one let’s write something called tracebility Matrix this traceability Matrix basically helps you keep track of how you performing testing on and what and what are the results so here we have traceability Matrix let’s say for releasee one LC release one traceability Matrix the first one is feature or you can just call it test item then you have requirement ID then the test site and then comes the test cases so we go let’s write the first element here so that would be this is the website that we’re testing for and what are we testing the sort feature that’s the object and the item is price price and what is that we testing for let’s take high to low first then requirement are some number you can give so we’re testing sort featur so let me give SF and 077 test suit 20 then the test case ID that would be mintra sort price which comes under the requirement SF 077 and the test case ID would be test C 1 let me give the this cap test case 01 so yeah just like that I can create multiple test cases 2 three so here we go we’re done with the first traceability Matrix the first element similarly you can write one more for low to high as well I’m not going to write it it’s the same so this is how you write a traceability matrix for the release one so let’s say you have performed testing by considering the filter option which is high to low and the testing work properly without any errors and these are the test cases which you have checked for high to low and everything is working properly and for now it’s good now we’ll move on and perform testing for another feature let’s say under item actually we did perform for high to low now let’s go for better discount you can see the better discount option here right so I’m going to perform test for that or write a test plan for that so it’s the same thing again so testing release this is example as well it’s the same so I’m trying to still check the functionality of the feature so my objective is same and what is the feature that I’m trying to check on sort feature it again it’s the same and what is the thing I’m trying to check on it’s not price now it’s discount better discount and you do not have any multiple options here so it’s just better discount so there we go again we have test cases multiple test cases under that and multiple test shes under that so let’s write a traceability Matrix for that as well SF 076 and test suit 32 that would be sort discount and the test a requirement ID which is SF 076 in this case and then comes the test case ID 01 just like that but here I have four test cases so that’s how you write your traceability Matrix till now you still dealing with the normal testing process let’s move on to regression testing now what happens is when I tried to test on this feature it’s working properly then when I tried discount option it’s working properly but after I added this discount option when I tried to check for price again I want the Sorting being done from high to low but based on discounts then this option which is high to low is not working properly so again here I have a testing release which is still due I’m just going to drag it from here let me increase the size of this I’m still in two it’s just that after introducing the new feature or the new functionality the previous functionality stopped working or have got an error so it’s still example for what is regression testing what are we trying to do here trying to check the functionality but we performing regression testing so that’s our objective so what’s the feature that’s sought again we’re still checking out the S feature what is the thing that it’s not working price high to low and low to high so I’m sure you understanding right this is my only feature which was there in the S consider I tested it it’s working properly this also is working properly the second one which is based on discount but I’m trying to when combine this and see how the high to low is working based on the discount the high to low thing is not working that’s when I want to perform regression testing and check out what the test cases which are not working and what are the bucks so that’s how how I perform for that I’ll be writing another traceability Matrix this would be for the release 2 this is again for the release 2 itself but for the regression testing here we go the first thing that happened was the defect that we found so the first option would be or the parameter would be defect ID and let’s say the defect was some number 245e so what was the test case on which the E defect occurred that was menra s discount so performing the test suit give it a number let’s say test suit 34 so the requirement ID next mintra sort when we try to combine the price and discount we got that eror so that’s it minra sort price discount and the requirement ID something we should give right let’s say sf0 or 98 so then comes the test item or the feature now you might be a little confused because the format which I’ve used in the first and the one which I’ve used now is totally different and it seems a little weird let me go through it again so here you have something called regression test cases and regulation test suit so basically Guys these Matrix we call it a bidirectional traceability matrix so the first one let me just go through it again the

first one we have your item on which we’re sorting the requirement ID the test suit which the test case belong to and these are the test cases which come in the test test suit now what we did is We performed testing for both the features and when we Tred to check if combining these features or the functionality of high to low is working after the discount feature is added it’s not working we getting an error or a defect and that effect as a ID that defect ID we representing here so but when did we get that here so what is the test case that we did test for here when we tried to sort first based on the dries and then apply the discount the thing is not working so that’s the test case ID and which test case does this test case ID belong to this particular test suit and what is the requirement of this particular test case sort based on price and then on discount and this is the requirement ID so what is the item or the basically the feature or the object that we’re checking here on sort so from the defect we’re tracing back and coming back to a feature which we’re testing on you got my point right here we started with our feature or item and then we traced back to test case but here we started with the defect and then we came back to a feature so defect which is the test case ID that we’re checking on the suit which test case belongs to and what is the requirement of the test case and then the item on which it’s being tested so this is bir directional traceability Matrix well this is just a small part of you can say millionth small part of what you can perform in testing it’s a very simple example like that you can perform multiple traceability matrices multiple releases and in One release only multiple test so basically what I’m trying to say here is that this point this item is dependent on other features like the discount option is dependent on high to low and low to high so whenever you trying to make any changes to Discount option your high to low or low to high options are not working or either they’re working or not working from that you can tell these two things or the two items are related to each other or dependent on each other for that you have or you can add another parameter called dependent features so what are the features which are dependent on our discount it’s price high to low similarly mintra sort price and what are the test cases which are dependent on this defect ID the test case that also you can represent here maybe this test case is not dependent on it and this test case is dependent so what you can do is I’m going to copy it and paste it here so this is the one test case which is dependent on the discount thing so that’s how you write to traceability Matrix I hope the thing is clear for you guys so we just started with the basing testing as in one feature everything work well we have certain test cases under test suit and proper then you have another feature which is better discount based on that you perform test it’s working well now you try to arrange everything from high to low and then apply discount then you’re getting in defect based on that defect we created a traceability matrix we traced it back to our feature which is sort and the sort feature is our other features are dependent are interrelated to each other so that’s how they’re affecting each other so for that we need to perform testing from the beginning again check out what are the errors and find out the defects and fix them so that’s what regression testing is all about guys so any changes that um added or made it could be adding new feature updating the existing feature you should check if it’s affecting the already existing functionality of your application or software that’s what regression testing is all about so that’s all with the demo let’s move on to the next part so regression testing is easy to Define and understand but baffling when it comes to performing regression testing of a software product one reason is the dynamic nature of software product it keeps changing you need to understand the challenges well before you can craft a strategy for these challenges so let’s have a look at common challenges of regression testing so the first thing regression testing is often considered as a drain of resources and Man part to test again and again something which has already been developed tested and deployed at early stages so when testers are told to perform regression testing they’re tempted to perform exhaustive testing of the software product quality assurance manager needs to make sure or he needs to devise an intelligent methodology for regression testing to Ure that every he required test case has been executed within the limited span of time and the amount of money that he is assigned with so basically the first challenge that you’ll encounter is its time consuming and expensive so as a QA analyst or manager you need to devise an intelligent methodology for regression testing next is it’s complex and challenging as new features and changes are implemented in software product more test cases are added to regression test suit as the product functionalities expand testers are overwhelmed by the regression test cases and they fall victim to lose track of test cases and when they lose track of the test cases they Overlook the important test cases as well right so regression testing is a complex process this can be prevented by regularly monitoring the regression test suit and deleting the obsolete test cases it is also important to avoid any duplication of test cases as they lack to unnecessary effort and frustration for testers lastly it’s the communicating business value in regression testing is usually tough regression testing as you know ensures existing product featur are still in working order communicating the value of regression testing to non-technical leaders of your company within your business can be a difficult task executors most of the time want to see the product move forward making a considerable investment in regression testing to ensure existing functionality is working can be a hard task so these are certain challenges that you’ll come across when you’re performing regression testing so regardless of the method of implementation that we discussed earlier that is retest all select and prioritization there are hand handful of General best practices that you can follow while implementing regression testing that way you can overcome the challenges which we discussed earlier so the first thing is you need to maintain a schedule choose a schedule of testing you can maintain throughout the software development life cycle so testing is never placed on back burner secondly use a test management tool in order to properly keep track of all the tests that are being performed on a regular basis and have the records of their performance over time it’s better to use a simple kind of test management tool that does all the task for you instead of you spending long amount of time and efforts on keeping track of all these test cases you can break down and categorize your test tests are often considered to be easy to understand and evaluate if they’re broken down into smaller pieces it’s not just with testing anyway right if the thing is huge and complex it’s difficult to understand but if it’s broken down into pieces and then you try to understand it’s easy so try to refactor your test cases as often as necessary then categorize them such that the categories of smaller test can be prior ized over the others so this makes sorting and execution much easier in future for you you can also consider customer risk not also you must and should consider customer risk basically the product is made for customer right so When developing and prioritizing regression test keep track about considering the effects the test cases will have on the customer or the business as a whole so try to design such test cases that they cover as many test cases as possible and lastly evaluate test prioritization so when using any any form of prioritization to order your regression test try to find a sensible way to order them such way you know what you’re actually doing don’t mess it up so well these are certain things that you can follow to achieve better regression testing results so failure to perform effective regression testing can cause a lot of needless suffering it might happen that everything required in the new Sprint is working fine but the previously implemented features and functionalities got messed up if this happens the client would not appreciate you for the new functionality he would become angry irritated and can be real trouble to handle so guys regression testing is really important testing is broadly classified as manual testing and automated testing so manual testing it’s pretty self-explanatory right testing of a web application is done manually by Human Action that’s what we call manual testing this means that someone actually goes on a device to valuate new numerous components including design functionality and performance of software so they click through multiple elements or units of web application without any support from Tool or script thorough testing is crucial to the success of a software product if your software doesn’t work properly chances are strong that most people won’t buy it or even use it at least not for long even if they buy it but testing to find defects or some sort of bucks is very timec consuming expensive often repetitive and sub objective to human error if you’re using manual testing so this is where automation testing comes into picture automation testing well it’s automated the buzzword automation focuses on replacing manual human activity with systems or devices that enhance efficiency of software test automation or usually referred as automation testing uses different kind of tools scripts and software to perform test cases by repeating predefined actions so by automating your software testing activities you will definitely get a comparative Edge in the market so let me give you some examples Amazon is testing delivery drones that pick up Warehouse orders sorted by robots Google is testing self-driving cars Starbucks is testing cashier free stores dedicated to mobile ordering and payment Facebook is testing a brain computer interface that may one day translate thoughts into digital text fascinating right there are mundane versions of AO aut technology behind all this testing software automation testing companies use automation technology to create the software responsible for the products and services causing all this hype about automation testing when you actually begin testing one of the primary decisions that you’ll have to make is if to choose manual testing or automated testing while neither of these options are technically better or worse when compared to each other factors like size budget time allowance of the project will certainly be Factor factors that affect which method will work best in the situation so you should be aware of distinct differences between manual testing and automated testing so here we go the first difference obviously the definition which we discussed earlier in manual testing test cases are executed by human tester and software whereas automation testing uses different kind of automation tools and scripts to execute test cases so let’s get started with other factors the first is reliability for a testing phase where duration is very long there are high chances of an undetected error when testing is performed manually every time a small defect is fixed the entire application needs to be tested to ensure that any other breakage is not occurring well the process is tiring and boring so testers often miss out critical defects while performing repeated testing it’s a common human behavior right therefore the accuracy and reliability of manual testing is very low automated testing on other hand is more Reliable Tools or the scripts that you use form the automated test if the script is properly written there is no chance of missing a defect when the test is executed over and over again and obviously it’s not boring as well for the machine right when it comes to reliability automated testing is highly reliable then comes the time required to perform the testing manual testing is obviously time consuming it takes up Human Resources but when it comes to automated testing it’s executed by software tools and different kind of scripts so it is significantly faster when compared to manual testing next we have when to use which kind of testing manual testing is suitable when the test cases are run once or twice therefore there’s no frequent repetition of test cases in manual testing so to name manual testing is suitable for exploratory or usability and ad hoc testing automated testing is suitable when the test cases need to be run repeatedly for a long duration of time automation testing is suited for regression testing performance testing low testing or highly repeatable functional test cases and next we have performance and batch testing which is not possible in manual testing you can batch multiple test scripts in automated testing performance tests like load testing stress testing spike testing Etc have to be tested by an automation tool compulsorily in software testing process then we have investment cost the cost of manual testing is usually dependent upon the human resourc deployed in the testing during the initial stages of testing the initial investment in manual testing is comparatively lower but the written of investment is very low when compared to automation testing when I say return of investment I mean the money that you own as a revenue at the end of the software testing or after selling the product is actually low when compared to automation testing in long run that is but the cost of automated testing is dependent upon testing tools deployed for performing the test but the initial investment in automation testing is usually higher though the WR of investment is better in long run so when it comes to investment cause initial investment manual testing is much preferable but if you want to perform testing for longer run then automation testing is much preferable as the last criteria we have human element manual testing allows human observation right so you’re getting exact kind of feedback a person would give you and that can be invaluable being able to predict what your users will or won’t like thinks that a computer can’t give feedback on ahead of time can influence your design and make it much better from the bottom up it improves the customer experience but when it comes to automated testing as there is no human observation involved there is no guarantee of positive customer experience so when it comes to human element manual testing is much better because you get to have a experience since the humans are the ones who are checking the software so Guys these are some differences that you should be aware of between manual testing and automation testing so to summarize what you’ve learned till now automation testing is lot of advantages over manual testing first of all it saves a lot of time and money it improves test accuracy it increases the test coverage as in you can perform test repetitively on different kind of devices complex tests and boring tasks are made very easy and comfortable it increases efficiency and team morale you no longer have to do the boring and repetitive task there’ll be no human errors obviously it reduces maintenance cost of testing it increases speed of executing tests and many more advantages so in short while manual testing is effective in projects with multiple operating environments and Hardware configurations automation testing is absolutely essential today to successfully deliver large scale products that need execution of repetitive and complex test cases but it’s impossible to automate all testing so it is important to determine what test cases should be automated first so guys let’s go ahead and take a look at use cases where automation testing have to be applied because like I said you can’t apply automation everywhere first of all as you guys know repetitive task of primary candidates for automation take an e-commerce site for an example it may be testing entering in user credentials multiple times consider the task that you hate doing not only are the stars boring to you but they’re often the ones where mistakes are made very commonly so automate them and do something more fun next capturing and sharing results is obviously a critical part to a successful test strategy rather than manually exporting your data crunching the numbers and making Petty graphs invest in a tool or automation strategy that will do this for you thereby you can save time and a lot of effort on your part and obviously test that require multiple data set sets rather than manually typing in information into forms or Fields automate this process to read an information from a data source and automatically type into the respective forms this way you’ll have better handle on your data variability and it also decreases the chances of making mistakes repetitively again and suppose if you’re waiting for an onscreen response it can be automated so you do not have to waste time staring at a screen and watching for a response right you have other better things to do put that time to better use and use automated controls like wait until in your program code then you have non-functional testing a good example of automating non-functional testing types is automating load testing think about having to see if your application can handle a load of 10,000 users automate this testing so you do not have to worry about manually spinning up 10,000 users hitting your application all at once test that run on several different Hardware or software platforms and configurations so as the number of device users interact with increases automating your setup or tearing down your setup environment will continue to be critical additionally these are scripts that you will use over and over again in multiple testing Frameworks right it’s better to automate than to do them manually so basically the cas is where you have to automate is when you have repetitive and boring task or if you have to capture some results and share the results or if you have to repetitively enter the data task as in data entry task or some sort of timing or screening responsiveness and especially in load testing or and suppose if you want to set up or tail down your environment setup then you can use automation so guys it’s always better to know when to use or when to apply Automation and software testing so guys success in test automation process requires careful planning and design work start out by creating an automative plan this allows you to identify the initial set of test twit to automate and serve as a guide for future test as well there are a lot of helpful tools to write automation script before using those tools it’s better to identify the process which can be used to automate the testing or the procedure that you have to follow to start automation so as next part of session we’ll discuss the steps that you need to follow when you’re performing automation testing so like I said earlier success in test automation requires care for planning and design work so start out by creating an automation plan first of all you should Define your goal for automated testing and determine which type of test to automate once you’re sure of what kind of test are you performing you need to select the tool so the first step here is test tool selection there are several kinds of testing tools available however choosing the right tool keeping in mind the nature of test involed is very important for your automation to be successful so whether it’s a code driven testing process or graphical user interface based testing you must sell the appropriate tool to automate the testing so the first step is selecting the proper tool required for automation of your application or testing next comes defining scope of automation as in you need to select which test cases to automate here you can follow certain pointers like the features that are important for business scenarios which have large amount of data or those which has common functionalities across different platforms and applications technical feasibility the extent to which business components areused the complexity of test cases Etc so by keeping these pointers in mind you can Define the scope of Automation and the third step is planning design and development after determining your goal and which type of test to automate you should decide what actions your automated test will perform planning design and development develop test cases don’t just create test steps that test various aspects of application Behavior at one time it becomes overwhelming large complex automated test are difficult to edit and debug as well so it’ll be a problem for you later on so it is best to divide your test into several logical smaller tests so once you’ve developed your test cases or you have written your test scripts next step is to develop test suits test suits are developed to ensure that the automated test which you have written run one after the other without any manual intervention this is done by creating a test suit that has multiple test cases a library and command line tool that runs the best suit so guys the next step is test execution once you’re done with writing your scripts and placing them in suitable test suits the next step is to start executing them automation scripts are executed during this test execution phase so execution can be performed using automation tool directly or through the test management tool which will invoke the automation tool which you have chosen to get the most out of your automated testing testing should be started as early as possible and as often as needed as well the earlier testers get involved in the life cycle of the project the better and more you test the more bucks you can find right so yeah your scripts are executed in this phase once executed The Next Step obviously is to create report formats so that individual test Logs with details of action performed during test are recorded properly for references so you define the type of test report format to be created screenshots messages Etc so all such things you include in your report as new functionalities are added to system under test with success Cycles automation scripts need to be added reviewed and maintained for each release cycle right so maintenance becomes necessary to improve the effectiveness of automation scripts so what I mean here is that you do not entirely finish a product and start testing suppose if you have found some bug you add additional features and again start your testing from the beginning so maintenance plays a very important role and it becomes necessary step to improve the effectiveness of your automation scripts so you need to follow these steps steps when performing automation testing to get the best results and efficient results next comes the automation tools there are several Innovative automation testing tools but before we discuss that we need to understand there are different kind of approaches to automation the first one is we have code driven approach this approach uses testing Frameworks like xunit framework Etc the focus here is mainly on test gate execution to find out if various sections of code are performing as per our expectations under different condition or not so code driven testing approach is a popular method used in agile software development then we have graphical user interface applications that have guis or graphical user interface may be tested using this approach it allows the testers to record user actions and analyze them any number of times so this is one way of going at automation for example if you want to test a website you can use automated testing tools like selenium that provides a record and Playback tool for authoring tests with without any knowledge on test scripting language so you do not basically have to know the scripting language here you do have record and Playback tool using which you can start executing your test test cases can be written in any number of programming languages like cop you have Java Pearl python Ruby and many other options so the next approach is using automation framework so basically a test automation framework is set of guidelines which are used to produce beneficial results of automation testing activity this framework brings together fun function libraries test data sources object details and other usable modules it lays down the general rules of Automation and it simplifies the effort required to bring the efficient results and lower your maintenance cost as well so basically you can say you’re setting down a set of rules that you need to follow while performing your automation testing let’s consider example suppose if there is any change in a test case then only that particular test case File needs to be updated without having to make any change to the driver or the startup script so now you have multiple approaches when it comes to Frameworks Frameworks could be linear scripting framework recording and replaying test scripts in sequential or you can say a linear fashion you have data driven framework a constant source of test criteria specifies the test scripts which you have to run here then you have keyword driven framework here the tables on a spreadsheet actually specify the action of our test scripts that need to be performed based on the library of functions for an assigned keyword then you have modular testing framework modules of an application under test are divided and then tested with individual test scripts and then they can be combined for larger test scripts then you have IB testing framework obviously it’s a combination of Frameworks to leverage the strengths of each of the ones which we discussed earlier when you’ve decided to perform automation testing you can opt for any of these approaches you can go for code driven testing you can also go for graphical user interface if you’re testing graphical user interface then you can go for framework approach and you have multiple framework options here as well like linear which performs testing in a linear fashion then you have data driven keyword driven modular testing and hybrid testing which is a combinations of all the other framework types so yeah guys basically there are ways you can Implement automation while software testing so now moving on to test automation tools selecting an automated testing tool is essential for test automation well there are lot of automated testing Tools in market and it is important to choose the automated testing tool that best suits your requirement so basically when you’re trying to test or select an automation tool please do follow the key points which I’ll mention now first of all check if the tool is compatible with platforms and the different kind of technology that you’re using ask yourself do you need support for mobile automation testing or different other kinds of testing are you testing net cop or other applications if yes and then on what operating systems so next flexibility of the testers also plays a very important role that is what kind of skills your tester have also plays a very important role for example can your QA Department write automated test scripts or is there a need for keyword testing thirdly does the automated testing tool support record and Playback test creation as well as manual creation of automated tests so basically you need to consider these sort of questions or situations before you go ahead and select the tool you can also look if the tool includes features for implementing checkpoints to verify values databases or key functionality of your application you need to create automated tests that are reusable maintainable resistant to changes in the application UI right so ask yourself will my automated test break if my UI changes so based on that choose a tool make sure that the application is stable enough to automate the early development cycle unless or otherwise it is a agile environment it not be a good idea and finally the cost and the effort that you need to put in is also a very valuable concept that you should consider when you’re choosing an automation tool for your testing well these are certain categories or scenarios or key points that you should take care of when you’re actually choosing an automation tool now to name few popular automation testing tools we have selenium selenium is a popular testing framework to perform web application testing across multiple browsers and platforms like Windows Mac Linux then we have water w a TI basically it’s pronounced as water is an open-source testing tool made up of Ruby libraries to automate web application testing then you have something called ranorex it is in flexible all-in-one gii testing tool so using ranorex you can execute automated test flawlessly throughout all environments and browsers and devices then you have APM it’s a mobile testing tool it is an open-source mobile test automation software obviously it’s free and supported by a high active community of developers and experts so apart from this you also have Zyer tosa for N2 testing than HP or unified functional testing which was formerly known as HP Quick Test professional or qtp and I can just keep going there are plenty of automation testing tools so tool selection is one of the biggest challenges that need to be tackled before you actually start with your automation so first identify the requirements explore various tools get to know them and their capabilities set the expectations from the tool and go for a proof of concept so that’s how you choose a tool of your choice so guys in some situations automation testing is very important but as much it is comfortable that much it is risky too so if you decide to do automation testing then think of following scenarios first starting cost for an automation is very high automation tool purchasing cost training and maintenance of test script all these costs are very high because of this reason some companies are worried to take decision to automate their work secondly automation is not 100% automation testing cannot be 100% and don’t think of that there are areas like user interface documentation installation compatibility and Recovery where testing should be done manually you can’t do all this using tools you need to have a person involved in this and another risk that you might encounter is when you have unrealistic expectations from the automation testing tool so like I said earlier know the requirement study different kind of tools get to know their capabilities and choose the tool and then comes the incompatibility of automation testing tools with the test environment and other software testing Tools in test environment then you have vendor issues like inability to provide technical support inability to update the automation testing tools with changes in software testing platform and all that and one more point do not automate unfixed user interface be careful before automating user interface if user interface is changing always cost associated with script maintenance will be very high so basic user interface automation is is enough in such cases by mentioning all these points what I wanted to tell you is automation is not possible every time and these are some cases where you might have to start looking twice before you actually Implement automation here so guys there’s no Silver Bullet for testing during the development process despite the wide variety of techniques and tools we cannot rely on a single approach automated and manual testing each have their strength and weaknesses what we want to stress here is that no matter how great autom tests are you cannot automate everything manual tests play important role in software development as well and they come handy when you cannot automate the process so guys we have reached the end of the session and by now I’m sure you know what automation testing is and benefits of using automation testing when to uses and which test cases need to be automated and how different it is from manual testing so make sure to consider all these points when you go ahead with automation next time now performance testing is basically defined as a type of software testing to ensure software applications will perform well under their expected workload Now features and functionality supported by a software system is not the only concern a software application’s performance like its response time reliability resource usage and scalability do matter now the goal of performance testing is not to find bugs but to eliminate performance bottlenecks now performance testing is done to provide stakeholders with information about the application regarding speed stability and scalability now more importantly performance testing uncovers what needs to be improved before the product goes to the market without performance testing software is likely to suffer from issues such as running slow while several users use it simultaneously now the main focus of performance testing is checking a software programs speed so basically it determines whether the application responds quickly then the scalability it determines maximum user load the software application can handle then we have the stability now this determines if the application is stable under varying loads so performance testing will basically determine whether their software meets speed scalability and stability requirements under expected workloads applications sent to Market with poor performance metric tricks due to non-existence or poor performance testing are likely to gain a bad reputation and fail to meet expected sales goals now let’s move on and have a look at the different advantages of performance testing so the first one is validate the fundamental features of the software now having a solid software Foundation is a key principle of generating software success measuring performance of basic software functions allows Business Leaders to make key decisions around the setup of the software now Apple and Samsung are two great examples of nailing the fundamentals of their software with a strong software Foundation they have been able to plan their business strategy and make key decisions about how their devices will operate next up we have measure the speed accuracy and stability of software now measuring performance speed accuracy and stability is a vital aspect of software performance testing it allows you to monitor The crucial component of your software under durus and can give you Vital Information on how the software will be able to handle scalability next performance testing allows you to keep your users happy now your first impression to prospective customers is absolutely crucial research has shown that nearly half of users expect web and mobile based applications to load within 2 seconds now this is a small time frame to make a good impression before users will switch off that time is likely to decrease further as connection speed and network capacity increases now measuring application performance allows you to observe how your customers are responding to your software the advantage is that you can pinpoint critical issues before your customers the next Advantage is it identifies discrepancies and resolves issues so measuring performance provides a buffer for developers before release any issues are likely to be magnified once they are released now performance testing allows any issues to be ironed out it is important that performance testing is monitored across business sectors now Business Leaders must have open communication Channels with it to ensure that the performance of the software can match the business strategy now the final Advantage is improve optimization and load capability now another benefit of performance testing is the ability to improve optimization and load capacity measuring performance can help your organization deal with volume so your software can cope when you hit high levels of users so whether your organization can manage scalability is one of the most important unknowns that must be answered as early as possible now the benefits of performance testing your software are far reaching for your organization measuring performance can help you understand the speed stability and accuracy of your software now let’s have a look at the different types of performance testing so first we have the load testing now this testing checks the applications ability to perform under anticipated user loads the objective is to identify performance bottlenecks before the software application goes live then we have the endurance testing now this is done to make sure that the software can handle the expected load over a long period of time next up is the volume testing now under volume testing large number of data is populated in a database and the overall software systems behavior is monitored the objective is to check software applications performance under varying database volumes next is the scalability testing now the objective of scalability testing is to determine the software application Effectiveness in scaling up to support and increase in user load so it basically helps plan capacity addition to your Software System then we have the spike testing now this tests the software’s reaction to sudden large spikes in the load generated by users and finally we have the stress testing now this involves testing an application under extreme workloads to see how it handles high traffic or data processing the objective is to identify the breaking point of an application now there are various performance testing tools available in the market some of the top most performance testing tools include the Apache J meter load view load Runner Web load neoload the grinder load ninja Blaze meter load complete and a lot more now there is no best tool in the market you need to find the best tool for your performance project goals so don’t SLO to choose the right tool get smart and consider factors like your desired protocol support license cost customer or client preference of flow tool cost involved Hardware or software requirements and Tool vendor support in order to decide on your performance testing tool so let’s have a look at the top 10 performance testing tools first we have load ninja now load ninja by smartbear allows you to quickly create scriptless sophisticated load tests reduce testing Time by 50% replace load emulators with Ral browsers and get actionable browser based metrics all at ninj speed now you can easily capture client side interactions debug in real time and identify performance problems immediately Lo ninja empowers teams to increase inre their test coverage without sacrificing quality by removing the tedious efforts of dynamic correlation script translation and script scrubbing with load ninja Engineers testers and product teams that can focus more on building apps that scale and less on building load testing scripts now some of the features of load ninja are scriptless load test creation and Playback with insta play recorder real browser load test execution at scale vu debugger debug tests in real time and the Vu inspector manage virtual user activity in real time it’s hosted on the cloud so no Sero machine and upkeep is required there’s sophisticated browser based metrics with analytics and Reporting features also some of the protocols include the HTTP https the sap GUI web websocket Java based protocol the Google web toolkit and the Oracle forms now next up we have the Apache jmeter now jmeter is an open-source tool that can be used for performance and load testing for analyzing and measuring the performance of a variety of services now this tool is mainly used for web and web service applications so let’s have a look at some of the features of Apache jmeter now this tool doesn’t demand state-of-the-art infrastructure for load testing and supports multiple load injectors managed by a single controller it’s highly portable and supports 100% all the Java based apps there’s less crypting efforts as compared to other tools because of its userfriendly GUI here simple charts and graphs are sufficient for analyzing key load related statistics and resource usage monitors it also supports integrated realtime Tomcat collectors for monitoring some of the protocols include the HTTP https web services such as XML s soap ET Etc Java based protocols FTP on third we have the web load now web load is an Enterprise scale load testing tool which features a comprehensive IDE load generation console and a sophisticated analytics dashboard the web load has built in flexibility allowing the QA and devops team to create complex load testing scenarios thanks to Native javascripting it supports hundreds of Technologies from web protocols to Enterprise applications to to network and server Technologies some of the features of web load are flexible test scenario creation it supports every major web technology there’s powerful correlation engine automatic bottleneck detection generate load on premise or in the cloud native JavaScript scripting and there are many more such as the UI visards to enhance the script supports many Technologies and also easy to reach customer support and some of the protocols are the HTTP HTT GPS XML Enterprise applications Network Technology and server Technologies next up we have the load UI Pro now load UI Pro by smartbear allows you to quickly create scriptless sophisticated load tests distribute them on cloud using load agents and monitor performance of your servers as you increase load on them now you can access detailed reports and quickly automate your load tests on genkins bamboo TFS and other automation Frameworks now if you’re using soap UI already you can convert the test cases into load tests with just three clicks all without writing a single line of script some of the features include scriptless load test creation preconfigured load test templates like Spike Baseline stress smoke drag and drop load tests on distribution agents on cloud there’s sophisticated analytics and Status features for reporting quick conversion of fun functional tests from soap UI as load tests and some of the protocols supported are the HTTP rest soap Json JMS Swagger RL IOD dos there’s API blueprint Json schema XML schema mqtt and many more now next up is the load view now with load view by Doom monitor you can show actual performance of your applications under load just as your users experience it now load view utilizes real browser based load testing for websites web applications and apis it easily creates multi-step scripts that simulate users interacting with your website or application using the everystep web recorder or even manually edit the script using your own C code now some of the features are the cloud-based load testing in real browsers it quickly and easily builds test scripts without touching a line of code the test compatibility on 40 plus desktop or mobile browsers and devices also 13 plus worldwide Cloud locations using Amazon web services and Google Cloud platform it also identifies bottlenecks and ensures scalability performance metrics and reports that can be shared with various internal stakeholders for capacity planning now some of the protocols include the flash silver light Java HTML 5 PHP Ruby and many more now on number six we have the neoload now neoload is an Innovative performance testing platform designed to automate test design maintenance and Analysis for agile and devop steams neoload integrates with continuous delivery pipelines to support performance testing across the life cycle from component to the full systemwide load tests some of the features include the automated test design enabling 10 times faster test creation and update than traditional Solutions integration with CI servers for autom test runtime collaboration that is shared test scripts and reports at real time and after test completion through an on premise web interface also hybrid on premise and Cloud load generation from over 70 Global localizations the protocols supported are the HTTP https s soap rest Flex push and Ajax push next up we have the load Runner now this is an Enterprise performing testing version of load Runner and a platform enabled both Global standardization and formation performance Coe so it is basically a software testing tool from micr Focus which is used to test applications measuring system behavior and performance under load some of the features include it lowers the cost of distributed load testing scale from single projects to a full scale testing center of excellence that consolidates Hardware standardizes best practices and leverages Global testing resources it Al reduces the risk of deploying systems that do not meet performance requirements through the use of effective Enterprise load testing it also lowers hardware and software costs by accurately predicting system capacity it pinpoints the root cause of application performance problems quickly and accurately effective tool utilization tracking is also available now the browser based access to global test resources and optimal usage of load generator Farm is also present now in this case all Protocols are supported by the load Runner this is just another added advantage of this tool next up we have the silk performer now silk performer tool is an Enterprise class load and stress testing tool and has the ability to test multiple application environments with the thousands of concurrent users it also supports the widest range of protocols now there are good features in silk performer such as it requires minimum Hardware resources for virtual user simulation it simulates modifiable virtual users supports integrated server monitoring and customer friendly licensing the correlation and parameterization is also userfriendly there’s no license requirement for controllers or individual protocols it also handles low test and project approach not just that it also generates reports with tables and graphs supports six models of workloads provides agent Health control service Diagnostics and many more the protocols supported by this include the HTTP HTML https flash email FTP TCP IP ldap XML s soapnet and many more now on number nine we have the app loader tool Now app loader is a load testing solution designed for business applications it allows you to test any application by reproducing the same user experience from all your access points Thin fat clients and web portals now some of the features of apploader are it allows you to test the entire business flow including all third-party apps without adding plugins or writing a single line of code now the app loader replicates the users interactions with your application and gives you valuable metrics about the end users’s experience including screenshots of failures now scripts are created automatically when you use your application and can be easily edited without coding they can then be seamlessly applied to regression testing and application monitoring modules available now let’s have a look at the protocols Now app loader is compatible with all versions of Citrix Zen apppp and Zen desktop cloud based in hybrid infrastructures EHR systems as well as custom applications now last but not the least on number 10 we have the smartmeter.io now smartmeter.io is an alternative to meter and aims to fix its drawbacks it allows for easy scriptless test scenario creation using the so-called recorder yet lets you make advanced edits of the test it also excels in test reporting and makes use of functions such as automatic test criteria evaluation test runs comparison and Trend analysis it fully supports Ci or CD integration it is also available for Windows Mac OS and Linux now some of the features include scriptless test scenario creation comprehensive reporting with automatic evaluation and test runs comparison GUI test run with realtime results state-of-the-art response body extractor Ci or CD ready now the protocol supported include the HTTP jdbc ldap s soap JMS and FTP so these were some of the performance testing tools that I have listed in my top 10 list list do let me know if you know about any other tool that would serve the purpose now what is a j meter so the Apache J meter is a Java open source software that is used as a load testing tool for analyzing and measuring the performance of a variety of services now usually we tend to follow the trends in testing and forget to pay importance to verifying whether the product meets expected or required performance now unfortunately we figure out this Pitfall Post delivery of the product nowadays performance is an inevitable Factor especially for web and mobile applications as the user strength is very huge for each application even if it is not to be expected all the time now in order to cope up with such situations of load we need a handy tool and that’s exactly where the Apache J meter comes into play now before we get to know more about the J meter tool we first need to understand what is performance testing now it is very important to verify whether the product meets expected or required performance now performance testing is defined as a type of software testing to ensure software applications that will perform well under their expected workload now it focuses on certain fact factors of a software program such as the speed scalability and stability now performance testing is checking whether the application under test satisfies required benchmarks on both load and stress now load testing is testing to see whether the system or application under test is able to handle the required number of concurrent user accesses on web server without any failure and the stress testing is testing to see how the web web server copes up with high load and limited resources that is under constrained conditions here we just determine what the maximum load is that the web server can handle now performance testing has much significance in real time particularly from a point of view of customer satisfaction and Roi now we have come across several performance testing Tools in our testing experience and have found HP load Runner open SDA load impact and many more popular ones but J meter is one of the much preferred one among testers worldwide now let’s have a look at the advantages that makes jmeter the most preferable one jmeter is open- source and built in Java platform it is highly extensible and platform independent also it is very user friendly now jmeter has a comprehensive GUI which helps to create test plan and configure the elements now adding elements is easy on J meter just right click on the tree scenario and add what you need to do now the newest version allows user to change look and feel G meter supports scripting but it is not necessary because you can run a complete load test without knowing a bit of code jmeter stores its test plans in XML format it means you can generate a test plan using a text editor next Advantage is the support now basically it is designed for performance testing but also supports other non-functional tests such as stress testing distributed testing web service testing by creating test plans also it provides supports for protocols such as the HTTP jdbc s oap JMS and FTP now jmeter has wide range of users so there is open-source Community there to help others next up is the comprehensive documentation now this is one of the most important things to be highlighted because of its robust documentation user can have a clear idea on each and every step starting from scratch including installation and configuration of the test settings and generating final report the next Advantage is the recording now J meter allows user to record HTTP or https to create test plan using recording facility now we use proxy server that allows J meter to watch and record your actions while while you browse your web application with your normal browser and the final one is reporting now jmeter supports dashboard report generation a host of reports are generated through jmeter which helps the user to understand performance test execution results so now that you know what is J meter and what are the advantages let’s begin with the installation process now before installing jmeter you must ensure that you already have Java installed in your system so in order to check if Java is already there in your system you can just open the command prompt and check for the Java version so here you can see I already have the Java version 10.0.2 installed here so now we are all set to download the jmeter so now in order to install jmeter we go to the official website that is the J meter. apache.org now here you have the binaries so you can download any of of these tgp or zip file from the Apache jmeter website now jmeter is pure Java desktop application and it requires a fully compliant jvm 6 or higher so you first have to check if you have the Java SE development kit installed or not and here you can see that the latest version of jmeter available is the 5.1 so you can download any of these binaries now installation of jmeter is extremely easy and simple so you can can simply unzip the zip or the tower file into the directory where you want the J meter to be installed there is no tedious installation screen to deal with now once the download is complete you can go into your downloads and find that the Apache Jer file is already there and inside bin you will get to see all these files of jmeter now if you are using Windows you just have to run the file the jmeter dobat to start the J meter in the GUI mode so I have already installed the J meter in my system and I’ve also created a shortcut in the desktop so let’s open this and show you how it actually looks now you can see that our Apache G meter is getting started so this is exactly how it looks so this is our final Apache J meter GUI Now using this we can perform the testing for any website or any software program now before starting any performance testing let’s discuss some of the important elements that are present in the J meter now there are four important elements that are the thread group Samplers listeners and configurations now first we create a test plan so it is a container which describes what to and how to test here you can see how it looks like just how I have shown you that how the GUI of the Apache J meter exactly looks like now a complete test plan consists of one or more elements such as the thread groups logic controllers sample generating controllers Etc it describes the behavior of the element now once we configure the element we just save it then we run the test plan and analyze the test result from various graphical formats such as tree table and graph now it is quite difficult for humans to execute performance testing manually so it is inevitable that we depend on a performance testing tool to do the job when we go for simply the best solution in all aspects of software development why not in the matter of performance testing too now jmeter is the final words in this department to be used for ensuring quality deliveries in time so the first element is the thread group now thread groups is a collection of threads each thread represents one user using the application under test basically each thread simulates one real user request to the server and the controls for a thread group allow you to set the number of threads for each group for example if you set the number of threads as 100 jmeter will create and simulate 100 user requests to the server under test the next element is the Samplers now as we know already that J meter supports testing HTTP FTP jdbc and many other protocols we know that thread groups simulate user request request to the server but how does a thread group know which type of request it needs to make the answer is samplers the user request could be FTP request HTTP request jdbc request Etc now for the FTP request let imagine that you want to perform test on the FTP server now you can use an FTP request sampler in jmeter to do this task this controller lets you send an FTP download file or upload file request to an FTP server now the HTTP request lets you send an HTTP or https request to a web server jmeter sends an HTTP request to Google website and retrieve HTML files or image from this website next is the jdbc request now this sampler lets you execute database performance testing it basically sends a jdbc request to a database and then we have the BSF sampler now this sampler allows you to write a sampler using a BSF scripting language the access log sampler allows you to read access logs and generate HTTP requests the log could be image HTML CSS Etc then we have the SMTP sampler now if you want to test a male server you can use the SMTP sampler this sampler is used to send email messages using the SMTP protocol now moving on the next element is the listeners now listeners show the results of the test execution they can show results in a different format such as a tree table graph or log file now the graph result listeners display the server response times on a graph view result three show results of the user request in basic HTML format and the table result shows summary of a test result in table form at and the log shows summary of a test results in the text file now the final important element is the configuration element now it basically sets up default and variables for later use by the Samplers now for the CSV data set config suppose you want to test a website for 100 users signing in with different credentials you do not need to record the script 100 times you can parameterize the script to enter different login credentials this login information could be stored in a text file now jmeter has an element that allows you to read different parameters from that text file it is the CSV data set config which is used to read lines from a file and split them into variables then we have the HTTP cookie manager now HTTP cookie manager has the same feature as a web browser now if you have an HTTP request and the response contains a cookie the cookie manager automatically stores that cookie and will use it for all future requests to that particular website we also have the HTTP request default now this element lets you set default values that your HTTP request controllers use for example you’re sending 100 HTTP requests to the server google.com you would have to manually enter server name equal to google.com for all these 100 requests instead you could add a single HTTP request defaults with the server name or IP field that is equal to google.com then we have the login config element the login config element lets you add or override username and password settings in Samplers for example if you want to simulate one user login to website facebook.com with user and password you can use the login config element to add this user and password setting in a user request so this is all about the different elements of J meter now we will see how all of these elements work actually so all we have to do is run the jmeter dobat and then finally we will get our jmeter tool running here now this is based on a Java application so you need not worry about the operating system because it’ll be working the same in all the operating systems so this is our home window and you can see two sections here the left side frame will consist of all the elements of J meter and the right side of the frame will consist of the configurations that we are going to change so here we can see the configuration of the test plan window now test plan is basically like a container that will contain all your test plans that you’ll need to perform so any kind of graph results Samplers listeners anything will come under the test plan so let’s just give it a name as Eda so here I’ve changed the name and as soon as you click here you can see the name here is also changed to edure Rea now when I right click here and go to add so you can see a lot of elements that we can add here so one of the most important ones is the threads so we have discussed about the thread group so we know that the thread group is basically a collection of threads and each thread represents one user using the application under test so here first we will be adding one thread group now let’s rename this thread group as users so here we have action to be taken after a sampler error so what it basically means is that it’s asking what should the thread do if there’s an error that has occurred while performing the test so here we have options like we can continue with our test or start next thread Loop stop thread or stop the test so here we will be continuing with our test even if there’s an sampler error now thread properties is one of of the most important part here we have number of threads ramper period in seconds and the loop count like if you want to count it forever or for some particular number of Loops so as of now all the values are one so we have one thread one ramper period and one Loop count now let’s go back and add a sampler now so we already know that J meter supports testing HTTP FTP and all that and the sampler is another important element of the J meter so here let’s add another HTTP request so the HTTP request will let you send an HTTP or https request to a web server so we will be running a web application here so I’ll be renaming this one as homepage so here we are giving the server of the website that we are going to perform the testing on so let me take the edura blog website so this is our Eda blog page on which I’m going to perform the testing so let me copy the URL here so in the server name or IP I’m going to paste the URL but you have to remember here we are not going to use the https colon and the forward slash so we would just be using the www. ed. goblog also this last slash also indicates the path so here we won’t be writing this path the path will be specified in this section so here we have used the server name that is the

ua. go/ blog and we have specified our path here so for the root page I’m just giving a forward slash here so now our HTTP request is ready so we are going to perform our testing on this particular page that is our Eda Blog Page and the path is also set now how do we get to know that what is the result of this testing now in order to view the result we have to add a few more testing elements so here we will be adding another element that is the listener and inside listener we have view results tree we have view results in table so we can select any of these as in how we want our result to be viewed so we can view it in a graph in tree or a table so here first I’ll be selecting view results in table so here the result would be shown in the form of a table whenever I perform the testing the result will be up here in the the form of a table so we just have to go inside the listeners because it shows the results of the test execution and add the particular view we want so I have selected view results in table so now once we have done this in order to run this test first we have to save it so I’m saving it in the desktop in the folder named as jmeter and I’m naming it as edura test plan and saving it so you must always save it if you want to reuse your test plan okay so now that it’s all done let’s finally run this and see how the performance testing work so here we’ll be starting our test so you can see that the test is going on here it shows the seconds that are taking so this is the report that has been generated so we have just performed one sample one thread because in our thread group section we have given just one thread one ramper period and one Loop count so here you can see the result so we have one sample you can see the start time at what time we have started the test and then we have users 101 that is the thread name because we have just one thread and one user and we have our label as homepage because we have named it as homepage and it shows the sample time that has been taken so we have a sample time in milliseconds that is 4467 you can also see the status as green which means it’s performing well and then here we have a bytes sent bytes latency and the connection time so you can see the connection time that is the server request took 398 milliseconds so now this was just a very basic test that we have performed we have just taken one thread and we have shown the result in the form of a table so now let’s see what else we can do using our jmeter so now let’s go back to the users and let’s increase the number of threads and see how it changes our values so here I’ll be using number of threads as five let’s increase our Loop count as well let the loop count be three here so now we have five threads that is five users and one ramper period and loop count as three now let’s go back to our homepage and we have the same website in our server and the path is also specified now let’s go back here and before that if you want to clear your previous results then all you can do is just clear the history and see it’s gone so now again first let’s just save it and see what happens now that we have increased the number of threads and users so let’s run this so now you can see that we have five threads and three Loops so you can see that we have used a one of one one of two one of three one of four and one of five so what happens basically here is we have five users that is five threads and we have our Loop count as three so all the five threads will be inside the loop count three so you can see all of these have been executed three times all the five threads so here also you can see the status is green it’s performing well the testing is all fine and we have the status as green and we have our bytes sent bytes the latency and the connection time as well so now let’s see how we can view our results in some other view so let’s go to add and listener and inside this we also have view results Tre and we also have graph so let’s go for view results Tre and run the test again because we have the same values and let’s see how it works in the tree so here you can see that in just a tree format it shows you that our homepage status has been performed these many times and it’s performing well because the status here is green now let’s check out how a graph will work so for this we have to select the graph results so you can see that here we have graphs to display as our data will be shown the average median deviation and the throughput so now let’s run this and see how it works so you can see that here the number of samples are increasing and our latest sample throughput time everything is increasing and here you can see the graph so we had five threads and we had three Loops so we had total number of s Les as 15 so the graph doesn’t show a huge deviation but in our table we can see a proper result where you can see all the bytes send bytes latency connected time values clearly and also get to know about the status so you can always view your result in a table tree graph or a log format so now you have already learned about the thread group The listeners the Samplers let’s see how the configuration element works so this is how basically a j meter works now you know all the important elements that you can use inside the J meter that is you have the thread group first you have the test plan where you get to configure your elements then inside that you have your thread group listeners Samplers and how you want to view your result you can view it in t table tree graph or in the form of a log now you know what is a thread group and how you can change change the number of threads and the loop counts and how it affects your testing also you can go inside that and create your HTTP request and also view your result in the way you want it to so now this was just the beginning and this was the very basic of how you can perform your test plan but these are the most important things that you need to keep in mind before performing any testing on any web page or any website so I hope now you have understood how it actually works so from the installation process to find performing your first test plan this is how jmeter will help you what is junit junit is an open-source unit testing framework for Java it is important in development of test driven Frameworks and is also considered as an instance of xunit architecture as the name suggests it is used for testing a small chunk of code or a unit now you might ask a question what is junit junit is used to verify a small chunk of Code by creating a path function or a method the term unit existed even before the objectoriented era was created it is basically a natural abstraction of an object oriented system that is the Java class or object J unit basically promotes the idea of test first quote later so this is about G junit now let’s take a quick look at the advantages of junit junit is one of the best testing Frameworks that can be selected for an efficient testing process more application developer ideas include junit it also provides an awt and swing based graphical test reporting mechanism it also provides a text based command line the open-source Community has extended junit by implementing a junit Enterprise Edition test framework that enables it to test within the application service container junit is widely adopted by many organizations around the world for performing unit testing in Java programming language junit has also become a benchmark for testing in Java and is supported by almost all the IDS so this is about what is junit and what are its advantages now let’s move ahead and take a look at the features of junit junit tests allows you to write codes faster which increases quality it is elegantly simple as it is less complex and takes less time to test an application it provides annotations to identify the test methods it provides test Runners for running the tests these tests can be run automatically on junit and they will check with their own results and provide immediate feedback the test cases can be run automatically on junit and they check their own results by providing immediate feedback there is really no need to manually comb through a report of the test results okay so this is one of the major features of junit junit tests can also be organized into test tudes containing all the test cases this also helps in showing test progress in a bar that is green if the test is running smoothly and it turns red when the test case fails okay so these are some of the major notable features of junit now let’s move ahead and take a look at the junit framework junit is a regression testing framework which is used to implement unit testing in Java to accelerate programming speed and increase the quality of code this framework also allows quick and easy generation of test data and test cases now let’s discuss the major features of this junit test framework they are namely test test fixtures test suits test Runners and junit classes now let’s get to know them in detail a fixture is a fixed state of a set of objects which is used as a baseline for running the test cases the major purpose of a test fixture is to ensure that there is a well-known and fixed environment in which the tests are run so that the results are repeatable there are basically two methods under this test fixture they are namely setup method and tear down method setup method is run before the test invocation The annotation at before is used in this case and in this case we use The annotation at after let’s understand test fixtures with an example in case you write a code without annotations the code is not readable it is not easy to maintain and when the test suit is complex the code might contain some logical errors so these are the issu ues that you’ll be facing if you don’t use annotations while testing an application but when you compare the same code using junit the code is far more readable and maintainable and the code structure is way too simple and easy to understand okay so this is how test fixtures play a major role in testing an application using junit now let’s move ahead and understand test suits if you want to execute multiple test cases in a specific order it can be done by combining all the test cases in a single origin this origin is called the test suits a test suit bundles a few unit test cases and then runs them together to run the test suit you need to annotate a class using this annotations that is at run with at suit classes or at suit. suit classes okay so these are the annotations that you have to do when you want to test a suit now let’s talk about a test Runner the test Runner is used for executing the test cases junit provides a tool for the execution of the test cases junit core class is used in order to execute the tests another important method called run classes is provided by junit runner. junit core which is used to run one or several test cases the return type of this method is the result object that is used to access information about the test cases you can get this result object in the following link so this is about the test Runner now let’s talk about junit classes junit classes are used to in writing and testing junits some of the important classes are assert test case test result okay now let’s talk about assert it contains a set of assert methods we’ll discuss what are these assert methods in a coming section test case it contains the test case that defines the fixture to run multiple test cases test result it contains methods in order to collect the result of executing a test case Okay so this is everything you need to know about the junit framework now let’s move ahead to our next topic and understand how to set up junit on your system like I mentioned earlier junit framework is used to test Java based application so before installing junit you need to configure and verify Java development kit that is jdk in your system so the first thing you need to do is have the Java libraries in your system if you don’t have the Java libraries follow these steps to complete your Java installation go to the Java downloads page and click on the option for Java platform that is jdk in the next page do select the accept license agreement radio button accept it and click the download link against matching system configuration now to cross check the installation just run the following command in the command prompt it should display the installed version of java in your system as I already have Java installed in my system I’m just going to verify if it exists or not so I’m going to go to command prompt type Java space hyphen version so the version that I have in my system is 1.8 you can also download any version of your your choice the latest version is 12 and this command can vary from One OS to another for Windows we use this command that is Java hyphen version for Linux you use dollar Java hyphen version for Mac you just have to click on till day dollars Java version okay you can run the installer once the download is completed and do follow this correct instructions so first go to system and go to advaned system settings yeah so it pops up environment variables here just click on the environment variables and click on new and add this command so I’ve already added the command here so the specific location of this junit will be stored in my C drive and the variable name that I’m going to provide is juniore home this is a must when you’re working on junit click on okay and do note you need to add the class path accordingly so I’ll again click on new so the variable value will be percentage class path provided by the percentage as well that is a closing thing and junit home and Slash the junit that you’re working on that is version 4 okay and the variable name would be class path click on Okay click on okay and click on okay so this is how you set up junit on your system that is just like how you set up Java on your system for the first time now once you understood how to set up junit on your system we need an IDE in order to perform the actions I’ll be considering working on the eclipse ID because it is userfriendly and all the available jar files can be easily downloaded in eclipse and preferably if you’re working on Java projects I would recommend you to use Eclipse ID if you’re new to junit and you don’t know how to set up eclipse on your system I’ll be putting up link in the description below just click on it and understand how to install eclipse on your system as I already have Eclipse ID here I’m just going to open it yeah so this is the eclipse workspace now in order to work on junit first thing you need is create a new project so I’m going to go to new and go to project and I’m going to name this junit project and click on finish yeah you can see that a folder is being created under which the Java libraries site and a source field where we’ll write our code okay so the next thing you need to do after you create a project is to add the libraries that is junit libraries so I’m going to right click on my project go to build path and go to configure build path here you have to add the external junit jar files that you have to download so I already have the junit jar file so I’m going to just go to add external jars I’m going to search for junit yeah so I’m just going to add this and then I’m going to add a library that is junit library to my program how do you get this thing one way which you can get this is you can go to the eclipse Market space and search for junit you can install an external plugin from there okay click on next and click on finish you can see that junit library is added here so I’m just going to click on apply and close yeah so the junit jar files are added to your system so these are the following steps you need to follow in order to set up junit on your system now that you’ve understood how to set up junit on your system let’s move ahead and learn how to write a simple junit program so in order to write a simple program I’m going to right click on the source field go to new and create a new package I’m going to name this as code or edura and click on finish I’m going to be writing my entire program under this package so I’m going to create a new class in order to write it I’m going to name it as junit class and click on finish yeah you can see that a class of the name provided that is junit class is created here and the first thing I’m going to do after creating the class is ADD The annotation test and then I’m going to be creating a new method here that is public void setup under which I’m going to print a string a string I’m going to be considering as Str Str and I’ll print this is my first gunit program okay and then I’m going to be using the assert method in order to compare if the two sentences are equal or not so assert equals and I’m going to be writing the exact same thing that is this is my first junit program comma specify the string so first I’ll be importing the packages it is okay this assert equals yeah once this is imported I’m just going to run this so I’ll just click on run here and you can verify that junit was set up in 0er seconds okay so this is how you verify if your junit program is successfully installed in your system or your project or not now next up I’ll create another class to execute this test so I’m going to right click on my project and go to new class I’m going to name this as demo class add the main function and finish here I’m going to be writing the corresponding code in order to access the junit class okay so first I’ll create the result and create an object of result that is equal to junit core do run classes where I’ll be storing in the form of a result you can already find it just click on this and the class name is the previous name of the class that is the junit class okay I hope you’re clear with this It’ll ask us to import yeah so you have three options here for import check which one is suitable we’re using junit Runner so I’ll be importing the junit runner packages so here as well let’s see what it throws an error here okay it is asking us to create a new class or interface okay let me see what m take I’ve done here yeah so the name is j unit and I’ve used uppercase for u j unit is case sensitive and class okay and I’m going to be checking for a condition for failure creating an object of the same failure and check the result of get failures okay so it Returns the results in the form of a list okay so I’ll just import this failure packages yeah done and I’m going to be writing the corresponding code inside this so I’m going to consider printing it first system.out.print Len in this I’m going to be printing failure dot two string okay so this basically helps in printing the results which are failed and after this I’m going to print another statement that is system do out. println where I’m going to be writing result is equal to and specify the result location that is result dot was successful okay so this prints the test case which was successful now let’s try running this program save it and run yeah so it prints the result is true now how is the result true it checks for the condition for failure the result is get failures and if this condition satisfies it is going to print the failure string that is the failed string in case if it is true it prints this particular command that is result is equal to so this is how you test an application or test a program using junit now that you’ve learned how to write a simple junit program let’s understand the testng annotations junit framework is built on annotations an annotation is a special form of syntactic metadata that can be added to a Java source code for better code readability these annotations provide the information regarding the methods that are going to be run before and after the test methods the methods that are run before and after all the methods are completed the methods or classes that will be ignored during the test execution okay so these are the following list of annotations that we have that is test before after before class after class and ignore okay now let’s understand them in detail annotations start with the letter at okay so this test annotation tells junit that the public void method can be run as a test case now let’s talk about before this helps in annotating a public void method with annotation before which causes the method to be run before each test method okay so this method is called before you execute any test case what about after if you allocate external resources in a before method you need to release them after the test Rons so one way to do that is annotate the method with at after which causes that method to be run after the execution of the test method talking about before class this method helps in annotating a public static void meain with at before class which causes it to be run once before any of the test methods in the classes are run talking about after class this will perform the method after all the test cases are run this is used to perform cleanup activities as well talking about the ignore annotation this annotation is used to ignore the test that will not be executed this is also used in order to skip the test cases okay so these are the annotations that you need to be perfect when you’re working with junit now let’s move ahead and understand what are the assert statements that are available in junit assert is a method which is used in determining pass or fail status of a test case in junit all the assertion are in the assert class so this class basically provides a set of assertion methods which are useful for writing the test cases do note that only failed assertions are recorded so there are different methods under this assert command we have eight assert statements in total let’s take a look at them one by one the first method is void assert equals which is of the form Boolean expected and Boolean actual so this basically checks if the two Primitives or objects are equal okay next we have void assert true which takes in the condition Boolean true or false so this basically checks whether the condition is true next we have assert false which also takes in the Boolean condition and it checks whether the condition is false next we have assert not null which checks whether an object isn’t null void assert null which checks whether an object is null okay to note that not null is used to check whether an object isn’t null to check whether an object is null you use assert null okay which takes in the object next up we have assert same which Compares two of the references so this assert same method tests if two object references point to the same object assert not same checks whether the two object references do not point to the same object or not last we have assert array equal so this is similar to assert equals just that you’ll check two arrays instead of two object okay so this assert array equals method will test whether two arrays are equal to each other or not let’s take a quick look at the example for this so I’ll create another class under this package assert click on finish yeah under this I’m going to be writing the corresponding commands the first thing I’ll do is create an annotation of test and add public void test assertion yeah under which I’m going to test the data so the first one will be of the form string s Str equals so I’m going to create a new string new string and give this a text I’m going to be giving edu Raa or edu yeah this is fine going to provide another string and name it St r one so that you can differentiate the two strings I’m going to create another string give this as the same edu now once you’ve provided the input for the first two strings let’s consider the next strings so the next string which I would like to write would be so I’m going to instantiate the string command to null okay and then I’m going to create another string and instantiate it to the value that is specified here that is edu okay so two of them have the same values but one string would be considered as null I’m going to create another string sdr4 even this will be at you and the next thing I’ll do is provide two integer numbers in order to create an array so I’m going to be writing int value is equal to five I’m going to be giving it as five next I’ll give another value value one or two going to be naming it of one six after you input the values which is of the form integer I’m going to be creating an array of the form string so string array and I’m going to create an object of this that is expected array is equal to in the FL braces I’m going to be writing 1 comma 2 comma 3 okay so this is the expected array which I want to compare it with and the result array would be the same okay so I’m just going to copy this thing and paste it over here okay so that the expected array and the result array are the same now let’s check if the two objects are equal so I’m going to be using the assert method in this case so I’m going to write assert equals string and string one yeah and it throws up an error it says create a method let me just fix this first import the test ngng libraries yeah and assert equals it’ll State and static import gunit methods done and once you’ve done checking if the two objects are equal let’s check for another another condition for the true condition so check for true and I’m going to be writing assert true and I’m going to be providing value less than value one so this basically checks whether the condition is true or not so I’m going to import the static true and after you’ve done checking for the true condition let’s try to check the false condition as well check for false that is assert false and I’m going to provide the same condition that is value less than value one I’ll import this as well now once you’re done checking if the condition is true or false and also if it is equal or not let’s check for the null condition check for null so assert not null will have the first string now let’s check if it is null so assert null going to be taking the second string which I’ve mentioned here as null you can see that I’ve declared this as null so I’m going to be considering writing string two and import this as well so once you’ve done this let’s also check if two object references point to the same object Okay so we’ve already come across this assert statement that is assert same so I’m going to write a comment here let is check if the reference is to the same object okay and I’m going to write assert same and I’m going to be comparing string three and string 4 I’m going to import the assert same packages done so now let’s try to run this program so it says the assertion took place in20 seconds okay now let’s try writing the main function in order to run this so I’m going to create a new class and call it main class include the public static void mean and finish I’m going to be writing the code here so now I’ve called this class as main class and I’m going to be writing result create an object of the same is equal to junit core dot class that is the name of the class that we want to search for that is run classes so the name of the class that we had before was assert assert class so assert do class done so we need to import the result packages do note that you import junit Runner packages and after this I’m going to be considering the same for Loop here for the condition failure create an object of it that is failure is the result of get failures which returns it in the form of a list I’m going to be importing the failure function going to create this and print failure dot two string so this helps in printing the failed string or I’m going to be printing the result dot was successful so this will print the test case which was successfully executed okay save this and run this program so the output of this is the test assertion do assert is null okay now let’s take a look at our assert program here when we’ve provided this particular command it says assert null string to so this condition is true so it’ll be printing null now let’s run this program it says test assertions cod. urea do assert is null and the result is false so it is printing that the test case has failed so or else it would have printed that the test result was successful and it would have printed that the result is true now let’s take a look at our assert program so we’ve provided the first and the second string to be equal so first thing it checks for equal command is string and string one so this basically checks between the two strings that is string and string one if they are equal or not they’re equal you can see that it is equal and it also checks for assert true function where we’ve provided two values and checks if the condition is true so the value is five five is less than six so it is true for false value is less than value one so this does not print false because value is less than value one that is five is less than six so this is true okay so this will not print false now talking about not null string we’ provided the value of the string which has the string Ed this is not null so this will return true talking about assert null it has a value of string two which we’ve provided to be null so even this will return true at the same time we’re going to be comparing the same function that has assert same between the two strings three and four wherein they possess the same string which is edu now talking about the main class you can see that there is sprinting false okay so that means your test case has failed so let’s analyze how you can solve this problem let’s go to our assert function and take off all these static equals method okay the import methods that we’ve had which is of the form static let’s take all of them out and import the package which says junit assert this is actually way too simple because you have all the assert statement commands inside this so I’m going to just import this done and then add a few commands here so I’ll be writing another command to check if it is not same or not so assert not same string one that is string comma string one so this basically checks if string and string one are same or not next we have to check the array so assert array equals so we were basically checking for the arrays here so the name we provided here was expected array and the result array so the expected array would be expected array and the result array okay so this is done so I’m just going to save this and run my main class now you’ll see if the result is true or false it says false again now it is printing false again this is because that a condition that I specified here for false is not true true okay so this says value is less than value one which means it is true so we have to provide a condition which says it is not true so it is greater than value one that is 5 greater than six will throw up an error which says false now let’s save it and run the main function it will print true so this is how assert statements in junit works now let’s move ahead and understand what are the exceptions that occur during the execution of of a program junit provides an option of tracing the exceptions that occur in the code you can test whether the code throws the desired exception or not and the expected parameter is used along with the test annotation okay so while testing for an exception you need to ensure that the exception class that you’re providing in that optional parameter of the test annotation is the same this is because you are expecting an exception from the method that you’re testing otherwise the junit test would fail okay for example at test expected illegal argument exception. class so this is an exception so by using the expected parameter you can specify the exception name that your test May through so you will get this illegal argument exception which will be thrown by the test case if a developer tries to use an argument which is not permitted okay so this is one of the notable exceptions that occur during the execution of a process in junit now let’s take a look at the parameterized test in junit junit 4 has introduced a new feature called parameterized test this test allows the developer to run the same test over and over again using different values so you have a few steps in order to create the parameterized steps let’s take a look at how it is done so you need to First annotate the test with run withd this mainly specifies that it is a parameterized test then create a public static method annotated with parameters that returns a collection of objects in the form of an array as test data set moving ahead create a public Constructor that takes in what is equivalent to one row of the test data create an instance variable for each and every column of test data and also create your test cases using the instance variable as the source of the test data okay so that’s it about parameterized test now let’s take a look at the final topic that is junit versus test NG test NG and junit both are well-known terminologies when you talk about software testing Frameworks testng is almost similar to junit except for certain functionalities so I’ll be comparing junit and test NG based on their features so the major features I’ll be considering to compare junit and test NG are the suit test annotation support ignore test execution before all the test cases in a suit dependency test and parameterized tests so let’s compare them based on the suit test J unit and test in G both consists of the suit test that is The annotation suit okay and it also possesses The annotation support through both junit and test NG ignore test in the case of junit is specified using the command at ignore whereas in test NG you use a command called at test enable false okay so in testing you’ll specify if the enable is true or false okay now talking about the execution before and after all the test cases in the suit junit does not execute before and after the suit whereas test NG provides commands like before suit after suit before test and after test talking about the dependency test junit does not support dependency test whereas using test ngng you can perform dependency test now talking about the parameterized test parameterized test in junit can be done using The annotation run withd and parameter whereas in test ngng the parameterized tests can be carried out using The annotation data provider okay so this is everything you need to know about junit if you are a beginner automation is everything everywhere Amazon is testing delivery drones that pick up Warehouse or dis sorted by robots Google is testing self-driving cars starbu is testing cash of free stores dedicated to mobile ordering and payment and Facebook is testing a brain computer interface that may one day translate your thoughts into digital text fascinating right but why are these companies so hyped hyped up about automating the software testing process proc that’s because test automation offers lot of benefits manual testing can be mundane error prone timec consuming and even boring but test automation enables testers to focus more on challenging and rewarding work and in turn increases the accuracy of the results test automation saves lot of time and effort it even offers better test coverage and increased the test coverage leads to testing more features and a higher quality of application so it provides cross cross browser and cross device testing as well test automation makes it possible to execute test cases during off peak cars and to distribute them in parallel across multiple physical or virtual servers it also reduces business expenses I do agree that initial ADV investment may be higher but r return of investment or Roi as we refer to it is also high in longer run also test automation reduces manual intervention and since you’re using automation tools less number of people will be required for a project and they can be utiliz for other projects so Guys these are some advantages of using test automation automation testing is absolutely essential today to successfully deliver large scale products that need execu of repetitive and complex test cases that sound good but it is impossible to automate all testing so it is important to determine which test cases should be automated first when it comes to figuring out where to start automating there are some top candidates that will help you recognize the maximum return on investment so these are some test cases guys firstly repetitive task of primary candidates not only are those TSS boring to you but they are often the ones where you actually make mistakes because when you do a toss repeatedly we as humans often make mistakes automate them and do something more fun capturing and sharing results is a critical part to successful test strategy so rather than manually exporting your data crunching numbers and making complex graphs invest in a tool or automation strategy that will do this task for you you can can also automate test that require multiple data sets and instead of waiting for onc screen response automate the task that way you do not have to waste time staring at the screen and waiting for a response another case where you can automate is lad testing well think about having to see if your application can handle uh a load of 10,000 users automate this testing so that you do not have to worry about manually spinning up 10,000 users your application all at the same time you can also automate test cases that run on several different Hardware or software platforms and configurations because testing software with multiple configurations on different platforms manually takes lot of time and effort on your part so Guys these are some cases where you can actually apply test automation now once the decision has been made to use test automation the next issue is how are we actually going to do this what’s the plan one of the most common mistakes with automation testing is going for immediate benefits and forgetting about the bigger picture many teams abandon their automation efforts after a Sprint or two and go back to manual testing now why do you think that happens most of the time most of these companies use automation just because others are using it they’re not sure of the right way to implement the test automation they do not have the right automated testing methods in place they do not know when to implement test Automation and when not to they’re not aware of the right set of tools that meet their requirements so what I’m trying to say here is that success in test automation requires careful planning and design work to achieve high quality software within a short period of time is one of the objectives of every software company and I’m sure you guys know that to achieve that they either can save few days of planning and instant spend weeks testing or programming or they can spend a little time developing a proper test automation strategy to keep PA to keep Pace with the market so to build a cost effective automation testing strategy with a result oriented approach is always a key to success in automation tesed well you can build a good test automation strategy once you understand automation test life cycle so let’s explore that automation test life cycle has following phases the first one is automation feasibility analysis so basically in this step you check the feasibility of automation as in you short list the test cases which you want to automate you select the right tool that fits your requirement and all that next step is test TR strategy in test strategy you select the test automation framework while you have multiple options to choose from here like you have linear test automation framework you have data driven framework you have keyword driven framework modular framework and hybrid as well if you guys want to know more about these test automation Frameworks you can actually refer to the previous live session in the playlist listed below in the description well let’s moving on in this pH you can create a test place test plan and test automation suit in your test management tool so the next step is environment setup in this phase you set up the testing environment and acquire the required hardware and software tools to execute the automated test cases that’s pretty simple and the next step is script development in this phase you start creating the automation test scripts according to your requirements but make sure that your scripts are usable well structured and well documented this will help you in long term if you’re automated obviously the next step would be case execution in this phase you execute your test cases and finally we have result generation and Analysis this is the last phase of test automation life cycle in this phase you analyze the output of test cases and share the reports with stakeholders so now now that we are aware of the automation test life test life cycle let’s have a look at the building block of test automation strategy it consists of eight items for you to consider as you head out on your automation journey and those would be scope of automation test automation approach automation test environment risk analysis execution plan review and failure analysis automation maturity model so let’s explore each of them a little deeper oh guys before you start I just wanted to say that these blocks are not listed in any particular order okay let’s get started now so the first thing is scope of automation defining a project scope for an automation perspective includes outlining timelines milestones for each Sprint in the pro project so the two most important things that you do here in the scope of automation is shortly ing the test cases which you want to automate and selecting the right test automation tool guys you can’t automate everything so you should be smart about your priorities if you’re focusing on high return of investment one of the best model that can help you with that task is Mike cohan’s test automation period pyramid using this you can decide which test cases to automate the pyramid shows that in general you should try to push test down to the lowest level possible unit test or UI test sorry unit test are the quick to write they have the highest return return of investment and should ideally form the backbone of your automation testing Strate strategy developers can write unit test to check the smallest pieces of their code and find bucks on their own after unit test we have regression test it should be our next priority as the WR investment after each successful build next you need to check functionality and other quality characteristics such as accessibility and security across large piece of application with functional testing so what I mean is that after unit testing and regression testing it’s functional testing then comes user interface test although pretty common automating at graphical user interface level is highly impractical that’s because user interace requirements keep changing which makes automation more complex and user interface tests are expensive they require heavy maintenance and the written High number of false positive or you can say negative cases so these are how you short list the test cases so no matter how skilled you are in automation how many selenium commands you know or what testing Frameworks you use some simply cannot be automated like user interface test they have everchanging requirements and they’re difficult to automate so automation there is not suggested similarly when you have exhaustive document even then automation is not suggested and suppose if you have test that you’re going to execute only once why do you need automation when you can do that using manual testing in short amount of time and without much effort and you also have tests which are based on visual perception you have anti- automation features like capture I’m sure you’ve come across it and you also have ad hoc and explanatory testing where you can Chuck system based on your based on your knowledge of its internal workings and experience so manual touch is definitely needed there so automation is not possible in ad hog and exploratory testing so this is how you short list cases that you want to automate so once you’ve decided on which test cases to automate and which not next step is to collect the appropriate testing tools that suit requirement selecting the right tool is the key factor that guarantees the success of your test automation strategy you need to select one out of several test automation tools that are available in the market well that can be a difficult task because there are lot of and tons of tons of automation tools in the market so in order to select the tool that fits best for your project first you need to understand your project requirements thoroughly and then you need to identify the testing scenarios that you want to automate based on these two you need to short list your tools that support your Project’s requirement then you need to identify your budget for the automation tool once you have once you have an idea of the budget you can further short list the tools based on your budget after that you can short list tools based on certain parameters like licensing cost of tool maintenance cost training and support tool extens ibility tool performance and stability so you can follow these three simple tests before you actually select a proper automation tool there are plenty of cost effective tools available in the market for automating different kind of applications like Windows application web application websites mobile web applications native mobile applications and many more and some of the popular automation tools that you can use to automate any kind of application are selenium then you have Microsoft coded UI framework then you have HP qtp and many others so that’s the first block moving on to next one it is test automation approach when choosing a test automation approach guys there are three areas which you have to consider process technology and rules well we already discussed about process and technology in the previous block which is how to actually short your short list your test cases and how to select a tool and all that but anyway let’s go through it again so first process test automation roll out must be a welldefined and structured process so make sure to cover the following in your plan like when during the Sprint should automate test cases to be de developed as in when you actually should develop your automated test cases during what time what are the features which are ready for automated testing which features should be tested manually who who take cares of the maintenance how do you analyze results so all these questions you need to include in your plan so after process its technology identify the applications which you have to automate figure out which technology they’re based on and whether or not your test automation platform supports those Technologies then you have rules here you define the roles for Automation in the test automation team as in your test automation team make sure that all members know who is responsible for which part of automation project guys all members of a test team including domain specialist technical testers and test management they play very important role in making test automation actually work for example you have automation lead or engineer he’s responsible for coordinating and managing all activities regarding Automation in the process project and it want and when it comes to test case you have test case designer one who designs the test case and reviewer once the test case designer designs them to have a second look we have reviewer so this way you have different rules so remember remember that success with automation is dependent on a team’s Collective knowledge adopt a test automation platform that all testers can work with so that automation becomes a natural part of daily work of all your team members other thing that you should that you can focus here are reusability of automation scripts your test automation strategy must and should include the reusability of test scripts this will help you reduce scripting development efforts there are many general functionalities which are common in applications you come across them especially if you’re a company who is taking projects which is related to a single domain for example let’s say if your company developed web applications you can create a process to reuse testing scripts for login and validation test cases so instead of writing same test cases again and again you can store them in a file and reuse them again then you should make sure to include manual testing automation testing isn’t a replacement for manual testing it’s just an extension of manual testing so no matter how great automated tests are you cannot automate everything we even discuss some cases where you can actually not automate right so manual test play very important role in software development and they come in handy whenever you cannot automate the process so don’t try to automate everything and the next point is we have something called Release Control in any release pipeline regardless of its complexity and maturity there’s a point where a team should decide whether to release a build or not part of this decision making can be automated while other parts still require human touch in any case make sure that the results from the test automation are part of the release decision so final decision regarding release will often be based on a combination of algorithm results and manual inspection moving on to next one we have something called risk analysis risk analysis as you guys know is an essential part of project planning in general but it is important to consider this specifically in automation as well so you can create a risk plan with parameters like description which describes what’s the risk all about then you have risk level or sever severity what will happen if the risk becomes reality how hard will it hit the project then you have something called probability what is the likeliness that it can occur then you have mitigation what can be done to minimize the risk and then you have cost estimate in the end which what is the cost of mitig ating the risk what is the cost of not doing it well these are just basic parameters you can consider several more let’s consider a simple example as you can see the first risk it says we do not have enough trained resources to create test Automation and what will that lead to this will lead to lower test coverage as more manual regression testing must be performed before release this in turn might delay the release so what will happen if the TK becomes reality how hard will it hit the project very high and what’s the probability that this risk might turn into reality well it’s medium and what do you do if it has actually occur you can contract Partners or you can contract training providers alternatively you can educate the workers in your office so that they can handle more load and what about the estimate cost it says TBD it means time based decision similarly next risk it says test servers will not be able to keep up with the load from the automated regression test which will lead to high number of false failures in the reporting and what’s the risk level medium and the probability is medium and what you could do you can contact operations and make sure that the servers are configured to cope with expected load now what about the cost it’s about $10,000 so this way you can create a risk document but one more important thing is that risk plan is a dynamic document as in it keeps changing it’s not fixed so risk will be added and removed to the list as the project evolves we are oh so next one in the test is test automation environment setting up your test environment is another building blog of test automation strategy guys you can establish your automation testing environment by following certain steps first of all first by identifying the requirements of test environment then by acquiring the required tools with their licenses and you can also consider the data which is part of test cases like where do you have to store the data which belongs to test case should the data be masked or not masked do we need to have backup for the data what sorry guys what happens to the data after testing what should be done with it so you can ask these questions you can consider the test data requirements as well test automation is a deterministic game known inputs will produce predictable outputs this means that stable and predictable test environment is a prerequisite for successful test automation after that we have execution and management of test cases your test automation strategy should also Define the process of execution and management of test cases an execution plan actually outlines two things which is the day-to-day task that you do and the procedures which are related to automation there are certain practices that you can follow when you’re writing test scripts and when you’re executing them for example first of all pick the test cases which you want to automate like I told you in the first step after that before you add any automated test cases to your regression suit run and verify them multiple times to ensure that the run as expected next you need to define a set of best practices that make test cases resistance to changes in system which is being automated so your test cases should be written in such a way that even when the requirements of your system which you’re automation automating is changing they shouldn’t be affected next you can actually run your test in parallel this means that use pipeline orchestrator like Jenkins TFS bamboo many other things or a scheduling tool to execute test cases in parallel this way feedback from the test is sent to developers at very fast rate so guys you can never test too much and the combination of test automation reliable test cases and scheduled or controlled execution will always give you a positive effect at the end of your automation one more thing after executing a test case assign a status either pass or fail with it in automated testing this status is assigned to the test cases automatically according to your success criteria if it’s a fail you have to perform failure analysis which is actually our next step failure analysis and Reporting results so having a plan for how to actually analyze the fail test cases and how to resolve them is a critical part of test automation strategy often time taken to notify the failure analyze it and resolve it is much longer than you actually anticipate so having a well-defined process for this can save a lot of time and frustration in development team so what you can do is you can outline how different errors should be handled and by whom for example let’s say you have some issues related to environment the test environment you can rise a ticket with devop team and suppose if you have a bug with automation scripts you can create a task for testing team similarly if you have a bug in the application which on which you’re performing automation or you’re testing you can actually flag a bug for development team this way you can outline different errors who should handle and how they they should so once your error handling is done next thing all the things that you’ve done till now including the methods that you adopted to implement automation test results pros and cons of the test automation strategy that you have used here should be captured and documented for future reference then you need to continuously improve your test automation strategy by learning from those lessons so the last thing is to revamp your test automation strategy you can’t directly develop a perfect test automation strategy very first time you make it perfect by improving it every time you find a fault with it automation maturity model is a way you can use to revamp automation test strategy automation maturity model is divided into multiple phases for example you have something called initial phase so guys basically before explaining the phases all you do in this revamp is you actually go through everything that you did in your previous strategy and find the errors and replace them as in resolve them so where were we initial phase here prerequisites of automation should be completed then you have something called manage phase automation is achieved without any Central infrastructure in this phase as in there’s no dependency then you have defined phase Central automated process across the application life cycle should be built here then you have something called measured phase your collected and analyzed metrics of automated process should be compared against your business goals here and finally you have optimized pH here things like self-service automation or learning about automation by looking at the analysis results which we call self- learning using analytics and self remediation should be addressed here or actually addressed in this phas so using automation maturity model you can revamp your test automation strategy until you find it fit for your organization so guys this way you find a strategy that’s best for you it’s very much necessary to come up with an intelligent test automation strategy to fully enjoy the benefits of automation testing and achieve the desired level of success a successful test automation strategy can lead to big things it’s true a successful testing strategy and framework can positively impact your business and organization in number of ways first of all it provides you more comprehensive testing the most complex test automation task are completed easily when you have a strategy and your products become more robust as a result it also promotes the ReUse of critical components by reusing the critical components it increases employee productivity since the time they would have spent on manual test is saved by the ReUse of components so what I’m trying to say is instead of them manually doing each thing again and again they can use the reusability scripts they can invest their time into other critical areas of their work and business it also reduces maintenance cost you can change and update your testing methodologies more easily because you have taken time to plan and Design Your solution your employees adopt these changes quickly and very easily and they have very less maintenance work to do do when it comes to automated test solution it also creates the testing standard for your organization your strategy will become the standard that’s used across your organization because it’s complete and robust and finally if your strategy is based on result oriented approach it will give quick confidence about your product to stakeholders as well so Guys these are some key benefits of developing a test automation strategy I hope the above strategies help you as you head out on your automation Journey let’s see how to build the data driven framework using selenium so now you might be wondering why selenium right demand for web development and testing is literally huge as of January 2019 there were over 1.3 billion websites on internet serving and 3.8 plus billion internet uses worldwide so as a result the tooling Market is now more competitive than ever but so far no one has out shown the selenium in terms of popularity and adoption so when it comes to selenium the biggest sweet spot of selenium is that it’s open source in other words it’s completely free to download and use it provides an API called Web driver which enables testers to craft their test in many programming languages which includes Java cop python uh Ruby and many other languages besides web browsers you can also automate mobile devices like Android and iOS VI APM as well so that’s why I’ve chosen selenium in this demo moving forward let’s take a look at General steps that you need to follow when you create an automation framework using selenium so first of all you need to choose a programming language in selenium world you have wide range of programming languages that you can choose from like I said earlier you have Java C Ruby Python and many others in my opinion Java is a choice because it’s widely adopted and it’s crossplatform so in this demo we’ll be using Java no doubt so once you’re done choosing your programming language next you have to choose a test framework now you might be wondering why do you need a test framework right a test framework or a unit test framework helps you to Mark a class or a method as part of testing using annotations you can execute tests in parallel you can generate logs you can perform the session verification and all that so once you’re done choosing your program language and selecting a unit test framework you need to design the framework as architecture so make sure you come up with the sustainable maintainable and scalable architecture so now based on your architecture you start building your test modules so next choose a reporting mechanism reading the test results will be difficult if you do not have a good reporting mechanism let’s say when you receive a test failure how do you invest the fail test quickly to determine whether it’s what kind of error it is if it is aut bug or it’s an intentional functional change or the automation mistake or whatever it is how do you figure out for that you can use a reporting mechanism well the framework unit test framework like test NG does offer you a reporting mechanism but the results are not in human readable format as and you want understand it for that you can use some third party error reporting mechanism and last step is if you need if you can if you want to you can integrate your framework with other tools as well for example you have test Trail it’s a test case management system that proves useful when your project has large number of tests apart from that you also have J integration and many others so yeah these are the basic steps that you follow when you’re creating a framework so guys I forgot to tell you a point it’s that when you are choosing a unit test framework in this demo we’ll be using a framework called test NG it’s similar to gunit but it’s much more powerful than that especially in terms of testing integrated classes it eliminates most of the limitations of folder framework and gives testers the ab to write more flexible and Powerful test so let’s quickly go through the steps again first you need to choose a programming language of your choice then you need to choose a unit test framework after that you design your framework architecture based on that you start executing your scripts and creating them after that you need to choose a reporting mechanism so that you will find out the errors and the reason for those errors much easy Le and lastly if you want you can integrate your framework with other tools as well so guys

let’s let’s get started with our demo there for that I need to open my Eclipse before that I want you to ex install some extra jar files for example let’s say since we’re using selenium here you’ll have to install selenium jar files and there’s something called Apache POI well I’ll let you know what is that for later so go ahead and download selenium jar files and Apache POI let’s say selenium download sorry about the spelling mistake guyses you can go for downloads here and you can download the version here and you can also download this one as in the language for which you want to use selenium so yeah after that you need to install something else as well Apache poi here there’s link which says download release artifacts under that you have the latest table release click on that it’ll take you for the binary distribution and Source distribution go ahead and download the zip file and if you’re using Mac and all you can download the TD file as well so once you’ve downloaded all the files unzip them extract them and store all the jar files in separate folder well I have stored them here in my C folder I have a folder called selenium and I have all my executable jar files here so we ready to start a demo so the first step you need to do is download selenium jar files as well as Apache POI don’t worry about Apache POI for now okay then let me open my Eclipse it’s on my desktop here it is sorry about the delay guys give me a minute it should load up launch so sorry about the delay guys anyway here we are on our Eclipse well on my Eclipse so I have a project which is named as framework demo so before we actually get in like I said we have installed our selenium jar files as well as a Pache POI let me tell you what a Pache POI is for so guys basically a just a web driver doesn’t directly support reading of excile files or any kind of external data files for that you need to use some sort of third party device or a program called Apache POI so we can use Apache POI for Reading Writing any Microsoft document into your program here so we’ve already downloaded the jar files I’ve stored them in a separate file called selenium under my C folder all you have to do is go for your source file click right click on it and there’s an option called build path here well I’ve already added the libraries to my project for you guys to do you can go ahead for this build path and you have an option called configure build path click on that so once the dialog Bo box opens you have something called libraries here go for that and click on ADD external jss and go ahead and add the all the J files which you’ve just downloaded and stored it in the folder well I have done it already so I’m not doing it again and click on open and once they’re add it it’s cool you guys are ready to go but before that you need to install test NG plugin as well it’s available in the eclipse Marketplace all you have to do is go for help here and you have Eclipse Marketplace okay it’s taking time to load well I’ve already installed so let me not waste time here all you have to do is go for Eclipse Market play once it’s loaded in the search tab you can search for test NG and as soon as it’s done it’ll show you the plug-in click on that and click on install it should be done once you’ve done that all you have to do is go for Windows here and show View and you can go for others okay Marketplace is open since it’s open let me just show you show you guys okay sorry about that guys here we go and under Java you should have testng installed so if you have installed plugin properly you will see test NG here that’s all about it cancel okay all you have to do is type test NG and click on okay so anyway guys all you have to do is find that in the search tab you’ll find it and click on install button I’m not going to waste time here okay here we are okay here it is test NG for Eclipse you can just click on install it’s already says install because I already installed it okay back to a program I’ve set up everything here because it takes time to write the code right so I didn’t I do not want you guys to wait for this so I’ve already written I’ll explain you the program don’t worry about it and under the source I have a package called jka and under that I have two classes which is my main function and another class called read Excel file so basically main function what it does is it checks the login functionality of a flight booking application so that’s my main testing function and we have another file called read Excel file and I’ve written this file so that it can read the data from the external source and as for the external source that I am using in this demo it’s an Excel sheet I have Excel sheet called login credentials I have that stored in my selenium folder it should be in selenium folder let me open the file here it goes I have a file called credentials and I have two fields in that one is username and one is password as you can see I have username and password and four entries so getting back to Eclipse two functions one is my main function which chunks the functionality of a flight booking application another one which reads the data from an external file so we’re good to go let’s start exploring the functions here let’s start with the main function first of all I’ve imported a lot of packages here as in different libraries here I have Chrome driver I have annotations which is after method data provider and test so guys first of all annotations are very easy to understand annotations in testng are basically lines of code that can control how the method below them will be executed so to use those annotations you need to import the libraries attached to them so I have used three kind of annotations here one is after method data provider and test so yeah the library that’s related to annotations is this one apart from that I also have something called assert as as we progress through we’ll get to know what that is and then there’s Chrome driver so let’s get started this is my main class the main function the name of my class is main function and here I have a chrome driver object I’ve created an object called driver of type chope driver as you can see I’ve divided as and I’ve created it globally because I do not want it to include in the annotations because all the functions which are written under this annotations will apply to that Chrome driver as well so I do not want that so I’ve written it globally outside my annotations anyway then I have an annotation which says at test and data provider is the name of the method is equal to test data let’s move on to next part of the code which is demo project so under this annotation like I said earlier an annotation is line of code that can control how the method below it work works so the My Method here is demo project so basically to this method I’m providing a username password and login to keep checking and how am I doing that I’m using a command called find element so driver do find element by name username and the sand Keys is the username where it accepts the input then you have same for the password and login as well for login we do not accept anything because it’s just a click button right so I have a function which says click apart from that I’m also giving a link to the website in which I have to check the login functionality that’s the flight booking website if you want I can open it and show it to you guys let me copy it here we go to the browser and paste so while it’s loading let’s just get back to our Eclipse as in the program apart from giving the link and find element we I also have used something called set property here as in I’m telling the program to automatically open the web browser for that I am using a chrome driver here so that’s all about it now here under annotation I have something called Data provider is equal to test data what I actually mean by that is here I’m giving username password and login from where does is all this data coming from from I’m saying extract the data from the method data provider so obviously I should have another method which is called Data provider right here we go I have another annotation which says data provider and the name is test data here under this annotation I have an object called config which is of type read Excel file read Excel file is nothing but another class or another file which I have created to read external data so like going back to that function this is where Apache POI comes into picture like I said web driver directly cannot read from the external data for that I’ll be using an Apache POI libraries one is workbook and another one is sheet so in this read Excel file class I have a method well it’s not a method it’s a Constructor because it St starts with the same name as that of method right so yeah it’s a Constructor and the Constructor I’m giving a link to my Excel part for this for you guys to understand this let’s just go back so here we go we calling the config method as in the config object of type read Excel file dot Excel file right so here I’m giving the link as in the path where I’ve stored my credentials or the external data file so whenever you call this object the control goes here as an object of type read Excel file is created so Excel path is the input which is taken here as you can see this is the input which I am calling the object with so this will be stored in the Excel path and a new sheet will be created as in the new sheet will be accessed so getting back I have some other functions here sort of farther functions before that let’s go back here as you can see I’ve have placed my entire code in a try catch exception block well if and everything works well it shouldn’t throw an exception well if it does then it’s caught here and the error is handed so these are just this is just the basic before we actually start with the main function in this read Excel file so the main function here is one is to get the string data as in the get data and the one is to get the row count now you might be wondering why do you need row count here we have automated the test and we want the application login functionality to be checked for different values for multiple values right so we need for how many login and the details or the username password pair do we want the application to be checked the number of times you want to check your application for that we need a function called get basically what it is doing is that it’s taking the index of a sheet here as an input for example if I take you back to the sheet it says here sheet one right so one is the index of the sheet so that’s taking the index of that sheet it goes to that sheet and there it’s calling WB which we just defined in the upper part web page this WB already knows the path of where the sheet is so using that using the get sheet at it’ll receive the sheet and it will get the last last rows number suppose for example in this sheet I have four rows so the last number should be three because if you remember the index starts from zero right so the value of row becomes three but again three is not right value because there are four rows for us to understand so I’m adding one more to the row so it becomes four now the value of row becomes four basically what I’m Shing is go go to the sheet and count the number of values or the number of username and password pays that are so we have counted and the row value is now four now here other method is get data so basically what we’re doing in this get data is going back to our main function here I have a demo project method which is taking data from this data provider and that data provider is calling for a get function as you can see here it’s calling the get data function here so I’m creat creating an object called credentials which has countable number of rows but two columns as you can see we have two columns which is log in username and password but the number of rows actually depends on how much data there is as for here we have four rows so I hope now we understand why we actually counted the number of rows here right so here we called the rows and we have called the row count method which will be four so this will be four and two so I’ve created an object of type array here which we have two values so it’s two dimensional array so now to get the data I’m calling get data method and I’m passing three parameters as you can see the first one is going back to the method the first is a sheet number then you have the row and the column so as soon as this method gets the parameter which is sheet number row and column first of all using sheet number it goes to that particular sheet using WB and once it is gone to that sheet it goes to that particular row particular column and gets the value and stores that value in the data and I’m returning this data back to the method which called this method which will be in my main function so the value is which is extracted by this method or which is written by this method is stored in this credential similarly here again so this way we fetching data and once the data is stored I’m saying written credentials which will go back to this demo project because in annotations I have said extract data from this method which is data provider so from data provider all the data which we just extracted will go here and will be assigned in the username password once data is extracted it’ll be clicked on login so I hope you’ve understood right I hope it’s not confusing let me just summarize quickly so if you have not understood you will understand it at least this time so basically I have a chrome driver which is defined outside because I do not want it to be included in the annotations which have different different other functions so the first method I have is demo project here I’m defining a set property as in I’m saying open the browser by default here and I’m giving the link as to which application needs to be checked and I am giving two inputs which is username and password and click on login I also have a method which checks if the login was successful or not if it’s uh how am I doing that I’m using assert function here it checks if the title is fly in the flight merury doors if after logging in if it’s the title if it finds it means that a login was successful otherwise it’ll just print you invalid credentials so I have another annotation called after method this is basically executed after all the methods in this program are executed so basically in the end it quits or it ends the program and then I have a method called Data provider as you can see in the annotations I have a data provider do how do you how does the data goes in to this demo project from this data provider method in data provider method I have an object config which is of type read Excel file which is another file of mine where I’ve created a class called read Excel file under that I have a function which is placed in between try and catch exception where it takes to the Excel path now getting back to main function we need to extract the input and put it in the username password here for that I’m counting number of rows because I have to repeat the testing of application for different inputs for that I need to know how many inputs are actually there so for that I’ve called a get row count here that method basically what it does it takes the sheet index it goes to that particular sheet and it gets the last rows number once it does that I’m adding one more because in human language the index doesn’t start from zero it starts from one after that I’m rning the value which literally goes back here in rows so the row value in this demo will be four and four will be stored here now based on that I’m creating another object of type array two dimensional array and then I’m calling get data method to fetch the details one for the password and one for the username how am I doing that I’m calling a get data method where I’m passing parameters sheet number row and the column here we go once the function is called it goes to that particular sheet number by using the path which is stored in WB after that it goes to that particular row particular column and stores the value and returns back the value which will be stored here similarly here so this way login ID or the username and the password are fetched then I’m returning this credential back to My Demo project using username and password your strings which will be stored in this username and password and the application will be checked for that particular value so guys I hope you’ve understood the functionality of the program right now let’s just run and check if it’s working so I’m going to click on this run function here run Button as you can see it has started running so basically as you can see I have four values in my Excel Shield right so it will check if the application is logging in properly or not for all the four values so it has checked for the first value it says login successful because I created an account for that credentials and it’s checking for the next which is company and the password is also company it’s going to take a while so guys it the login was successful the second value as well and it’s checking for the third value which is admin it says it didn’t work so it’s going for the next value here we go again it’s entering the username and the password and again the login was unsuccessful because the two users in my Excel sheet are not registered users so it it’s days the test was run four times and two times it filed because only two were the actual registered users and it skipped zero values so that’s how you do it guys so now you know how to actually create a data driven framework using selenium go ahead and explore for other functionalities try to create hybrid framework which is combination of keyword or any other mixture of any other Frameworks I have categorized interview questions into basic intermediate and advanced level so let’s begin with the basic questions so here goes our first question what do you mean by term automation testing well we’ve already discussed this anyway automation focuses on replacing manual human activity with systems or devices that enhance the efficiency of a work the process of using special software tools or some sort of scripts to per perform testing tasks such as entering data or it could be executing the test steps or comparing the results with the expected results is known as automation testing so basically in automation testing you’re trying to replace the human who is performing the testing moving on to our next question what are different types of automation testing guys automation testing is basically divided into four to five categories but the most popular ones are unit test graphical user interface test and functional test so unit test these are usually done at the development phase and they help reduce the buck in the initial stage of development of software itself then we have graphical user interface test these tests are usually done at testing level and these tests are mainly written to focus if the test interface or the interface of an application or the software that you’re testing on is working properly under certain conditions or not then we have functional test just like graphical us user interface test these are also done at testing level this simulate the functional scenarios to test if the application works properly or not for the provided input at different conditions so basically here we are checking the functionality of an application or software or any item that you’re performing testing on apart from these three we also have something called Web Service testing web service testing is testing of web services and its protocols like s soap protocol dress protocol and all that so automation testing is divided into about four to five categories but the most important ones are unit test graphical user interface test and functional test so guys now moving on to our third question what is an automated test script an automated test script is basically a short program which is actually written in some sort of programming language to perform a set of instructions on the software or the application that you’re testing on so when you run this program it gives the test results at has pass or fail depending on if the application is working as per your expectations or not so basically whatever test you want to perform on the application of the software you’re writing it as a program or in form of program in the test script and that’s what we call automated test script next question what are good coding practices that you should follow while writing test cases for automation so guys before you actually go ahead and write code for your testing you need to follow certain coding standards for examp example you need to use commments at regular Paces you need to maintain separate file if you have functions that you want to reuse and there are certain coding conventions that you have to follow like colon and all that and most importantly you should regularly run your scripts to make sure that you do not make any error or there no box in the code that you’ve written so these are certain coding practices that you need to follow when you’re writing code for your automation this way you’ll be sure that if you get an error it’s not because of your code it’ll be because of the bugs which are in the application next question guys this is most frequently Asked question every interview every test automation interview this is a must or definite question guys which is what is a test automation framework a test automation framework is a set of guidelines used to produce beneficial results of automation testing activity so basically in simple terms it’s set of guidelines or rules that every test of follows universally the framework brings together function libraries test data sources object details and other usable modules functions and methods so once you’ve adopted any kind of test framework you can even extend the framework for example the guidelines which are set in any framework would be rules for writing test cases coding guidelines for creating test handlers or it could be input test data templates or object repository management log configuration test result and Reporting usage all of these are the guidelines which are wristed in any framework so make sure you get to know more about automation framework before you attend any testing interview next question why use automated Frameworks what are the benefits that they offer first of all guys they established a universal standard for testers to achieve the specific goals of automated tests they maintain consistency of testing so basically these are the rules which are followed by every tester all around the world this way they maintain consistency of testing you are also provided with commonly used methods this way it improves the efficiency of automated task in framework and even with the limited knowledge of how the test case is set up a tester can easily depend on the framework to refer to simple statements and implement the test cases you can easily reuse the test scripts for future purposes so with a proper framework the code is easier to maintain and often reusable so technically automation framework when designed and implemented correctly they deliver frequent and stable automated test code so basically in simple terms this automation Frameworks make the life of a tester much more easier guys one more question about automation framework what are different types of automation Frameworks that are available right now so first we have linear scripting framework linear scripting framework is basic level test automation framework which is basically in the form of record and Playback in a linear fashion this framework is is also known as record and Playback framework this type of framework is used to test Smalls size applications in this type creation and execution of test script are done individually for every test case so this is the basic level test automation framework then there is data driven framework data driven test automation framework is focused on separating your test scripts that you’ve written from the test data that you want to test on so it allows us to create test automation scripts by passing different set of data types the test data set is kept in external files or resources such as Excel sheets or it could be access tables or SQL database or XML files Etc then you have keyword driven framework this keyword driven framework is also known as table driven or action word based testing in keyword driven testing we use a table format to Define some sort of keyword or action word for each method that you could execute in your code now based on the keywords or action words which which are specified in the Excel sheet test scripting is done and tests are executed by using this framework since we are using keyword and action words programmer need not know much about the scripting language here then we have modular testing framework here tester divides the application into multiple modules and creates test scripts individually for each module these individual test scripts which are written for each module are then combined to make larger test scripts by using a master script this master script is used to invoke the individual modules to run end to endend test scenarios so basically you divide applications into multiple modules then for each module you write down a test case and then combine this test case according to your requirements using a Master Test script and the last one is hybrid testing framework hybrid test automation framework is literally a combination of two or more Frameworks that we just discussed it attempts to leverage the strength and benefit of other framework for particular test environment it can manage apart from these you also have others but these five are the most popular ones next question what are prerequisites to start automation testing so guys before you actually start automation you need to be aware of certain things for example you should make sure that the build for your framework is stable you should make sure to filter the test cases which you need to automate as in you should be sure as to which test cases you want to automate and which not you need to separate the functions which you will use repeatedly and if you have certain functions which you want to use repeatedly make sure you’re storing in separate files make sure you have your application modules in such a way that their requirements do not change frequently in such cases automation becomes difficult and the most important one make sure you have skilled and experienced resources this makes your automation much more easier so these are certain points that you should keep in mind before you actually start automation moving on to next question what are the factors that determine the effectiveness of automation testing there are certain key factors which help you decide if your automation was successful or not first of all obviously the amount of time saved then you have the number of defects or bucks found after automation the test coverage as in literally one test covers how much data or how many cases like that then you have maintenance time that you’ve spent on maintaining the automation software then the installment cost the amount of money that you spent before actually starting your automation then the test case reability as an easier test cases us able or the just not reusable as such and lastly the quality of the software that you’re actually performing test on this determine if your automation was successful or not and here we go the most common question what are the main differences between automation testing and manual testing so when you begin testing one of the primary decisions that you’ll have to make is when you’re going to test manually or use automated testing so you have to be aware of distinct differences between manual testing and automation testing the first point is obviously reliability for a testing phase which is very long let’s say it’s very long there are high chances of an undetected error when testing is performed manually so when you perform testing manually you have to do test repeatedly again and again the task becomes boring and it’s quite possible that you might Overlook some arrows so in such cases reliability is really less whereas in automated testing you use different kind of tools and scripting to perform the test and find the Box so there’s no chance of making any errors so the reliability in automation testing is literally high and again in manual testing it’s humans who are performing the testing and obviously humans are a little slower when compared to machines right so the processing time is more in manual testing while compare to automation testing and the important point is you cannot use manual testing and automation testing everywhere there are certain cases where manual testing is suitable and there are certain cases where automation testing is suitable for example manual testing is suitable for onetime task or exploratory or usability and had hog testing whereas automated testing is suited if you want to perform test repeatedly for long run or for regression testing or performance testing Etc apart from that initial investment cost in manual testing is low but the written of investment as in the amount you get as written after you perform your automation is also less than manual testing but when it comes to automation testing initial investment cost is high and the RM of invest m is also high in longer run so these are some basic differences between automation testing and manual testing let’s move on to our next question so is it possible to achieve 100% automation 100% automation is definitely not possible guys there are certain test cases that cannot easily be automated for example checking the background color of an window or a deog box well why would you do that right it’s a very simple task why do you need to automate or use machines here to perform the task right it’s a waste of time and effort just like that while we were discussing the differences we also discuss certain cases where you actually cannot use automation testing so 100% automation is definitely not possible next question what are some conditions where we cannot consider automation testing so just before discussing this question we discussed a question where I said 100% automation is not a possible thing it means that there are certain cases where you cannot apply automation so what are those so if you have a situation where the requirements of your software or an application keeps changing in such cases automation becomes difficult because every time requirement change you need to change your test scripts as well right so it becomes difficult in such cases it’s suggested not to use automation testing similarly if you have exhaustive documentation or if you have a requirement where you can apply only continuous integration or continuous delivery concept then it’s slightly difficult to apply automation testing the another case is when you have onetime test cases as in you need to test these test cases only once so what is the point of using automation because it doesn’t require much effort to test a test case only once right in such cases manual testing is much more preferred apart from that we also have ad hoc testing exploratory testing and user interface testing so don’t worry about them for now we’ll discuss what those three are as we progress there’s another question based on that so for off I’m just going to list them and leave them like that here we go our next question how many text cases can you actually automate in a day guys it totally depends on test case scenario complexity and the design and the length so generally speaking given the standard complexity of test cases it’s usually possible to automate a minimum of six test cases in a single day well this is for me so when I perform testing I realize that I could test six test cases in a day depending on their complexity but again it depends on you it depends on individual if you are asked this question you just have to talk based on your experience and the next question what are some Modern applications of automation testing so guys like I said in the beginning automation is literally everywhere every company is implementing Automation in one or the other way for example Amazon is testing delivery drones that pick up Warehouse orders which are sorted by robots whereas Google is testing self-driving cars then you have Starbucks which is testing Casher free stores dedicated to mobile ordering and payment and Facebook is the in a brain computer interface that may one day translate your thoughts into digital text well these are some mundane versions of automation technology apart from this there are other innovative ideas that are coming up regarding automation fascinating right so let’s move on to our next question is documentation actually necessary in automation testing because documentation plays a critical role in test automation so whatever the practices that you follow while automation should be documented so that that they are repeatable as in you can refer to them later on if they are documented somewhere like specifications designs configuration code changes automation plan test cases bug reports user manuals all should be documented so that later on you have somewhere where you can refer to if you have forgotten or if you have made any mistake this way documentation plays a very important role in automation testing so here goes one more tricky question that you might be asked guys can automation testing replace manual testing well according to me automation testing isn’t a replacement for manual testing it’s just a continuation of manual testing so no matter how great automated tests are you cannot automate everything right we even discussed the cases where you cannot apply automation manual test play important role in software development and come in handy whenever you cannot automated test cases automated and manual testing each of them have their strength and weaknesses manual testing helps us understand the entire problem and explore other angles of test with more flexibility when compared to automation but automation testing helps save time in long run by accomplishing a large number of surface level test in very short period of time so what I want to stress here is that automation testing is actually not replacing manual testing moving on to a next question what are some popular automation testing tools that are used worldwide so in the definition itself we have automation testing is process where it uses assistance of tools and script to perform testing so obviously there are whole lot of tools that can be used in automation for different purposes some of the most popular ones include selenium it’s a popular testing framework to perform web application testing across multiple browsers and platforms like Windows Mac Linux you name it then you have water which is pronounced as water it’s an open- Source testing tool made up of Ruby libraries to automate web application testing while don’t get confused with the spelling it’s w a t r but still it’s pronounced as water then you have ranorex it is flexible all-in-one GUI testing tool which you can execute automated test flawlessly throughout all environments and devices then you also have APM it’s an open-source mobile testing automation software it’s free and it supported highly active community of developers and experts well these are just this scrape or I can say very few of the tools which I’ve listed here there are multiple other tools that are popular for different purposes our next question when should you prefer manual testing over automation testing well earlier we discussed when you cannot use automation testing now let’s discuss when can you actually prefer manual testing over automation testing first of all when you have short-term projects even the automated tests are aimed at saving lot of time and resources it still takes lot of time and resources to design and maintain an automation test case or any such automation so in some cases such as building a small promotional website it can be much more efficient to rely on manual testing rather than automation testing it saves a lot of effort and time on your part other one is user testing this is an area in which you need to measure how userfriendly efficient and convenient the software or the product is for your end users so basically here you’re representing an end user well it’s not possible by machines right human observation is the most important factor so manual approach is much preferable in that such cases then you have ad hoc testing in this scenario there’s no specific approach it’s totally unplanned method of testing where the understanding in the inside of the tester is the important factor so again manual testing is much more preferable in ad hoc testing apart from that we also have exploratory test this type of testing requires test as knowledge experience analytical logical skills creativity and intuition and all that which is definitely not POS by machine so yeah even here manual testing is preferred so we are done with the first set of questions which are the basic questions that you might come across in the interviews now let’s move on to next level of questions which I call it intermediate level here we go so when is automation testing usful which test cases to automate so guys like I said earlier it’s impossible to automate all testing so it’s important to determine which test cases should you actually automate when it comes to figuring out where to start automation there are some top candidates like first of all repetitive task are primary candidates for automation because if you’re implementing manual testing here it takes a lot of time and and the task becomes boring because when you do the same task again and again it definitely becomes boring and you will make mistakes so in repetitive task automation is much better then you have certain cases where you might have to capture results and share it with other people so rather than manually exporting your data crunching the numbers and making such pretty complex graphs you can invest in a tool or automation strategy that will do this task for you you can also use Automation in the tasks that require multiple data sets so rather than manually typing an information into forms or Fields or automate this process to read an information from a data source and automatically type into the respective forms this way your time is saved then you have certain cases where you have to screen the response as in how the interface is performing or such cases you do not have to just sit and stare at the screen as in how the interface is behaving you can just automate and look for the Box later another example where you can apply automation is your non-functional testing types for example load testing suppose let’s say you’re testing a software and you are testing it for some 10 cases then manually it’s preferable but suppose if you have to test for 10,000 cases then it’s better you use Automation and you can also use automations for the test cases that run on several different Hardware or software platforms and configurations so Guys these are certain test cases that you should consider for automation another important question guys how do you actually Implement Automation and what would be the steps that you you need to follow first of all you should Define your goal for automation testing and Define which types of test cases are you going to automate so once you’re sure of what kind of test are you actually performing you need to select the right appropriate tool according to your requirements next you define the scope of automation as in you decide which test cases to automate which not to automate separate repetitive functions and all that so after determining your goal defining the scope of Automation and selecting the type of tool according to your requirements you should start planning designing and development as in you should start writing your test scripts so you create your test scripts and develop test suits to hold your test scripts next step is execution you can execute the tests that you have written using an automation tool directly or through test management tool which will in turn evoke the automation tool so this way you can execute the test cases which you have written the other important thing is once you have done with your autom the case doesn’t end there as you keep adding new features to your application or software automation scripts also need to be added reviewed and maintained for each rele cycle so maintenance also plays a very important role it becomes necessary to improve the effectiveness of your automation scripts so these are the basic steps that you follow while implementing automation so you need to know why you’re actually performing automation then you select the right tool then you decide on which test cases to actually automate based on all this requirement tools and which test cases you need to develop a test script once your script is ready you need to execute the test scripts note down the results and as soon as your application keeps changing you can keep updating your automation scripts as well so these are the steps that you follow so guys here’s another important question what are different approaches that you can take to test automation you have something called code driven approach here the focus is mainly on test case execution to find out if various sections of the code that you’ve written are performing as per EXP expectations under different conditions or not so basically here you’re checking if the application or the code that you’ve written to test the application is performing right or not under different conditions then you have graphical user interface testing or GUI testing as we call it so applications that have graphical user interface may be tested using this approach it allows the testers to record user actions and analyze them any number of times for example let’s say you want to test a website you can use framework like selenium that provides you with a record and Playback tool using which you can authorize your test without having any knowledge of scripting language so test cases here and graphical testing can be written in number of programming languages like cop Java Pearl Python and many others and then you have test automation framework we already discussed this but anyway framework is set of guidelines which are used to produce beneficial results of automated testing activity the framework brings together function libraries test data sources object details and other reusable modules basically it sets up a universal standard that all testers can actually follow moving on to next question what are the points that are covered in the planning phase of automation so earlier we discussed different set of steps that you need to follow while performing automation right and there’s one phase called planning phase and the points that you have to keep track of in this phase include deciding on the right automation tool deciding if you want to actually use automation framework as the approach to automation or not defining the scope of your automation configuring your test environment details developing test cases developing test suits and identifying test deliverables so all these are the points that you should consider in the planning phase of automation the next question how to decide the tool that one should use for automation testing in their projects so guys the first step in automation testing is to select a proper tool that suits your requirements but how do you actually go ahead and select a tool based on what criteria first you need to understand your project requirements thoroughly and then you need to identify the testing scenarios that you actually want to automate based on these requirements you make a list of tools once youve made the list for each tool identify the budget and select the tools which are within your budget after that compare the tools which are remaining in the list using some criteria like is it easy to develop and maintain the script for that tool or not does it work on platforms like web mobile desktop and other platforms is it based on on your project requirements does the tool have a test reporting functionality how many different testing types can this tool support how many other languages does the tool support So once you’ve compared different tools based on these criterias select the tool which is within your budget and supports your project requirements and gives you more Advantage based on your key requirements so that’s how actually you select a tool which suits your requirement guys now what are the primary features of a good automation tool first thing you need to consider is if or not the tool is easy to use because if you choose a tool which is difficult to use then there’s no point in using automation automation is implemented to make our task much easy so that we don’t spend much effort on our part right so you need to select tool which is easy to use and understand and you need to check if the tool is compatible with platforms and technology that you’re using it should also include features like implementing checkpoints to verify values databases or key functionalities of your application at definite points and also check if the tool does have a record and Playback support apart from these it can also check if the tool has good debugging facility robust object identification object and image testing and all that one more point you can also see if the tool that you’re using supports automation framework or not so these are certain features that very good automation tool has moving on to next question on what basis you can map the success of automation so on what basis can you actually decide if the automation is successful or not we did discuss few points earlier but let me just repeat them the main points are the defect detection ratio or you can say the number of defects that you have found out after your automation second the amount of time that you’ve taken to execute the Automation and finally the amount of reduction in the labor cost these are the three key points or strategies or criterias that you should consider while evaluating the success of your automation now what are the scripting standards that you should follow while performing automation testing just like you have certain coding standards that you should follow there are something called scripting standard that you should follow while writing your scripts for example you need to maintain uniformity naming convention commenting the functionality whenever and wherever it’s necessary adequate indentation indentation is really very important concept it changes the meaning of your code entirely if you’ve done it in the wrong way robust eror handling an ability to recover use of Frameworks and all this what are the differences between open- Source tools vendor tools and in-house Tools in automation testing very simple guys open-source tools are free to use Frameworks and applications engineers build these tools and have the source code available for free on the internet for other Engineers to use so such tools we call them open source tools then we have vendor tools these are developed by companies that come with licens to use so they cost money very often and because they’re developed by an outside Source technically techical support is often available if you have employed the tool better examples for vendor tools include V Runner silk test rational robot QA director qtp rpt and many others and as for in-house tool it is a tool that a company builds for their own use rather than purchasing vendor tools or using open- Source tools a company builds a tool for its own purpose those tools we called inhouse tools so open source tools are free and available on internet you can go ahead and use the source code as for when tools you need to have license to use and you often have to pay a lot of money then you have in-house tools where companies build those tools for themselves for their use moving on to next question what are the advantages of using an automation framework so here we go guys another important question about automation Frameworks so what are the advantages of using framework first of all they save you a lot of time you can reuse the code any number of times and they offer you maximum test case coverage automation framework they come with a proper recovery scenario and debugging facilities and obviously minimal manual intervention as well and they also provide you with easy reporting features as in once you’re done with automation you can easily create reports and share it with other people in your company so these are some advantages of using automation framework next question what are the important modules of test automation framework every test automation framework has some important modules for example you have test assertion tool this tool will provide assert statements for testing the expected values in application which is under test an example for test assertion tool you have test NG junit and many others then you have something called Data setup so whenever you’ve written a test script the test script works on some sort of data right and you need to actually take the data or you need to have a source of data so each test case needs to take the user data either from the database or from a file or embedded in a test script to manage all this we have a module called Data setup then comes build management tool using this tool you can actually manage how to build your framework according to your requirement this way you can easily write your test scripts and manage them then you have continuous integration tool or cicd tool these tools are required for integrating and deploying the changes which are done in framework at every iteration then you have reporting tool a reporting tool is required to generate readable report after the test cases are executed this way you get better view of the steps results and the failures of your Automation and lastly we have something called logging tool the logging tool and framework actually helps in better debugging of error and bugs so if you have the log of whatever You’ have done throughout the course of your automation it’ll be easier for you to find out the bugs and debug them here comes our next question what are some popular automation testing Frameworks available so let me list out few popular framework testing Frameworks well to name the most important ones I have Apache gter selenium apum Google or gray apart from this you also have test ngy cucumber water Robo framework and many others make sure you go ahead and refer to other list on internet so that you will remember many names as possible so guys what I’m meant to say is there are other popular Frameworks as well apart from the just ones which I just listed now moving on to our next question what do you think are the use cases where implementing automation is actually not suggested well we already discussed this but let’s go a little deeper one of the key testing principles is that 100% test automation is definitely not possible we discuss this as well so manual testing is still necessary let’s see which test cases cannot be automated or I could say would take too much effort to actually automate we did discuss about test cases which you need to execute only once when you have exhaustive level of documentation and all that apart from this I listed out three other cases if you remember which is ad hoc exploratory and user interface testing let me explain these three concepts to you guys so first of all you have ad hoc testing here testing is done without actual preparation and you do not have any written test cases so during ad hoc testing a specialist randomly tests the functionality of system basically his goal or his aim is to be creative and break the system and discover floss which might be not possible when you’re actually using a machine I mean in case of Auto automation so in such cases it’s better to use manual testing rather than automation testing then we have something called exploratory testing during exploratory testing a specialist or a tester tests a product like an Explorer as in he relays on his personal experience after getting the full picture of products functionality he designs test cases which he seems right so in exploratory testing you have to rely on your personal experience and design test cases so it’s definitely not suggested you to use automation testing here then comes user interface testing one problem with user interfaces is that the requirements for user interface keep changing well like I said earlier it’s not suggested to use automation when the user requirements keep changing because you might have to change your automation script again and again which will be a hard task so although we could automate basically everything manual testing still provides an effective and quality check of bugs and and disadvantages of using automation testing well after listening so much about automation testing I’m sure you guys can list it out so automation test they simplify the test case execution they save lot of time and money on you part they improve the accuracy and reliability of your software test they increase the amount of test coverage also the speed of test execution as well they reduce the maintenance cost and they give you high return of invest in case of long run talking about disadvantages maintaining developing test cases is a little difficult initial investment is high you need to have skilled resources this way they can actually make proper use of the automation tool that you’re implementing your environment setup is a little complex while automation debugging test scrips is also an issue sometimes so these are certain advantages and the disadvantages of using automation testing so guys here we’re done with the intermediate level questions and then we have advanced level questions when when I say advaned doesn’t mean they have very long answer or something like that it’s just that they’re a little tricky and you need to have proper knowledge to answer these questions or in-depth knowledge to answer these questions so let’s continue so the first question in advanced level is is automation testing a black box testing or a white box testing before I go ahead and answer this question let me explain you what blackbox testing is and white box testing is first about blackbox testing here in blackbox testing internal structure design implementation of any software product or an application or user interface that you’re testing on the user will not know any of these details prior to testing in blackbox testing but when it comes to white box testing details like structure design implementation and all this the user will know about so basically blackbox testing you are actually performing test without any prior knowledge whereas in white box testing you do have certain idea of what actually you’re performing tests on so now is automation testing a blackbox or a white box testing guys automation testing is mostly a blackbox testing as we just program the steps that a manual tester usually does without any prior knowledge of application but sometimes automated test scripts need access to database details as well which are used in the application in that case it again becomes a white box testing so automation testing can be both blackbox or white box depending on the scenarios in which automation is actually performed moving on to our next question What are the attributes of a good test automation framework a test automation framework which is considered to be good should be modular as in it should be adaptable to change tester should be able to modify the script as per the requirements next it should be reusable suppose if you have any methods or functions which you want to reuse make sure you put them in a separate file so that you can access them later and your framework should support this feature next important feature is it should be consistent the suit that you’re developing for your framework should be written in a consistent format by following all the coding practices and the scripting practices which we discussed earlier then obviously independent the test script should be written in such a way that they are independent of each other so in case of one test fails it should not hold back the remaining test cases then you have a loging feature as in your automation framework should have a login and Reporting feature like I said earlier logging feature helps you to find the bugs in the earlier stage itself and easily debug those bus for example let’s say if the script fails at any point of time having the log file will help you detect the location along with the type of error that you’re actually encountering here similarly it should also have a reporting feature it’s good to have a reporting feature so once the scripting is done we can have the results and reports sent via email lastly it should also support integration automation framework should be such a way that it’s easy to integrate with other applications like cicd so these are some features that a good test automation framework must and should have moving on to next question what are test automation framework development challenges obviously while developing a framework you will come across certain challenges first of all setting the scope of automation might be a difficult task that is you need to know properly which test cases to actually automate and where to use automation framework if or not you should use your automation framework for such test cases so deciding on that part is a little difficult then identifying the requirements of your test case is also a difficult part because since your application or software keeps changing you need to be aware of your requirements lastly selecting the tool there are plethora of tools out there so choosing a tool out of them which suits your requirement will be difficult so in such cases you can follow the rules which we discussed earlier or the steps to select a proper appropriate tool which suits your requirement moving on to next question what is datadriven testing if you remember this is a type of automation framework which we discussed so major use of automation testing is to simplify the testing process which involves complex and huge data sets by documenting the same details as in data driven test is used when you have large or huge amount of data sets that you have to deal with while testing so in data driven testing framework the test data includes input files output files and the result field and these fields are included in files like CSV Excel sheets XML files Etc so once you have all the test data in these files these files are fed to an automation tool for execution which in turn compares the expected and the actual data then it documents the result of each test data into the resulting field in those files so that’s what data driving testing is all about as you can see you have a data file and you have an expected output which is compared to actual output but before that you have test data and all your input and all that that’s fed into your driver script or the automation script which you write and the script is implemented on your application this way you get the results and then you compare the expected output with your actual output this is how data Dent testing is done next question what is test ngy let’s list out some of its prominent features so guys if you remember while listing out some of the most important test Frameworks I listed test NG as well so basically test NG is an open- Source automation testing framework where NG actually means Next Generation it is inspired by another kind of framework called junit and N unit it is designed to be better than junit actually especially when it comes to testing with integrated classes the creator of test ngy is Cedric Bo test ngy gives the developer the ability to write test more flexibly and more powerfully and some of the most prominent features of test ngy include it supports annotations annotations play a very important role it also supports Java and oops Concepts it supports testing integrated classes for example by default you do not have to create a new test class instance for every test method that you use it also has flexible runtime configuration it introduces a concept called test groups so once you have compiled your test you can just ask test NG to run your front end test or fast or slow or database test based on the way you have listed them it also supports dependent test methods P testing load testing and partial failure apart from this it offers plug-in API and supports multi-threading as well cool right has lot of features so what are the features or the advantages test NG has over junit first of all the most important feature is annotation annotation and test NG are very easier to understand they are just lines of code that can control how the method below them will be executed for example as you can see I have a image there on the screen you can see I have two annotations here first one is with priority zero and next one is Priority One so basically using these annotations and priorities I’m saying that execute this method before you actually go ahead and execute other method apart from annotations other features include test groups can be grouped very easily like I said you can just go ahead and ask test NG to run your frontend test fast or slow or database test based on the way you have listed them and it supports pilot testing which is not there in junit moving on to next question in what conditions we cannot use automation testing for aile method guys the titans of Information Technology like Google Amazon Facebook the develop software at very rapid phase so to meet the demand for their products and services they mostly use agile practices test automation is fundamental part of a Gile but there are certain times where automation testing in a Gile is useless for example when you have exhaustive level of documentation when the requirements of your application of the

software you’re testing keeps changing in such cases automation is definitely not suggested also if you have onetime task and exploratory test edge cases automation should not be implemented so these are certain cases where automation testing becomes useless in agile methods our next question what are some best practices that you should follow while automation testing so guys to actually get maximum return of investment you need to keep track of certain points while actually performing automation testing for example the scope of automation needs to be determined in detail before the start of automation so this way you actually know what you’re actually automating and what you’re expecting from the automation next off you should select the appropriate tool that meets your requirement a tool must not be selected solely based on its popularity you need to select this only because it fits your requirement you need to decide if you want to use framework in your automation or not so apart from selecting framework tool and defining the scope of automation you need to follow certain scripting standards standards have to be followed while writing the scripts for automation we discuss them earlier the standards like regularly including commands proper indentation adequate exceptional handing Etc next you need to check if the automation that you performed is successful or not to check that you can use criteria like the number of defects found the number of time taken to actually perform the Automation and the time required for automation testing for each and every release cycle customer satisfaction index productivity Improvement all the features you can consider so these are certain points that you should keep in mind when you actually performing automation so the last question what are the risk associated in automation testing so guys just like manual testing automation testing also involves risk first of all you need to ask yourself if or not you have skilled resources automation testing demands Resources with some proper knowledge about programming so if the people that you’re actually automating or writing test script doesn’t have any knowledge of programming then definitely there will be some sort of error in your test cases right so you need to make sure that you have skilled resources when you’re actually starting your Automation and you should also ask yourself are the resources which you wired capable to adapt easily to new technologies or not and the second risk is the initial cost for automation is literally High because you have to buy a lot of tools and lot of other things so make sure that the amount of money you spend compensates the testing results and it’s suggested not to use automation if you are using it for user interface because like I said earlier when you are testing an user interface the requirements keep changing and it’s difficult to keep updating your automation scripts based on the changes so if your UI is not fixed do not use Automation and next make sure that the application you’re testing is stable enough else you might encount a lot of Errors while automation testing and it will take a lot of time and effort to debug those errors and lastly stop automating the test which run only once because it does not worth the time and the effort on your part because you’re running those tests only for once so what is the point of applying automation here so avoid automating such test modules so these are certain risk which you might encounter when you performing Automation and with this we come to an end with this automation testing full course if you enjoyed listening to this full course please be kind enough to like it and you can comment on any of your doubts and queries we will reply to them ear the earliest do look up for more videos and playlist And subscribe to the edas YouTube channel to learn more thank you for watching and happy learning.

By Amjad Izhar
Contact: amjad.izhar@gmail.com
https://amjadizhar.blog


Discover more from Amjad Izhar Blog

Subscribe to get the latest posts sent to your email.

Comments

Leave a comment