Web Application Testing
Learning Outcomes
After Completing this session, you should be able to explain about
Common Testing Terminologies
Performing, Unit, Integration, End-To-End Testing
Functional and Non Functional Testing
Regression and Performance Testing
UI and REST API Testing
Question
What could go wrong if you do not test your application?
https://www.information-age.com/the-10-worst-web-application-failures-294446/
Why is Testing Necessary?
To evaluate work product such as requirement, design, and code
To verify weather all the requirements specified have been fulfilled
To validate weather the test object is complete and works as users and other
stakeholders expect
Why is Testing Necessary?
To build confidence in the level of quality of the test object
To prevent defects
To find failures and defects
To reduce the level of risk of inadequate software quality
Attributes of Testing
There are three attributes of automated testing:
Scope - How much of the code does the test touch (Test Coverage)?
Tests can run on a single method, across the entire application,
or somewhere in between.
Speed - How fast does the test run?
Test speeds can vary from millisecond to several minutes.
Attributes of Testing
There are three attributes of automated testing:
Fidelity - How "real-world" is the test?
For example, if part of the code you're testing needs to make a
network request, does the test code actually make this network
request or does it fake the result?
If the test actually talks with the network, this means it has higher
fidelity, but also takes longer and could give flaky results if the
network is occasionally down.
Attributes of Testing
Speed and fidelity are a trade off - the faster the test, generally the less
fidelity and vice versa
The Testing Pyramid
The Testing Pyramid
Based on scope, speed and fidelity, we can have three levels of test
Unit Tests/Small Tests
These are highly focused tests that run on a single class, usually a single
method in that class.
They have low fidelity since in the real world, your app involves much
more than the execution of one method or class.
They should be fast enough to run every time you change your code.
The Testing Pyramid
Integration Tests/Medium Tests
These test the interaction of several classes to make sure they behave
as expected when used together
One way to structure integration tests is to have them test a single
feature
They test a larger scope of code than unit tests but are still optimized
to run fast versus having full fidelity
The Testing Pyramid
End-to-End Tests/Large Tests
Test a combination of features working together
They test large portions of the app, simulate real usage closely and
therefore are slow.
They have the highest fidelity and tell you that your application actually
works as a whole.
Testing Terminology
Test Coverage
The percentage of your code that is executed by your tests.
If you have 100 lines of code, and your tests run through 80 of them, then
you have 80% coverage.
Testing Terminology
Test Driven Development (TDD)
A school of programming thought that says instead of writing your feature
code first, you write your tests first.
Then you write your feature code with the goal of passing your tests
Testing Terminology
Test Doubles
Test doubles are objects that stand in for a real object, such as a
networking class and database class
when testing, you can swap in a fake networking or database class to
provide speed and determinism at the expense of fidelity
Categories of test doubles include Fakes, Dummies, Mocks, and Spies
Testing Terminology
Given, When, Then
Also known as "Arrange, Act, Assert."
They specify how test codes are grouped into sections
Testing Terminology
Given
The first section sets up the desired state of the app
When
This section of the test specifies the functionality or actions that take
place.
Then
This is where you put all your statements that verify what you expected
to happen came to pass.
Testing Terminology
White Box Testing
White box testing refers to testing where we do have access to the
source code and are able to inspect it
Testing Terminology
Black Box Testing
In case of black box testing we only have access to the tested artifact’s
external interface
Question
What Kind of Test should you perform
Before, during, and after development?
Types of Test
Functional and nonfunctional testing
Functional testing answers the questions
Does the software do what it was intended to do?
Does it not do what it was not intended to do?
Types of Test
Functional and nonfunctional testing
Nonfunctional testing
targets a solution’s quality attributes such as usability, reliability,
performance, maintainability, portability and security.
Types of Test
Functional and nonfunctional testing
Functional tests target the what, whereas non-functional tests target
the how
Performance Testing
Performance testing focuses on a system’s responsiveness, throughput, and
reliability given different loads
How fast does a web page load?
If a user clicks a button on the screen, are the contents immediately
updated?
How long does it take to process 10,000 operations
Performance Testing
Load testing
The purpose of load testing is to determine the system’s behavior in
response to increased load
When the load is increased beyond the maximum “normal load,” load
testing turns into stress testing
A special type of stress testing is spike testing, where the maximum
normal load is exceeded very rapidly, as if there were a spike in the load
Security Testing
Testing Confidentiality
Data confidentiality and Privacy
Testing Integrity
Data and System Integrity
Testing Availability
Resources are available to authorized users and denied to others
Regression Testing
The purpose of regression testing is to establish whether changes to the
system have broken existing functionality or caused old defects to
resurface
Smoke Testing
The term smoke testing originated from engineers testing pipes by blowing
smoke into them. If there was a crack, the smoke would seep out through it.
Smoke Testing
In software development, smoke testing refers to one or a few simple tests
executed immediately after the system has been deployed.
Smoke Testing
The “Hello World” of smoke testing is logging into the application, such a
test provides a great deal of information
The application has been deployed successfully
The network connection works
The database could be reached, ...
Testing REST API: What to Test?
Security
testing checks how well the API is protected from malicious actors
it ensures that resources (data) are protected and only provided to
authenticated or authorized clients
Testing REST API: What to Test?
Performance
testing makes sure that an API can respond to requests of specific sizes,
or can respond to clients quickly enough to satisfy system requirements
Testing REST API: What to Test?
Other
Http Status Code
Response Header
Response Body
Testing UI
Write tests that work with browsers, and verify that the UI code is functioning
properly
You can use tools such as
Playwright
Cypress
Selenium
Testing in NestJS
https://docs.nestjs.com/fundamentals/testing
Reference
Developer Testing: Building Quality into Software, By Alexander Tarlinder,
2017
Foundation of Software Testing, ISTQB Certification, 4th Edition
The Art of Software Testing, 3rd Edition