SlideShare a Scribd company logo
1 of 20
VISUAL TESTING OF
WEB APPS IN A
HEADLESS
ENVIRONMENT
Manish Katoch, Software Developer
1
THE PREMISES
Team Alpha wants to build a perfect web
application.
“ We want to it be robust, bug free, stellar! The best of
the best. We will provide an unparalleled user
experience!”
2
THE STRATEGY
3
all is good until..
“How do we ensure we don’t break
the UI of our product?”
“We have GUI tests, it will ensure all
our functionality is flawless!”
“But what about aesthetics, the look
and feel?”
“Err…”
UI Tests
API/Integration
Tests
Unit Tests
VISUAL TESTS SAVES THE DAY
4
1
2
Go to
screen
Take a
snapshot
While there
are more
screens
Save images
1
2
Go to
screen
Take a
snapshot
While there
are more
screens
Compare
images
Identical Differences
First Pass Successive Passes
THE SETUP
5
Code
committed
Build
Created
Unit/Integration
tests
Git
CI-CD system
Functional
Tests
Visual
Tests
No display Agents (virtualized or physical)
(Build and Unit tests)
Test agents with displays
(Functional and visual tests)
BUT…
6
“The tests are flaky they thought, the tools insufficient!
the identical images won’t match. ”
WHY MY TESTS ARE FLAKY?
Pixel Differences
■ pixel per inch (PPI).
■ PPI is defined as number of pixel that a display can project.
● PPI is calculated as
𝑁𝑢𝑚𝑏𝑒𝑟 𝑜𝑓 𝑝𝑖𝑥𝑒𝑙 𝑜𝑛 𝑎 𝑑𝑖𝑎𝑔𝑜𝑛𝑎𝑙
𝑑𝑖𝑎𝑔𝑜𝑛𝑎𝑙 𝑠𝑖𝑧𝑒 𝑜𝑓 𝑑𝑖𝑠𝑝𝑙𝑎𝑦 𝑖𝑛 𝑖𝑛𝑐ℎ
7
WHY MY TESTS ARE FLAKY? - II
8
For 1024x768 resolution
98.4 PPI
85.33 PPI
75.29 PPI
The floating point arithmetic is
hardware dependent.
It can differ for same
manufacturer too.
WHY MY TESTS ARE FLAKY? - III
What if we could make PPI a constant whole
number?
Good idea. Problem: PPI is determined by hardware
display.
Can we program hardware displays?
9
WHY MY TESTS ARE FLAKY? - IV
10
Graphics
Processing Unit
• Processes
data
• Determines
what to
display
• Puts on its
RAM called
Frame Buffer.
Frame Buffer
• Part of
modern
GPUs.
• Is essentially
a bitmap of
image to be
displayed.
• Evolved to
also denote
colors via
lookup
tables.
• Creates video
signals using
DACs
Display
• Displays the
video signal
recieved
WHY MY TESTS ARE FLAKY? - V
11
The virtual frame buffer: Xvfb
Graphics
Processing Unit
• Processes
data
• Determines
what to
display
• Puts on its
RAM called
Frame Buffer.
Virtual Frame
Buffer
• Lives in
RAM.
• Implements
entire
framebuffer
protocol
• End point to
GPU
Display
THE IMPROVED SETUP FOR VISUAL TESTS
12
Start Xvfb with
1024x768
resolution and
100 PPI
Launch
application
(Browser)
Execute your
visual
tests
Report
“Fixed PPI and resolution guarantees that the image comparison will be truthful“
A good test suite must be
repeatable and should give the
same result every single time
13
TAKING IT A STEP FURTHER
 Snowflake agents.
 repeatability vs flakiness.
“Containerize the test suite!”
14
CONTAINERS: DOCKER
Docker: OS level virtualization ( no virtual machines )
 Think of it as layers of different files, unified together into a single
file system view
 This OS like abstraction gives you ability to run your tests in a
sandbox environment.
15
Image courtesy devopscube.com
USING DOCKER
 Create your Docker image with all the dependency packages
added to the image
 Share this image on a location accessible to your CI/CD system.
 Run this image, mount your test files into a folder and
execute tests from there.
16
Image courtesy devopscube.com
THE FINAL SETUP
17
Fetch Docker
image if not
already present
Checkout code/
Download Build
Start Docker
image
Run Visual TestsReport To CI
Stop Docker
image
WHAT DID
TEAM ALPHA
ACHIEVE?
A consistent and headless environment to
run builds and all tests.
They moved to totally virtualized
environment
No more flaky visual tests, very high
repeatability
Full reusability of infrastructure
Savings on specialized test tools
Early feedbacks even on UI specifications
Rave reviews of their product!
18
WHO IS TEAM ALPHA?
19
Image courtesy devopscube.com
Team Alpha is not a team of developers or
a team of QAs.
THANK YOU

More Related Content

What's hot

What's hot (20)

Genymotion with Jenkins
Genymotion with JenkinsGenymotion with Jenkins
Genymotion with Jenkins
 
Continuous Integration for your Android projects
Continuous Integration for your Android projectsContinuous Integration for your Android projects
Continuous Integration for your Android projects
 
Cross browser Testing JavaScript
Cross browser Testing JavaScriptCross browser Testing JavaScript
Cross browser Testing JavaScript
 
Using CI for continuous delivery Part 1
Using CI for continuous delivery Part 1Using CI for continuous delivery Part 1
Using CI for continuous delivery Part 1
 
Modern devOps with Docker
Modern devOps with DockerModern devOps with Docker
Modern devOps with Docker
 
No more waiting for API - Android Stub Server
No more waiting for API - Android Stub ServerNo more waiting for API - Android Stub Server
No more waiting for API - Android Stub Server
 
Production ready word press
Production ready word pressProduction ready word press
Production ready word press
 
Android + jenkins
Android + jenkinsAndroid + jenkins
Android + jenkins
 
Continuous Delivery su progetti Java: cosa abbiamo imparato facendoci del male
Continuous Delivery su progetti Java: cosa abbiamo imparato facendoci del maleContinuous Delivery su progetti Java: cosa abbiamo imparato facendoci del male
Continuous Delivery su progetti Java: cosa abbiamo imparato facendoci del male
 
Ci for-android-apps
Ci for-android-appsCi for-android-apps
Ci for-android-apps
 
Continous UI testing with Espresso and Jenkins
Continous UI testing with Espresso and JenkinsContinous UI testing with Espresso and Jenkins
Continous UI testing with Espresso and Jenkins
 
Jenkins
JenkinsJenkins
Jenkins
 
Async webdriverjs
Async webdriverjsAsync webdriverjs
Async webdriverjs
 
Building the Test Automation Framework - Jenkins for Testers
Building the Test Automation Framework - Jenkins for TestersBuilding the Test Automation Framework - Jenkins for Testers
Building the Test Automation Framework - Jenkins for Testers
 
Testing with Jenkins, Selenium and Continuous Deployment
Testing with Jenkins, Selenium and Continuous DeploymentTesting with Jenkins, Selenium and Continuous Deployment
Testing with Jenkins, Selenium and Continuous Deployment
 
Seattle Docker meetup March 13th 2014
Seattle Docker meetup March 13th 2014Seattle Docker meetup March 13th 2014
Seattle Docker meetup March 13th 2014
 
Automate your build on Android with Jenkins
Automate your build on Android with JenkinsAutomate your build on Android with Jenkins
Automate your build on Android with Jenkins
 
Jenkins CI
Jenkins CIJenkins CI
Jenkins CI
 
Jenkins introduction
Jenkins introductionJenkins introduction
Jenkins introduction
 
Continuous Testing using Shippable and Docker
Continuous Testing using Shippable and DockerContinuous Testing using Shippable and Docker
Continuous Testing using Shippable and Docker
 

Similar to Visual Testing Of Web Apps in a Headless Environment

Similar to Visual Testing Of Web Apps in a Headless Environment (20)

vodQA(Pune) 2018 - Visual testing of web apps in headless environment manis...
vodQA(Pune) 2018 - Visual testing of web apps in headless environment   manis...vodQA(Pune) 2018 - Visual testing of web apps in headless environment   manis...
vodQA(Pune) 2018 - Visual testing of web apps in headless environment manis...
 
Arquillian: Effective tests from the client to the server
Arquillian: Effective tests from the client to the serverArquillian: Effective tests from the client to the server
Arquillian: Effective tests from the client to the server
 
Designing Top-Class Test Suites for Web Applications
Designing Top-Class Test Suites for Web ApplicationsDesigning Top-Class Test Suites for Web Applications
Designing Top-Class Test Suites for Web Applications
 
Colorful world-of-visual-automation-testing-latest
Colorful world-of-visual-automation-testing-latestColorful world-of-visual-automation-testing-latest
Colorful world-of-visual-automation-testing-latest
 
Advanced automated visual testing with Selenium
Advanced automated visual testing with SeleniumAdvanced automated visual testing with Selenium
Advanced automated visual testing with Selenium
 
Advanced Automated Visual Testing
Advanced Automated Visual TestingAdvanced Automated Visual Testing
Advanced Automated Visual Testing
 
Visual Regression Testing: In search of an Ember solution
Visual Regression Testing: In search of an Ember solutionVisual Regression Testing: In search of an Ember solution
Visual Regression Testing: In search of an Ember solution
 
Continuous integration using jenkins
Continuous integration using jenkinsContinuous integration using jenkins
Continuous integration using jenkins
 
Introduction to automated visual testing
Introduction to automated visual testingIntroduction to automated visual testing
Introduction to automated visual testing
 
SeConf2015: Advanced Automated Visual Testing With Selenium
SeConf2015: Advanced Automated Visual Testing With SeleniumSeConf2015: Advanced Automated Visual Testing With Selenium
SeConf2015: Advanced Automated Visual Testing With Selenium
 
Adam carmi
Adam carmiAdam carmi
Adam carmi
 
Advanced Visual Test Automation with Selenium
Advanced Visual Test Automation with SeleniumAdvanced Visual Test Automation with Selenium
Advanced Visual Test Automation with Selenium
 
Appium overview (Selenium Israel #2, Feb. 2014)
Appium overview (Selenium Israel #2, Feb. 2014)Appium overview (Selenium Israel #2, Feb. 2014)
Appium overview (Selenium Israel #2, Feb. 2014)
 
Automated Visual Testing That Does Not Suck
Automated Visual Testing That Does Not SuckAutomated Visual Testing That Does Not Suck
Automated Visual Testing That Does Not Suck
 
Automated Visual Testing That Doesn't Suck!
Automated Visual Testing That Doesn't Suck!Automated Visual Testing That Doesn't Suck!
Automated Visual Testing That Doesn't Suck!
 
Selenium Camp 2016 - Kiev, Ukraine
Selenium Camp 2016 -  Kiev, UkraineSelenium Camp 2016 -  Kiev, Ukraine
Selenium Camp 2016 - Kiev, Ukraine
 
Selenium Based Visual Test Automation
Selenium Based Visual Test AutomationSelenium Based Visual Test Automation
Selenium Based Visual Test Automation
 
Designing an effective hybrid apps automation framework
Designing an effective hybrid apps automation frameworkDesigning an effective hybrid apps automation framework
Designing an effective hybrid apps automation framework
 
Web Test Automation Framework - IndicThreads Conference
Web Test Automation Framework  - IndicThreads ConferenceWeb Test Automation Framework  - IndicThreads Conference
Web Test Automation Framework - IndicThreads Conference
 
Selenium-based Visual Test Automation
Selenium-based Visual Test AutomationSelenium-based Visual Test Automation
Selenium-based Visual Test Automation
 

Recently uploaded

%+27788225528 love spells in Toronto Psychic Readings, Attraction spells,Brin...
%+27788225528 love spells in Toronto Psychic Readings, Attraction spells,Brin...%+27788225528 love spells in Toronto Psychic Readings, Attraction spells,Brin...
%+27788225528 love spells in Toronto Psychic Readings, Attraction spells,Brin...
masabamasaba
 
%+27788225528 love spells in Knoxville Psychic Readings, Attraction spells,Br...
%+27788225528 love spells in Knoxville Psychic Readings, Attraction spells,Br...%+27788225528 love spells in Knoxville Psychic Readings, Attraction spells,Br...
%+27788225528 love spells in Knoxville Psychic Readings, Attraction spells,Br...
masabamasaba
 
%+27788225528 love spells in Atlanta Psychic Readings, Attraction spells,Brin...
%+27788225528 love spells in Atlanta Psychic Readings, Attraction spells,Brin...%+27788225528 love spells in Atlanta Psychic Readings, Attraction spells,Brin...
%+27788225528 love spells in Atlanta Psychic Readings, Attraction spells,Brin...
masabamasaba
 
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
Health
 
Love witchcraft +27768521739 Binding love spell in Sandy Springs, GA |psychic...
Love witchcraft +27768521739 Binding love spell in Sandy Springs, GA |psychic...Love witchcraft +27768521739 Binding love spell in Sandy Springs, GA |psychic...
Love witchcraft +27768521739 Binding love spell in Sandy Springs, GA |psychic...
chiefasafspells
 
%+27788225528 love spells in Boston Psychic Readings, Attraction spells,Bring...
%+27788225528 love spells in Boston Psychic Readings, Attraction spells,Bring...%+27788225528 love spells in Boston Psychic Readings, Attraction spells,Bring...
%+27788225528 love spells in Boston Psychic Readings, Attraction spells,Bring...
masabamasaba
 

Recently uploaded (20)

%+27788225528 love spells in Toronto Psychic Readings, Attraction spells,Brin...
%+27788225528 love spells in Toronto Psychic Readings, Attraction spells,Brin...%+27788225528 love spells in Toronto Psychic Readings, Attraction spells,Brin...
%+27788225528 love spells in Toronto Psychic Readings, Attraction spells,Brin...
 
%in Rustenburg+277-882-255-28 abortion pills for sale in Rustenburg
%in Rustenburg+277-882-255-28 abortion pills for sale in Rustenburg%in Rustenburg+277-882-255-28 abortion pills for sale in Rustenburg
%in Rustenburg+277-882-255-28 abortion pills for sale in Rustenburg
 
WSO2CON 2024 - How to Run a Security Program
WSO2CON 2024 - How to Run a Security ProgramWSO2CON 2024 - How to Run a Security Program
WSO2CON 2024 - How to Run a Security Program
 
WSO2Con2024 - WSO2's IAM Vision: Identity-Led Digital Transformation
WSO2Con2024 - WSO2's IAM Vision: Identity-Led Digital TransformationWSO2Con2024 - WSO2's IAM Vision: Identity-Led Digital Transformation
WSO2Con2024 - WSO2's IAM Vision: Identity-Led Digital Transformation
 
%+27788225528 love spells in Knoxville Psychic Readings, Attraction spells,Br...
%+27788225528 love spells in Knoxville Psychic Readings, Attraction spells,Br...%+27788225528 love spells in Knoxville Psychic Readings, Attraction spells,Br...
%+27788225528 love spells in Knoxville Psychic Readings, Attraction spells,Br...
 
%+27788225528 love spells in Atlanta Psychic Readings, Attraction spells,Brin...
%+27788225528 love spells in Atlanta Psychic Readings, Attraction spells,Brin...%+27788225528 love spells in Atlanta Psychic Readings, Attraction spells,Brin...
%+27788225528 love spells in Atlanta Psychic Readings, Attraction spells,Brin...
 
WSO2CON 2024 - Building the API First Enterprise – Running an API Program, fr...
WSO2CON 2024 - Building the API First Enterprise – Running an API Program, fr...WSO2CON 2024 - Building the API First Enterprise – Running an API Program, fr...
WSO2CON 2024 - Building the API First Enterprise – Running an API Program, fr...
 
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
 
%in Stilfontein+277-882-255-28 abortion pills for sale in Stilfontein
%in Stilfontein+277-882-255-28 abortion pills for sale in Stilfontein%in Stilfontein+277-882-255-28 abortion pills for sale in Stilfontein
%in Stilfontein+277-882-255-28 abortion pills for sale in Stilfontein
 
%in Bahrain+277-882-255-28 abortion pills for sale in Bahrain
%in Bahrain+277-882-255-28 abortion pills for sale in Bahrain%in Bahrain+277-882-255-28 abortion pills for sale in Bahrain
%in Bahrain+277-882-255-28 abortion pills for sale in Bahrain
 
WSO2CON 2024 - Does Open Source Still Matter?
WSO2CON 2024 - Does Open Source Still Matter?WSO2CON 2024 - Does Open Source Still Matter?
WSO2CON 2024 - Does Open Source Still Matter?
 
Direct Style Effect Systems - The Print[A] Example - A Comprehension Aid
Direct Style Effect Systems -The Print[A] Example- A Comprehension AidDirect Style Effect Systems -The Print[A] Example- A Comprehension Aid
Direct Style Effect Systems - The Print[A] Example - A Comprehension Aid
 
%in Soweto+277-882-255-28 abortion pills for sale in soweto
%in Soweto+277-882-255-28 abortion pills for sale in soweto%in Soweto+277-882-255-28 abortion pills for sale in soweto
%in Soweto+277-882-255-28 abortion pills for sale in soweto
 
WSO2CON 2024 - API Management Usage at La Poste and Its Impact on Business an...
WSO2CON 2024 - API Management Usage at La Poste and Its Impact on Business an...WSO2CON 2024 - API Management Usage at La Poste and Its Impact on Business an...
WSO2CON 2024 - API Management Usage at La Poste and Its Impact on Business an...
 
OpenChain - The Ramifications of ISO/IEC 5230 and ISO/IEC 18974 for Legal Pro...
OpenChain - The Ramifications of ISO/IEC 5230 and ISO/IEC 18974 for Legal Pro...OpenChain - The Ramifications of ISO/IEC 5230 and ISO/IEC 18974 for Legal Pro...
OpenChain - The Ramifications of ISO/IEC 5230 and ISO/IEC 18974 for Legal Pro...
 
Love witchcraft +27768521739 Binding love spell in Sandy Springs, GA |psychic...
Love witchcraft +27768521739 Binding love spell in Sandy Springs, GA |psychic...Love witchcraft +27768521739 Binding love spell in Sandy Springs, GA |psychic...
Love witchcraft +27768521739 Binding love spell in Sandy Springs, GA |psychic...
 
%in Benoni+277-882-255-28 abortion pills for sale in Benoni
%in Benoni+277-882-255-28 abortion pills for sale in Benoni%in Benoni+277-882-255-28 abortion pills for sale in Benoni
%in Benoni+277-882-255-28 abortion pills for sale in Benoni
 
%+27788225528 love spells in Boston Psychic Readings, Attraction spells,Bring...
%+27788225528 love spells in Boston Psychic Readings, Attraction spells,Bring...%+27788225528 love spells in Boston Psychic Readings, Attraction spells,Bring...
%+27788225528 love spells in Boston Psychic Readings, Attraction spells,Bring...
 
WSO2CON2024 - It's time to go Platformless
WSO2CON2024 - It's time to go PlatformlessWSO2CON2024 - It's time to go Platformless
WSO2CON2024 - It's time to go Platformless
 
Crypto Cloud Review - How To Earn Up To $500 Per DAY Of Bitcoin 100% On AutoP...
Crypto Cloud Review - How To Earn Up To $500 Per DAY Of Bitcoin 100% On AutoP...Crypto Cloud Review - How To Earn Up To $500 Per DAY Of Bitcoin 100% On AutoP...
Crypto Cloud Review - How To Earn Up To $500 Per DAY Of Bitcoin 100% On AutoP...
 

Visual Testing Of Web Apps in a Headless Environment

  • 1. VISUAL TESTING OF WEB APPS IN A HEADLESS ENVIRONMENT Manish Katoch, Software Developer 1
  • 2. THE PREMISES Team Alpha wants to build a perfect web application. “ We want to it be robust, bug free, stellar! The best of the best. We will provide an unparalleled user experience!” 2
  • 3. THE STRATEGY 3 all is good until.. “How do we ensure we don’t break the UI of our product?” “We have GUI tests, it will ensure all our functionality is flawless!” “But what about aesthetics, the look and feel?” “Err…” UI Tests API/Integration Tests Unit Tests
  • 4. VISUAL TESTS SAVES THE DAY 4 1 2 Go to screen Take a snapshot While there are more screens Save images 1 2 Go to screen Take a snapshot While there are more screens Compare images Identical Differences First Pass Successive Passes
  • 5. THE SETUP 5 Code committed Build Created Unit/Integration tests Git CI-CD system Functional Tests Visual Tests No display Agents (virtualized or physical) (Build and Unit tests) Test agents with displays (Functional and visual tests)
  • 6. BUT… 6 “The tests are flaky they thought, the tools insufficient! the identical images won’t match. ”
  • 7. WHY MY TESTS ARE FLAKY? Pixel Differences ■ pixel per inch (PPI). ■ PPI is defined as number of pixel that a display can project. ● PPI is calculated as 𝑁𝑢𝑚𝑏𝑒𝑟 𝑜𝑓 𝑝𝑖𝑥𝑒𝑙 𝑜𝑛 𝑎 𝑑𝑖𝑎𝑔𝑜𝑛𝑎𝑙 𝑑𝑖𝑎𝑔𝑜𝑛𝑎𝑙 𝑠𝑖𝑧𝑒 𝑜𝑓 𝑑𝑖𝑠𝑝𝑙𝑎𝑦 𝑖𝑛 𝑖𝑛𝑐ℎ 7
  • 8. WHY MY TESTS ARE FLAKY? - II 8 For 1024x768 resolution 98.4 PPI 85.33 PPI 75.29 PPI The floating point arithmetic is hardware dependent. It can differ for same manufacturer too.
  • 9. WHY MY TESTS ARE FLAKY? - III What if we could make PPI a constant whole number? Good idea. Problem: PPI is determined by hardware display. Can we program hardware displays? 9
  • 10. WHY MY TESTS ARE FLAKY? - IV 10 Graphics Processing Unit • Processes data • Determines what to display • Puts on its RAM called Frame Buffer. Frame Buffer • Part of modern GPUs. • Is essentially a bitmap of image to be displayed. • Evolved to also denote colors via lookup tables. • Creates video signals using DACs Display • Displays the video signal recieved
  • 11. WHY MY TESTS ARE FLAKY? - V 11 The virtual frame buffer: Xvfb Graphics Processing Unit • Processes data • Determines what to display • Puts on its RAM called Frame Buffer. Virtual Frame Buffer • Lives in RAM. • Implements entire framebuffer protocol • End point to GPU Display
  • 12. THE IMPROVED SETUP FOR VISUAL TESTS 12 Start Xvfb with 1024x768 resolution and 100 PPI Launch application (Browser) Execute your visual tests Report “Fixed PPI and resolution guarantees that the image comparison will be truthful“
  • 13. A good test suite must be repeatable and should give the same result every single time 13
  • 14. TAKING IT A STEP FURTHER  Snowflake agents.  repeatability vs flakiness. “Containerize the test suite!” 14
  • 15. CONTAINERS: DOCKER Docker: OS level virtualization ( no virtual machines )  Think of it as layers of different files, unified together into a single file system view  This OS like abstraction gives you ability to run your tests in a sandbox environment. 15 Image courtesy devopscube.com
  • 16. USING DOCKER  Create your Docker image with all the dependency packages added to the image  Share this image on a location accessible to your CI/CD system.  Run this image, mount your test files into a folder and execute tests from there. 16 Image courtesy devopscube.com
  • 17. THE FINAL SETUP 17 Fetch Docker image if not already present Checkout code/ Download Build Start Docker image Run Visual TestsReport To CI Stop Docker image
  • 18. WHAT DID TEAM ALPHA ACHIEVE? A consistent and headless environment to run builds and all tests. They moved to totally virtualized environment No more flaky visual tests, very high repeatability Full reusability of infrastructure Savings on specialized test tools Early feedbacks even on UI specifications Rave reviews of their product! 18
  • 19. WHO IS TEAM ALPHA? 19 Image courtesy devopscube.com Team Alpha is not a team of developers or a team of QAs.