SlideShare une entreprise Scribd logo
1  sur  89
Parallel Run Selenium Tests
in a Good / Bad Way
Anton Semenchenko
Anton Semenchenko
Creator of communities www.COMAQA.BY and
www.CoreHard.by, founder of company
www.DPI.Solutions, «tricky» manager at EPAM
Systems. Almost 15 years of experience in IT, main
specialization: Automation, С++ and lower
development, management, sales.
Anton Semenchenko
EPAM Systems, Software Testing Manager
Agenda
• Why do we need run tests in parallel?
• Challenge
• Solution
• Algorithm
• Static or Dynamic; stateless or statefull: Architecture related questions
• Metrics definition
• Custom Test Runner: General scheme
• Risks based “good” examples of customized Test Runners
• “Bad” examples of customized Test Runners
• Refactoring as a criteria – detailed information
• Metrics definition
Why do we need run tests in parallel?
Challenge
Challenge
• How to invest min amount of time  money to run tests in parallel
• How to maximize QA Automation ROI
• ROI >> 0
Solution
Let’s define Algorithm “How to run tests in parallel efficiently”
Algorithm
• Define Tests properly  Tests attributes
• Define All shared entities
• Select proper Selenium WebDriver Wrapper
• Select proper Architecture
• Test Parallel approach or combination
o Some standard Test Runner
o Build instruments
o Several Processes
o Selenium Grid
o OS  Language specific multithreading
Why do we need run tests in parallel?
2 types of reasons:
• Process related reasons
• Project specific reasons
o Risk based reasons
Meaning:
• Test == Feedback Mechanism
• Test Value == Feedback Value
Feedback’s in Scrum example
Methodology – as a predictable way of risk management for some context
• Pre planning grooming – run-time feedback from customer side
• Planning poker during Iteration planning – run-time feedback from team side mostly +
customer side too
• Daily Stand up – daily feedback, Team side
• Iteration Demo – per iteration feedback, customer side
• Iteration Retrospective - per iteration feedback, Team side
• Pair programming (as an example) – run-time technical feedback
• Unit Tests + CI – close to run-time technical feedback
• QA Automation Tests + CI + Report + Report Analyses – daily feedback mechanism
• And so on
Feedback’s in Scrum example
Methodology – as a predictable way of risk management for some context
Goals
1. Decrease QA Automation “Window”
2. Decrease Test results analysis “Window”
3. Increase Regression frequency
4. Decrease  Optimize hardware utilization
1. Electricity
2. Hardware costs (buy or rent)
5. Increase QA Automation ROI >> 0
Algorithm
• Define Tests properly  Tests attributes
• Define All shared entities
• Select proper Selenium WebDriver Wrapper
• Select proper Architecture
• Test Parallel approach or combination
o Some standard Test Runner
o Build instruments
o Several Processes
o Selenium Grid
o OS  Language specific multithreading
Algorithm – The best way
Test attributes
Atomic tests without
dependencies
Some dependency
resolver
Add specific annotation plus
add new feature to existing
standard test-runner
Develop your own test-
runner with integrated
dependency resolver
Algorithm – The best way
How to choose – ROI calculator as a solution
Atomic tests without
dependencies
Some dependency
resolver
Decreased time to runDecreased test debug time
Lower hardware costs + electricityDecreased test update/support time
No time spent on dependency definition
No time spent on dependency resolver
Lower entry barrier for newcomers
Less documentation
Algorithm – The best way
In most cases – no dependencies:
• More expensive specialists
• Higher hardware and electricity costs
Algorithm – The best way
o Define All shared entities
o Improve Architecture
o For example:
• Pre-steps using DB
• DB Layer:
 Singleton
 Thread-safe
 Optimize (use profiler)
 Migrate to Singleton-Bus (instance per thread, in a thread-safe way)
 Solution: in an iteration-based way, start from the simplest singleton
Algorithm – The best way
o Define All shared entities
o Improve Architecture
o For example:
• Logger
• Tracer
• Report Engine:
 +1 more reason to integrate Test Runner and
Report Engine, knows how to run in parallel and
integrate reports pieces into one document
Algorithm – The best way
o Define All shared entities
o Improve Architecture
o For example:
• Data-provider
• Any other orthogonal entity:
 Define
 Isolate
 Remember
Algorithm – The best way
o Select proper Selenium WebDriver Wrapper
• Mature
• Thread-safe
• Easy-to-use “downcast”
• Examples:
 Selenide – easy to use
 JDI evolution
 Serenity – more complicated to use
Algorithm – The best way
o Select proper Architecture
• Stateless architecture
• Static Page Object
• Isolate all orthogonal shared entities
• Use “From Conditional to Patterns and
reverse” Refactoring as a metric + ROI to prof
Algorithm – The best way
o Select proper Architecture
• Convert to Stateful architecture
• Dynamic Page Object
• Update all isolated orthogonal shared
entities
• Re-calculate ROI and reuse “From
Conditional to Patterns and reverse” in
a systematical way
Algorithm
• Define Tests properly  Tests attributes
• Define All shared entities
• Select proper Selenium WebDriver Wrapper
• Select proper Architecture
• Test Parallel approach or combination
o Some standard Test Runner
o Build instruments
o Several Processes
o Selenium Grid
o OS  Language specific multithreading
Algorithm – The best way
o Some standard test-runner
• The lowest layer
• Standard (or some specialized), stable, efficient,
simple, most of instruments use it as a basement
Algorithm – The best way
o Build instruments
• Use parameters to configure test run
• Use Test Runner as a basement
• Some kind of Test Runner wrapper
• + 1 layer => less stable, less efficient, sometimes
easier to use
• Anyway, doesn’t work without Test Runner
• Maven example: Thread Count and param: Test
Method, Test Class, both
Algorithm – The best way
o Several processes
• Using CI
• Team City (Job Configuration)
• Jenkins (Job Configuration)
• Extensive way
Algorithm – The best way
o Selenium Grid
• Infrastructure
• Could be used for indirect test run, but this is not
primary purpose
• Could be combined with all other solutions
Algorithm – The best way
o Language / OS specific mechanisms
• Language, focusing on multithreading
• Java
 Process
 Thread / Fork
 JVM (Java property config or command line
arguments)
Out of scope
OS and Language related questions of multi-threading
Reasons
Transition complexity
With proper architecture (plus mature, not self-developed, WebDriver wrapper, like Selenide) ->
0, just 3-5-10 places in a solution, QA Automation Architect or Developer should invest several
hours
With improper architecture (without any wrapper or with a self-developed WebDriver wrapper) -
> complicated question
Invest days or weeks to Update Architecture and wrapper (better, to use, mature one)
Invest weeks or months to update tons of source code places
Without any architecture -> nightmare
Invest weeks to redesign tests using proper Architecture and mature wrapper
Invest months or even years just to update tests
ROI as a metric
Architecture related questions
Static or Dynamic; stateless or statefull: Architecture related questions?
Architecture related questions
1. Static: transform to parallel run
2. Dynamic: transform to parallel run
3. Static <=> Dynamic: transformation criteria
4. Transformation example
5. Detailed information about transformation
6. Static or Dynamic – as an architecture basement
Leak of stateless examples
Leak of stateless examples in standard Selenium documentation
IMHO: due to Selenium development process
A tiny group of extra professionals  developers
No processes
No backlog
No priorities
No сcommittee for backlog and backlog items prioritization
No “iterations”
How to add new feature
Just to implement and then add for review
1. Let’s compare:
Photo
Share – looks like parallelism (easy parallelism).
Video
Share – looks like parallelism (not trivial parallelism).
State-less or state-full solution?
1. How easy transform solution from “single” to “multi” threading (to decrease “QA
Automation Windows”)
State-less – like share a photo
Just 5 minutes of work.
State-full – like share a video
Not trivial task, could be a night mare.
2. Summary
prefer state-less solutions to state-full solutions in mooooost cases;
before start implementation a state-full solution, please, take a break for a minute, and re-thing
everything again, possibly you can find a proper state-less solution.
State-less or state-full solution?
1. Static class
could be implemented as a state-less solution easily
2. Object
State-full solution in 99,99% cases
3. Summary
prefer static class based solutions (state-less) to object based (state-full) in mooooost cases;
before start implementation based on objects, please, take a break for a minute, and re-thing everything
again, possibly you can find a proper solution based on static classes.
Object or static class  State-full or state-less solution?
“Replace Conditional with Polymorphism refactoring” as a Static <=> Dynamic:
transformation criteria
Replace Conditional with Polymorphism as criteria
1. You have a conditional that chooses different behavior depending on the type of an
object.
2. Move each leg of the conditional to an overriding method in a subclass. Make the
original method abstract.
3. And vice versa
4. Example
Replace Conditional with Polymorphism and vice versa
1. Replace Conditional Dispatcher with Command Design Pattern
Create a Command for each action. Store the Commands in a collection and
replace the conditional logic with code to fetch and execute Commands.
2. Replace Conditional Logic with Strategy Design Pattern
Create a Strategy for each variant and make the method
delegate the “calculation” to a Strategy instance.
3. Replace Conditional Logic with State Design Pattern
Create a State for each variant as a part of “State Machine” and make the method
delegate tricky “calculation” to the “State Machine”.
Replace Conditional with … more sophisticated options
1. Problem:
You have a conditional that performs various actions depending on object type or properties.
2. Solution:
Create subclasses matching the branches of the conditional.
In them, create a shared method and move code from the corresponding branch of the conditional to it.
Replace the conditional with the relevant method call.
The result is that the proper implementation will be attained via polymorphism depending on the object
class.
Replace Conditional with Polymorphism – detailed description
1. Transformation example
2. Detailed information about transformation
3. Static or Dynamic – as an architecture basement
Example plus some details
Custom Test Runner: General scheme
Risks based “good” examples of customized Test Runners
Custom Java test runner first iteration
The runner allowed selecting test suite and browser
CSV-report as s result
Custom Java test runner final iteration
Added various features for test-run configuration
Custom Java test runner parallel engine
We get the number of nodes from Selenium Grid
Get node ip’s from Grid
Get the number of cores on each node (use the
smallest number)
Use this info to configure the number of parallel
threads using standard test-runner (Test-NG)
Use the power of both Test-NG and Selenium Grid
Custom Java test runner next iteration
• Reworked the re-run
mechanism
• Changed CSV-reports for
detailed Excel spreadsheets
with color coding
• Integrate with load emulator
“Bad” examples of customized Test Runners
“Bad” examples of customized Test Runners
• Custom test-runner
• XML-configuration-based
• Features:
o Test, not test-suite level orientation
o XML-config for multithreading
“Bad” examples of customized Test Runners
“Take away” points
Algorithm
1. Define Tests properly  Tests attributes
2. Define All shared entities
3. Select proper Selenium WebDriver Wrapper
4. Select proper Architecture
5. Test Parallel approach or combination
1. Some standard Test Runner
2. Build instruments
3. Several Processes
4. Selenium Grid
5. OS  Language specific multithreading
Summary
Step by step summary
1. Algorithm
2. Static or Dynamic; stateless or statefull: Architecture related questions
3. Metrics definition
4. Custom Test Runner: General scheme
1. Risks based “good” examples of customized Test Runners
2. “Bad” examples of customized Test Runners
What’s next?
Let’s go and discuss all open questions in an informal way 
1. “Refactoring is a controlled technique for improving the design of an existing code
base.”
2. “Its essence is applying a series of small behavior-preserving transformations, each of
which "too small to be worth doing".”
3. “The cumulative effect of each of these transformations is quite significant.”
4. “By doing Refactoring in small steps you reduce the risk of introducing errors. You
also avoid having the system broken while you are carrying out the restructuring -
which allows you to gradually refactor a system over an extended period of time.”
Refactoring by Martin Fowler
1. Ask yourself "how can I hide some details from the rest of the software?“
2. What is encapsulation?
hide variability
hide complexity
Details
"conflict of interests“
“tech” discussions
3. Example of public member or private member + setter/getter
What is really hidden?
Where is simplicity?
Encapsulation – the most important OOP principle
1. “There is a close relationship between refactoring and patterns.”
2. “Often the best way to use patterns is to gradually refactor your code to use the
pattern once you realize it’s needed.”
3. “Joshua Kerievsky’s Refactoring to Patterns explores this topic, making this a great
topic to learn about once you’ve got the basic refactoring's under your belt.”
4. “From Refactoring To Design Pattern” path – from pure design to adequate design
5. “From ~Design Patterns To Refactoring” path – from over design to adequate design
Refactoring and Design Patterns by Martin Fowler
1. “Refactoring to Patterns is the marriage of refactoring - the process of improving the
design of existing code - with patterns, the classic solutions to recurring design
problems.”
2. “Refactoring to Patterns suggests that using patterns to improve an existing design is
better than using patterns early in a new design. This is true whether code is years old
or minutes old.”
3. “We improve designs with patterns by applying sequences of low-level design
transformations, known as refactoring's.”
4. And vice versa
Refactoring and Design Patterns by Joshua Kerievsky
1. There are more then 90 types of refactoring
2. Refactoring types that relate to a particular field is called a ”Refactoring Language”
3. ”Refactoring Language” gives a common terminology for discussing the situations
specialists are faced with:
“The elements of this language are entities called Refactoring types”;
“Each type of Refactoring describes a problem that occurs over and over again in our environment”;
“Each type of Refactoring describes the core of the solution to that “~low level” problem, in such a way
that you can use this solution a million times over, without ever doing it the same way twice!”
Refactoring Catalog / Language
1. You have a conditional that chooses different behavior depending on the type of an
object.
2. Move each leg of the conditional to an overriding method in a subclass. Make the
original method abstract.
3. And vice versa
4. Example
Replace Conditional with Polymorphism and vice versa
1. Replace Conditional Dispatcher with Command Design Pattern
Create a Command for each action. Store the Commands in a collection and
replace the conditional logic with code to fetch and execute Commands.
2. Replace Conditional Logic with Strategy Design Pattern
Create a Strategy for each variant and make the method
delegate the “calculation” to a Strategy instance.
3. Replace Conditional Logic with State Design Pattern
Create a State for each variant as a part of “State Machine” and make the method
delegate tricky “calculation” to the “State Machine”.
Replace Conditional with … more sophisticated options
1. Problem:
You have a conditional that performs various actions depending on object type or properties.
2. Solution:
Create subclasses matching the branches of the conditional.
In them, create a shared method and move code from the corresponding branch of the conditional to it.
Replace the conditional with the relevant method call.
The result is that the proper implementation will be attained via polymorphism depending on the object
class.
Replace Conditional with Polymorphism – detailed description
1. This refactoring technique can help if your code contains operators performing
various tasks that vary based on:
Class of the object or interface that it implements
Value of an object's field
Result of calling one of an object's methods
2. If a new object property or type appears, you will need to search for and add code in all
similar conditionals. Thus the benefit of this technique is multiplied if there are
multiple conditionals scattered throughout all of an object's methods.
Why refactor
1. This technique adheres to the Tell-Don't-Ask principle: instead of asking an object
about its state and then performing actions based on this, it is much easier to simply
tell the object what it needs to do and let it decide for itself how to do that.
2. Removes duplicate code. You get rid of many almost identical conditionals.
3. If you need to add a new execution variant, all you need to do is add a new subclass
without touching the existing code (Open/Closed Principle).
Benefits
1. For this refactoring technique, you should have a ready hierarchy of classes that will
contain alternative behaviors. If you do not have a hierarchy like this, create one. Other
techniques will help to make this happen:
2. Replace Type Code with Subclasses. Subclasses will be created for all values of a
particular object property. This approach is simple but less flexible since you cannot
create subclasses for the other properties of the object.
3. Replace Type Code with State/Strategy. A class will be dedicated for a particular object
property and subclasses will be created from it for each value of the property. The
current class will contain references to the objects of this type and delegate execution
to them.
4. The following steps assume that you have already created the hierarchy.
Preparing to Refactor
1. If the conditional is in a method that performs other actions as well, perform Extract
Method.
2. For each hierarchy subclass, redefine the method that contains the conditional and
copy the code of the corresponding conditional branch to that location.
3. Delete this branch from the conditional.
4. Repeat replacement until the conditional is empty. Then delete the conditional and
declare the method abstract.
Refactoring Steps
Regression frequency (RF)
Definition
• Regression Frequency (RF) = How frequent does automated regression
run?
«Meaning»
• The value of product use is better as higher it is. That is ok for automated
tests, if automation test runs are frequent, their importance for customer
is bigger. Because of that that metric is one of the key metrics while
valuing ROI.
Regression frequency (RF)
Boundaries
• Widespread boundaries / recommendations:
smoke – every night
full-regression – every weekend
Where do we get info from
• Automation reports
• Continuous Integration (CI)
Regression frequency (RF)
Examples:
• RF and Economical expediency of АТ(ROI);
• Facebook and Bamboo
• HeadHunter
• Kanban: RF and WarGaming experience
• Contra example «Absolute» «recommendations»
• Contra example «Commit window»
Regression frequency (RF)
Visualization
• Not less than one a week – green color
• Not less than once in two weeks – yellow color
• Less than one a month - red color
• More frequent than once a day - red color
Connection between other metrics
• Automation testing window (ATW);
• Test results analysis window (TRAW);
• Economical expediency of АТ (ROI)
• “Commit window“
Category:
• Quality
• Automated testing
АТ «Window»
Definition
• Automated testing «Window» – how much physical time does Automated
test run take (full run or subset)
• Automated testing «Window» – how much system  «lab» time does
Automated test run take (full run or subset)
АТ «Window»
«Meaning»
• Time, that is required to be calculated while estimating economical
expediency of AUT while analyzing ROI in comparison with manual
testing. Metric is required as for making decision about introduction of
Automation and as for valuing current state of implemented automation
with the aim of looking for narrow places.
АТ «Window»
Boundaries
• Depends on the size of the project, might take from couple of hours to
many hours. In general, Smoke after commit should be not longer than
one hour, full Regression not more than two days (weekend).
Where do we get info from
• Test Reports
• Continuous Integration (CI)
АТ «Window»
Examples:
• Social networks (Facebook, Bamboo), CMS, CMS templates – before
automation tools for vizual testing automated test cases percent was not
big;
• HeadHunter example
• Counterexample – physical time
• Counterexample – machine time (Cloud)
• Technical details: Stateless and Statefull Automation, parallel run
• Technical details: Effective waiters
• Technical details: Premature optimization
АТ «Window»
Visualization
• Smoke <= 1 hour, Full Regression <= 12 hours (night) – green color
• Smoke <= 2 hours, Full Regression <= 2 days (weekend) – yellow color
• Smoke > 2 hours, Full Regression > 2 days(weekend) – red color
АТ «Window»
Connection between other metrics
• Automation progress (AP)
• Automated tests coverage percentage
• Regression Frequency (RF)
• Automated tests stability (ATS)
• Economical expediency of АТ (ROI)
Category:
• Cost / Time
• Automated testing
Test results analysis “Window” (TRAW)
Definition
• Analyzing «Window» of automation test results = How much time does it
take to analyze received data?
«Meaning»
• Metric shows how exhaustive and readable are reports, how stabile AT
and AUT. When the window is too big, less time would be devoted to
tests development, or analysis will be performed not thoroughly enough,
which will decrease Automation value.
Test results analysis “Window” (TRAW)
Boundaries
• In dependency of the project can last from some minutes to many hours.
In general, analyzing results of Smoke test after commit – should take
couple of minutes, analyzing results of full Regression – should take
couple of hours, ideally, less than an hour.
Where do we get info from
• Test Reports
• Continuous Integration (CI)
• Task Tracking Systems
Test results analysis “Window” (TRAW)
Examples:
• Social networks (Facebook, Bamboo), CMS, CMS templates – before
automation tools for vizual testing automated test cases percent was not
big;
• HeadHunter example
• Mature Data Protection Solution, new SQL Denali plug-in, close to 100%;
• Mature Secure VPN (R), technological stack;
• Counterexamples;
Test results analysis “Window” (TRAW)
Visualization
• Smoke <= 10 minutes, Full Regression <= 2 hours – green color
• Smoke <= 20 minutes, Full Regression <= 4 hours – yellow color
• Smoke > 20 minutes, Full Regression > 4 hours – red color
Test results analysis “Window” (TRAW)
• Connection between other metrics
• Automation progress (AP)
• Automated tests coverage Percentage (ATC)
• Regression Frequency (RF)
• Automated Tests stability (ATS)
• Category:
• Cost / Time
• Automated testing
ROI
Definition
• Economical expedience of AT (ROI) = Manual efforts – (Automation
efforts + Automation investment) / QA investment * 100%
«Meaning»
• Shows does it have sense to implement automation on the current
project in the current time. It might happen, that at some conditions,
automation on the project can be economically inappropriate, because
manual testing, even in long term future can be cheaper.
ROI
Boundaries
• Out of scope
Where do we get info from
• Test Strategy
• Test Plan
• Test Management Systems (TMS)
• Task Tracking System
ROI
Examples:
• Variety of projects
• Standard «problem» while working with middle+ automation specialists
of «old formation»
• A set of “alternative” ways of ROI usage (out of scope)
ROI (+ additional profit)
Visualization
• Comparing trends
• Manual testing vs Automation
• Whole variant of option of implementing / developing automation
• Different investment options
• Choosing optimal team-trend here and now
ROI
Connection between other metrics
• % of Tests, suitable for AT
• Regression frequency (RF)
• Automated test creation time (ATDT)
• Automated test support time (ATST)
• Automated tests stability (ATS)
• Automation testing window (ATW)
• Test results analysis window (TRAW)
Category:
• Price / time
• Automation testing
CONTACT ME
semenchenko@dpi.solutions
dpi.semenchenko
https://www.linkedin.com/in/anton-semenchenko-612a926b
https://www.facebook.com/semenchenko.anton.v
https://twitter.com/comaqa
www.COMAQA.BY
Community’s audience
Testing specialists (manual and automated)
Automation tools developers
Managers and sales specialists in IT
IT-specialists, thinking about migrating to automation
Students looking for perspective profession.
Community goals
Create unified space for effective communication for all IT-specialists in the context of automated
testing.
Your profit
Ability to listen to reports from leading IT-specialists and share your experience.
Take part in «promo»-versions of top IT-conferences in CIS for free.
Meet regularly, at different forums, community «offices», social networks and messengers.
www.COMAQA.BY
info@comaqa.by
https://www.facebook.com/comaqa.by/
http://vk.com/comaqaby
+375 33 33 46 120
+375 44 74 00 385
www.CoreHard.by
Community’s audience
«Harsh» С++ developers & co, IoT, BigData, High Load, Parallel Computing
Automation tools developers
Managers and sales specialists in IT
Students looking for perspective profession.
Community goals
Create unified space for effective communication for all IT-specialists in the context of «harsh»
development.
Your profit
Ability to listen to reports from leading IT-specialists and share your experience.
Take part in «promo»-versions of top IT-conferences in CIS for free.
Meet regularly, at different forums, community «offices», social networks and messengers.
www.CoreHard.by
info@corehard.by
https://www.facebook.com/corehard.by/
+375 33 33 46 120
+375 44 74 00 385

Contenu connexe

Tendances

Improving the Quality of Existing Software
Improving the Quality of Existing SoftwareImproving the Quality of Existing Software
Improving the Quality of Existing SoftwareSteven Smith
 
Improving The Quality of Existing Software
Improving The Quality of Existing SoftwareImproving The Quality of Existing Software
Improving The Quality of Existing SoftwareSteven Smith
 
Breaking Dependencies to Allow Unit Testing - DevIntersection Spring 2016
Breaking Dependencies to Allow Unit Testing - DevIntersection Spring 2016Breaking Dependencies to Allow Unit Testing - DevIntersection Spring 2016
Breaking Dependencies to Allow Unit Testing - DevIntersection Spring 2016Steven Smith
 
Using Selenium to Improve a Teams Development Cycle
Using Selenium to Improve a Teams Development CycleUsing Selenium to Improve a Teams Development Cycle
Using Selenium to Improve a Teams Development Cycleseleniumconf
 
Testing Rapidly Changing Applications With Self-Testing Object-Oriented Selen...
Testing Rapidly Changing Applications With Self-Testing Object-Oriented Selen...Testing Rapidly Changing Applications With Self-Testing Object-Oriented Selen...
Testing Rapidly Changing Applications With Self-Testing Object-Oriented Selen...seleniumconf
 
Oh so you test? - A guide to testing on Android from Unit to Mutation
Oh so you test? - A guide to testing on Android from Unit to MutationOh so you test? - A guide to testing on Android from Unit to Mutation
Oh so you test? - A guide to testing on Android from Unit to MutationPaul Blundell
 
JavaLand - Integration Testing How-to
JavaLand - Integration Testing How-toJavaLand - Integration Testing How-to
JavaLand - Integration Testing How-toNicolas Fränkel
 
Riga Dev Day - Automated Android Continuous Integration
Riga Dev Day - Automated Android Continuous IntegrationRiga Dev Day - Automated Android Continuous Integration
Riga Dev Day - Automated Android Continuous IntegrationNicolas Fränkel
 
Jbehave- Basics to Advance
Jbehave- Basics to AdvanceJbehave- Basics to Advance
Jbehave- Basics to AdvanceRavinder Singh
 
Test Driven Development using QUnit
Test Driven Development using QUnitTest Driven Development using QUnit
Test Driven Development using QUnitsatejsahu
 
TDD with Visual Studio 2010
TDD with Visual Studio 2010TDD with Visual Studio 2010
TDD with Visual Studio 2010Stefano Paluello
 
Maven TestNg frame work (1) (1)
Maven TestNg frame work (1) (1)Maven TestNg frame work (1) (1)
Maven TestNg frame work (1) (1)Gopi Raghavendra
 
2014 Joker - Integration Testing from the Trenches
2014 Joker - Integration Testing from the Trenches2014 Joker - Integration Testing from the Trenches
2014 Joker - Integration Testing from the TrenchesNicolas Fränkel
 
Tech io spa_angularjs_20130814_v0.9.5
Tech io spa_angularjs_20130814_v0.9.5Tech io spa_angularjs_20130814_v0.9.5
Tech io spa_angularjs_20130814_v0.9.5Ganesh Kondal
 
50 EJB 3 Best Practices in 50 Minutes - JavaOne 2014
50 EJB 3 Best Practices in 50 Minutes - JavaOne 201450 EJB 3 Best Practices in 50 Minutes - JavaOne 2014
50 EJB 3 Best Practices in 50 Minutes - JavaOne 2014Ryan Cuprak
 
Build Java Web Application Using Apache Struts
Build Java Web Application Using Apache Struts Build Java Web Application Using Apache Struts
Build Java Web Application Using Apache Struts weili_at_slideshare
 
Apex Testing and Best Practices
Apex Testing and Best PracticesApex Testing and Best Practices
Apex Testing and Best PracticesJitendra Zaa
 
SQL or NoSQL - how to choose
SQL or NoSQL - how to chooseSQL or NoSQL - how to choose
SQL or NoSQL - how to chooseLars Thorup
 
Fun with EJB 3.1 and Open EJB
Fun with EJB 3.1 and Open EJBFun with EJB 3.1 and Open EJB
Fun with EJB 3.1 and Open EJBArun Gupta
 

Tendances (20)

Improving the Quality of Existing Software
Improving the Quality of Existing SoftwareImproving the Quality of Existing Software
Improving the Quality of Existing Software
 
Improving The Quality of Existing Software
Improving The Quality of Existing SoftwareImproving The Quality of Existing Software
Improving The Quality of Existing Software
 
Breaking Dependencies to Allow Unit Testing - DevIntersection Spring 2016
Breaking Dependencies to Allow Unit Testing - DevIntersection Spring 2016Breaking Dependencies to Allow Unit Testing - DevIntersection Spring 2016
Breaking Dependencies to Allow Unit Testing - DevIntersection Spring 2016
 
Using Selenium to Improve a Teams Development Cycle
Using Selenium to Improve a Teams Development CycleUsing Selenium to Improve a Teams Development Cycle
Using Selenium to Improve a Teams Development Cycle
 
Testing Rapidly Changing Applications With Self-Testing Object-Oriented Selen...
Testing Rapidly Changing Applications With Self-Testing Object-Oriented Selen...Testing Rapidly Changing Applications With Self-Testing Object-Oriented Selen...
Testing Rapidly Changing Applications With Self-Testing Object-Oriented Selen...
 
Mini training - Moving to xUnit.net
Mini training - Moving to xUnit.netMini training - Moving to xUnit.net
Mini training - Moving to xUnit.net
 
Oh so you test? - A guide to testing on Android from Unit to Mutation
Oh so you test? - A guide to testing on Android from Unit to MutationOh so you test? - A guide to testing on Android from Unit to Mutation
Oh so you test? - A guide to testing on Android from Unit to Mutation
 
JavaLand - Integration Testing How-to
JavaLand - Integration Testing How-toJavaLand - Integration Testing How-to
JavaLand - Integration Testing How-to
 
Riga Dev Day - Automated Android Continuous Integration
Riga Dev Day - Automated Android Continuous IntegrationRiga Dev Day - Automated Android Continuous Integration
Riga Dev Day - Automated Android Continuous Integration
 
Jbehave- Basics to Advance
Jbehave- Basics to AdvanceJbehave- Basics to Advance
Jbehave- Basics to Advance
 
Test Driven Development using QUnit
Test Driven Development using QUnitTest Driven Development using QUnit
Test Driven Development using QUnit
 
TDD with Visual Studio 2010
TDD with Visual Studio 2010TDD with Visual Studio 2010
TDD with Visual Studio 2010
 
Maven TestNg frame work (1) (1)
Maven TestNg frame work (1) (1)Maven TestNg frame work (1) (1)
Maven TestNg frame work (1) (1)
 
2014 Joker - Integration Testing from the Trenches
2014 Joker - Integration Testing from the Trenches2014 Joker - Integration Testing from the Trenches
2014 Joker - Integration Testing from the Trenches
 
Tech io spa_angularjs_20130814_v0.9.5
Tech io spa_angularjs_20130814_v0.9.5Tech io spa_angularjs_20130814_v0.9.5
Tech io spa_angularjs_20130814_v0.9.5
 
50 EJB 3 Best Practices in 50 Minutes - JavaOne 2014
50 EJB 3 Best Practices in 50 Minutes - JavaOne 201450 EJB 3 Best Practices in 50 Minutes - JavaOne 2014
50 EJB 3 Best Practices in 50 Minutes - JavaOne 2014
 
Build Java Web Application Using Apache Struts
Build Java Web Application Using Apache Struts Build Java Web Application Using Apache Struts
Build Java Web Application Using Apache Struts
 
Apex Testing and Best Practices
Apex Testing and Best PracticesApex Testing and Best Practices
Apex Testing and Best Practices
 
SQL or NoSQL - how to choose
SQL or NoSQL - how to chooseSQL or NoSQL - how to choose
SQL or NoSQL - how to choose
 
Fun with EJB 3.1 and Open EJB
Fun with EJB 3.1 and Open EJBFun with EJB 3.1 and Open EJB
Fun with EJB 3.1 and Open EJB
 

Similaire à Системный взгляд на параллельный запуск Selenium тестов

Parallel run selenium tests in a good way
Parallel run selenium tests in a good  wayParallel run selenium tests in a good  way
Parallel run selenium tests in a good wayCOMAQA.BY
 
How to use selenium successfully
How to use selenium successfullyHow to use selenium successfully
How to use selenium successfullyTEST Huddle
 
Beginners overview of automated testing with Rspec
Beginners overview of automated testing with RspecBeginners overview of automated testing with Rspec
Beginners overview of automated testing with Rspecjeffrey1ross
 
Practical unit testing in c & c++
Practical unit testing in c & c++Practical unit testing in c & c++
Practical unit testing in c & c++Matt Hargett
 
Cucumber jvm best practices v3
Cucumber jvm best practices v3Cucumber jvm best practices v3
Cucumber jvm best practices v3Ahmed Misbah
 
Performance tuning Grails applications
 Performance tuning Grails applications Performance tuning Grails applications
Performance tuning Grails applicationsGR8Conf
 
Get Testing with tSQLt - SQL In The City Workshop 2014
Get Testing with tSQLt - SQL In The City Workshop 2014Get Testing with tSQLt - SQL In The City Workshop 2014
Get Testing with tSQLt - SQL In The City Workshop 2014Red Gate Software
 
Into The Box 2018 | Assert control over your legacy applications
Into The Box 2018 | Assert control over your legacy applicationsInto The Box 2018 | Assert control over your legacy applications
Into The Box 2018 | Assert control over your legacy applicationsOrtus Solutions, Corp
 
Agile Software Testing the Agilogy Way
Agile Software Testing the Agilogy WayAgile Software Testing the Agilogy Way
Agile Software Testing the Agilogy WayJordi Pradel
 
Testing - How Vital and How Easy to use
Testing - How Vital and How Easy to useTesting - How Vital and How Easy to use
Testing - How Vital and How Easy to useUma Ghotikar
 
The QA/Testing Process
The QA/Testing ProcessThe QA/Testing Process
The QA/Testing ProcessSynerzip
 
Alexander Podelko - Context-Driven Performance Testing
Alexander Podelko - Context-Driven Performance TestingAlexander Podelko - Context-Driven Performance Testing
Alexander Podelko - Context-Driven Performance TestingNeotys_Partner
 
Performance tuning Grails applications
Performance tuning Grails applicationsPerformance tuning Grails applications
Performance tuning Grails applicationsLari Hotari
 
Test automation principles, terminologies and implementations
Test automation principles, terminologies and implementationsTest automation principles, terminologies and implementations
Test automation principles, terminologies and implementationsSteven Li
 
Small is Beautiful- Fully Automate your Test Case Design
Small is Beautiful- Fully Automate your Test Case DesignSmall is Beautiful- Fully Automate your Test Case Design
Small is Beautiful- Fully Automate your Test Case DesignGeorgina Tilby
 
How do you tame a big ball of mud? One test at a time.
How do you tame a big ball of mud? One test at a time.How do you tame a big ball of mud? One test at a time.
How do you tame a big ball of mud? One test at a time.Matt Eland
 
Neotys PAC 2018 - Tingting Zong
Neotys PAC 2018 - Tingting ZongNeotys PAC 2018 - Tingting Zong
Neotys PAC 2018 - Tingting ZongNeotys_Partner
 
Generalization in Auto-Testing. How we put what we had into new Technological...
Generalization in Auto-Testing. How we put what we had into new Technological...Generalization in Auto-Testing. How we put what we had into new Technological...
Generalization in Auto-Testing. How we put what we had into new Technological...SQALab
 

Similaire à Системный взгляд на параллельный запуск Selenium тестов (20)

Parallel run selenium tests in a good way
Parallel run selenium tests in a good  wayParallel run selenium tests in a good  way
Parallel run selenium tests in a good way
 
How to use selenium successfully
How to use selenium successfullyHow to use selenium successfully
How to use selenium successfully
 
Beginners overview of automated testing with Rspec
Beginners overview of automated testing with RspecBeginners overview of automated testing with Rspec
Beginners overview of automated testing with Rspec
 
Practical unit testing in c & c++
Practical unit testing in c & c++Practical unit testing in c & c++
Practical unit testing in c & c++
 
Cucumber jvm best practices v3
Cucumber jvm best practices v3Cucumber jvm best practices v3
Cucumber jvm best practices v3
 
Performance tuning Grails applications
 Performance tuning Grails applications Performance tuning Grails applications
Performance tuning Grails applications
 
Get Testing with tSQLt - SQL In The City Workshop 2014
Get Testing with tSQLt - SQL In The City Workshop 2014Get Testing with tSQLt - SQL In The City Workshop 2014
Get Testing with tSQLt - SQL In The City Workshop 2014
 
Into The Box 2018 | Assert control over your legacy applications
Into The Box 2018 | Assert control over your legacy applicationsInto The Box 2018 | Assert control over your legacy applications
Into The Box 2018 | Assert control over your legacy applications
 
Agile Software Testing the Agilogy Way
Agile Software Testing the Agilogy WayAgile Software Testing the Agilogy Way
Agile Software Testing the Agilogy Way
 
Testing - How Vital and How Easy to use
Testing - How Vital and How Easy to useTesting - How Vital and How Easy to use
Testing - How Vital and How Easy to use
 
The QA/Testing Process
The QA/Testing ProcessThe QA/Testing Process
The QA/Testing Process
 
Alexander Podelko - Context-Driven Performance Testing
Alexander Podelko - Context-Driven Performance TestingAlexander Podelko - Context-Driven Performance Testing
Alexander Podelko - Context-Driven Performance Testing
 
Performance tuning Grails applications
Performance tuning Grails applicationsPerformance tuning Grails applications
Performance tuning Grails applications
 
Test automation principles, terminologies and implementations
Test automation principles, terminologies and implementationsTest automation principles, terminologies and implementations
Test automation principles, terminologies and implementations
 
Small is Beautiful- Fully Automate your Test Case Design
Small is Beautiful- Fully Automate your Test Case DesignSmall is Beautiful- Fully Automate your Test Case Design
Small is Beautiful- Fully Automate your Test Case Design
 
How do you tame a big ball of mud? One test at a time.
How do you tame a big ball of mud? One test at a time.How do you tame a big ball of mud? One test at a time.
How do you tame a big ball of mud? One test at a time.
 
Neotys PAC 2018 - Tingting Zong
Neotys PAC 2018 - Tingting ZongNeotys PAC 2018 - Tingting Zong
Neotys PAC 2018 - Tingting Zong
 
Generalization in Auto-Testing. How we put what we had into new Technological...
Generalization in Auto-Testing. How we put what we had into new Technological...Generalization in Auto-Testing. How we put what we had into new Technological...
Generalization in Auto-Testing. How we put what we had into new Technological...
 
Agile testing
Agile testingAgile testing
Agile testing
 
Test Driven Development
Test Driven DevelopmentTest Driven Development
Test Driven Development
 

Plus de COMAQA.BY

Тестирование аналогов инсталлируемых приложений (Android Instant Apps, Progre...
Тестирование аналогов инсталлируемых приложений (Android Instant Apps, Progre...Тестирование аналогов инсталлируемых приложений (Android Instant Apps, Progre...
Тестирование аналогов инсталлируемых приложений (Android Instant Apps, Progre...COMAQA.BY
 
Anton semenchenko. Comaqa Spring 2018. Nine circles of hell. Antipatterns in ...
Anton semenchenko. Comaqa Spring 2018. Nine circles of hell. Antipatterns in ...Anton semenchenko. Comaqa Spring 2018. Nine circles of hell. Antipatterns in ...
Anton semenchenko. Comaqa Spring 2018. Nine circles of hell. Antipatterns in ...COMAQA.BY
 
Vivien Ibironke Ibiyemi. Comaqa Spring 2018. Enhance your Testing Skills With...
Vivien Ibironke Ibiyemi. Comaqa Spring 2018. Enhance your Testing Skills With...Vivien Ibironke Ibiyemi. Comaqa Spring 2018. Enhance your Testing Skills With...
Vivien Ibironke Ibiyemi. Comaqa Spring 2018. Enhance your Testing Skills With...COMAQA.BY
 
Roman Soroka. Comaqa Spring 2018. Глобальный обзор процесса QA и его важность
Roman Soroka. Comaqa Spring 2018. Глобальный обзор процесса QA и его важностьRoman Soroka. Comaqa Spring 2018. Глобальный обзор процесса QA и его важность
Roman Soroka. Comaqa Spring 2018. Глобальный обзор процесса QA и его важностьCOMAQA.BY
 
Roman Iovlev. Comaqa Spring 2018. Архитектура Open Source решений для автомат...
Roman Iovlev. Comaqa Spring 2018. Архитектура Open Source решений для автомат...Roman Iovlev. Comaqa Spring 2018. Архитектура Open Source решений для автомат...
Roman Iovlev. Comaqa Spring 2018. Архитектура Open Source решений для автомат...COMAQA.BY
 
Vladimir Polyakov. Comaqa Spring 2018. Особенности тестирования ПО в предметн...
Vladimir Polyakov. Comaqa Spring 2018. Особенности тестирования ПО в предметн...Vladimir Polyakov. Comaqa Spring 2018. Особенности тестирования ПО в предметн...
Vladimir Polyakov. Comaqa Spring 2018. Особенности тестирования ПО в предметн...COMAQA.BY
 
Kimmo Hakala. Comaqa Spring 2018. Challenges and good QA practices in softwar...
Kimmo Hakala. Comaqa Spring 2018. Challenges and good QA practices in softwar...Kimmo Hakala. Comaqa Spring 2018. Challenges and good QA practices in softwar...
Kimmo Hakala. Comaqa Spring 2018. Challenges and good QA practices in softwar...COMAQA.BY
 
Дмитрий Лемешко. Comaqa Spring 2018. Continuous mobile automation in build pi...
Дмитрий Лемешко. Comaqa Spring 2018. Continuous mobile automation in build pi...Дмитрий Лемешко. Comaqa Spring 2018. Continuous mobile automation in build pi...
Дмитрий Лемешко. Comaqa Spring 2018. Continuous mobile automation in build pi...COMAQA.BY
 
Ivan Katunov. Comaqa Spring 2018. Test Design and Automation for Rest API.
Ivan Katunov. Comaqa Spring 2018. Test Design and Automation for Rest API.Ivan Katunov. Comaqa Spring 2018. Test Design and Automation for Rest API.
Ivan Katunov. Comaqa Spring 2018. Test Design and Automation for Rest API.COMAQA.BY
 
Vadim Zubovich. Comaqa Spring 2018. Красивое тестирование производительности.
Vadim Zubovich. Comaqa Spring 2018. Красивое тестирование производительности.Vadim Zubovich. Comaqa Spring 2018. Красивое тестирование производительности.
Vadim Zubovich. Comaqa Spring 2018. Красивое тестирование производительности.COMAQA.BY
 
Alexander Andelkovic. Comaqa Spring 2018. Using Artificial Intelligence to Te...
Alexander Andelkovic. Comaqa Spring 2018. Using Artificial Intelligence to Te...Alexander Andelkovic. Comaqa Spring 2018. Using Artificial Intelligence to Te...
Alexander Andelkovic. Comaqa Spring 2018. Using Artificial Intelligence to Te...COMAQA.BY
 
Моя роль в конфликте
Моя роль в конфликтеМоя роль в конфликте
Моя роль в конфликтеCOMAQA.BY
 
Организация приемочного тестирования силами матерых тестировщиков
Организация приемочного тестирования силами матерых тестировщиковОрганизация приемочного тестирования силами матерых тестировщиков
Организация приемочного тестирования силами матерых тестировщиковCOMAQA.BY
 
Развитие или смерть
Развитие или смертьРазвитие или смерть
Развитие или смертьCOMAQA.BY
 
Эффективная работа с рутинными задачами
Эффективная работа с рутинными задачамиЭффективная работа с рутинными задачами
Эффективная работа с рутинными задачамиCOMAQA.BY
 
Open your mind for OpenSource
Open your mind for OpenSourceOpen your mind for OpenSource
Open your mind for OpenSourceCOMAQA.BY
 
JDI 2.0. Not only UI testing
JDI 2.0. Not only UI testingJDI 2.0. Not only UI testing
JDI 2.0. Not only UI testingCOMAQA.BY
 
Battle: BDD vs notBDD
Battle: BDD vs notBDDBattle: BDD vs notBDD
Battle: BDD vs notBDDCOMAQA.BY
 
Слои тестового фрамеворка. Что? Где? Когда?
Слои тестового фрамеворка. Что? Где? Когда?Слои тестового фрамеворка. Что? Где? Когда?
Слои тестового фрамеворка. Что? Где? Когда?COMAQA.BY
 
Аспектно ориентированное программирование для Java автоматизаторов
Аспектно ориентированное программирование для Java автоматизаторовАспектно ориентированное программирование для Java автоматизаторов
Аспектно ориентированное программирование для Java автоматизаторовCOMAQA.BY
 

Plus de COMAQA.BY (20)

Тестирование аналогов инсталлируемых приложений (Android Instant Apps, Progre...
Тестирование аналогов инсталлируемых приложений (Android Instant Apps, Progre...Тестирование аналогов инсталлируемых приложений (Android Instant Apps, Progre...
Тестирование аналогов инсталлируемых приложений (Android Instant Apps, Progre...
 
Anton semenchenko. Comaqa Spring 2018. Nine circles of hell. Antipatterns in ...
Anton semenchenko. Comaqa Spring 2018. Nine circles of hell. Antipatterns in ...Anton semenchenko. Comaqa Spring 2018. Nine circles of hell. Antipatterns in ...
Anton semenchenko. Comaqa Spring 2018. Nine circles of hell. Antipatterns in ...
 
Vivien Ibironke Ibiyemi. Comaqa Spring 2018. Enhance your Testing Skills With...
Vivien Ibironke Ibiyemi. Comaqa Spring 2018. Enhance your Testing Skills With...Vivien Ibironke Ibiyemi. Comaqa Spring 2018. Enhance your Testing Skills With...
Vivien Ibironke Ibiyemi. Comaqa Spring 2018. Enhance your Testing Skills With...
 
Roman Soroka. Comaqa Spring 2018. Глобальный обзор процесса QA и его важность
Roman Soroka. Comaqa Spring 2018. Глобальный обзор процесса QA и его важностьRoman Soroka. Comaqa Spring 2018. Глобальный обзор процесса QA и его важность
Roman Soroka. Comaqa Spring 2018. Глобальный обзор процесса QA и его важность
 
Roman Iovlev. Comaqa Spring 2018. Архитектура Open Source решений для автомат...
Roman Iovlev. Comaqa Spring 2018. Архитектура Open Source решений для автомат...Roman Iovlev. Comaqa Spring 2018. Архитектура Open Source решений для автомат...
Roman Iovlev. Comaqa Spring 2018. Архитектура Open Source решений для автомат...
 
Vladimir Polyakov. Comaqa Spring 2018. Особенности тестирования ПО в предметн...
Vladimir Polyakov. Comaqa Spring 2018. Особенности тестирования ПО в предметн...Vladimir Polyakov. Comaqa Spring 2018. Особенности тестирования ПО в предметн...
Vladimir Polyakov. Comaqa Spring 2018. Особенности тестирования ПО в предметн...
 
Kimmo Hakala. Comaqa Spring 2018. Challenges and good QA practices in softwar...
Kimmo Hakala. Comaqa Spring 2018. Challenges and good QA practices in softwar...Kimmo Hakala. Comaqa Spring 2018. Challenges and good QA practices in softwar...
Kimmo Hakala. Comaqa Spring 2018. Challenges and good QA practices in softwar...
 
Дмитрий Лемешко. Comaqa Spring 2018. Continuous mobile automation in build pi...
Дмитрий Лемешко. Comaqa Spring 2018. Continuous mobile automation in build pi...Дмитрий Лемешко. Comaqa Spring 2018. Continuous mobile automation in build pi...
Дмитрий Лемешко. Comaqa Spring 2018. Continuous mobile automation in build pi...
 
Ivan Katunov. Comaqa Spring 2018. Test Design and Automation for Rest API.
Ivan Katunov. Comaqa Spring 2018. Test Design and Automation for Rest API.Ivan Katunov. Comaqa Spring 2018. Test Design and Automation for Rest API.
Ivan Katunov. Comaqa Spring 2018. Test Design and Automation for Rest API.
 
Vadim Zubovich. Comaqa Spring 2018. Красивое тестирование производительности.
Vadim Zubovich. Comaqa Spring 2018. Красивое тестирование производительности.Vadim Zubovich. Comaqa Spring 2018. Красивое тестирование производительности.
Vadim Zubovich. Comaqa Spring 2018. Красивое тестирование производительности.
 
Alexander Andelkovic. Comaqa Spring 2018. Using Artificial Intelligence to Te...
Alexander Andelkovic. Comaqa Spring 2018. Using Artificial Intelligence to Te...Alexander Andelkovic. Comaqa Spring 2018. Using Artificial Intelligence to Te...
Alexander Andelkovic. Comaqa Spring 2018. Using Artificial Intelligence to Te...
 
Моя роль в конфликте
Моя роль в конфликтеМоя роль в конфликте
Моя роль в конфликте
 
Организация приемочного тестирования силами матерых тестировщиков
Организация приемочного тестирования силами матерых тестировщиковОрганизация приемочного тестирования силами матерых тестировщиков
Организация приемочного тестирования силами матерых тестировщиков
 
Развитие или смерть
Развитие или смертьРазвитие или смерть
Развитие или смерть
 
Эффективная работа с рутинными задачами
Эффективная работа с рутинными задачамиЭффективная работа с рутинными задачами
Эффективная работа с рутинными задачами
 
Open your mind for OpenSource
Open your mind for OpenSourceOpen your mind for OpenSource
Open your mind for OpenSource
 
JDI 2.0. Not only UI testing
JDI 2.0. Not only UI testingJDI 2.0. Not only UI testing
JDI 2.0. Not only UI testing
 
Battle: BDD vs notBDD
Battle: BDD vs notBDDBattle: BDD vs notBDD
Battle: BDD vs notBDD
 
Слои тестового фрамеворка. Что? Где? Когда?
Слои тестового фрамеворка. Что? Где? Когда?Слои тестового фрамеворка. Что? Где? Когда?
Слои тестового фрамеворка. Что? Где? Когда?
 
Аспектно ориентированное программирование для Java автоматизаторов
Аспектно ориентированное программирование для Java автоматизаторовАспектно ориентированное программирование для Java автоматизаторов
Аспектно ориентированное программирование для Java автоматизаторов
 

Dernier

Slack Application Development 101 Slides
Slack Application Development 101 SlidesSlack Application Development 101 Slides
Slack Application Development 101 Slidespraypatel2
 
Scaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organizationScaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organizationRadu Cotescu
 
2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...Martijn de Jong
 
CNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of ServiceCNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of Servicegiselly40
 
The Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptxThe Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptxMalak Abu Hammad
 
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...Igalia
 
08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking Men08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking MenDelhi Call girls
 
The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024Rafal Los
 
How to convert PDF to text with Nanonets
How to convert PDF to text with NanonetsHow to convert PDF to text with Nanonets
How to convert PDF to text with Nanonetsnaman860154
 
Histor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slideHistor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slidevu2urc
 
IAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI SolutionsIAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI SolutionsEnterprise Knowledge
 
Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...Enterprise Knowledge
 
🐬 The future of MySQL is Postgres 🐘
🐬  The future of MySQL is Postgres   🐘🐬  The future of MySQL is Postgres   🐘
🐬 The future of MySQL is Postgres 🐘RTylerCroy
 
Automating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps ScriptAutomating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps Scriptwesley chun
 
Factors to Consider When Choosing Accounts Payable Services Providers.pptx
Factors to Consider When Choosing Accounts Payable Services Providers.pptxFactors to Consider When Choosing Accounts Payable Services Providers.pptx
Factors to Consider When Choosing Accounts Payable Services Providers.pptxKatpro Technologies
 
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdfThe Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdfEnterprise Knowledge
 
Tata AIG General Insurance Company - Insurer Innovation Award 2024
Tata AIG General Insurance Company - Insurer Innovation Award 2024Tata AIG General Insurance Company - Insurer Innovation Award 2024
Tata AIG General Insurance Company - Insurer Innovation Award 2024The Digital Insurer
 
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...Drew Madelung
 
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptxHampshireHUG
 
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...
Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...Neo4j
 

Dernier (20)

Slack Application Development 101 Slides
Slack Application Development 101 SlidesSlack Application Development 101 Slides
Slack Application Development 101 Slides
 
Scaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organizationScaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organization
 
2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...
 
CNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of ServiceCNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of Service
 
The Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptxThe Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptx
 
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
 
08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking Men08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking Men
 
The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024
 
How to convert PDF to text with Nanonets
How to convert PDF to text with NanonetsHow to convert PDF to text with Nanonets
How to convert PDF to text with Nanonets
 
Histor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slideHistor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slide
 
IAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI SolutionsIAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI Solutions
 
Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...
 
🐬 The future of MySQL is Postgres 🐘
🐬  The future of MySQL is Postgres   🐘🐬  The future of MySQL is Postgres   🐘
🐬 The future of MySQL is Postgres 🐘
 
Automating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps ScriptAutomating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps Script
 
Factors to Consider When Choosing Accounts Payable Services Providers.pptx
Factors to Consider When Choosing Accounts Payable Services Providers.pptxFactors to Consider When Choosing Accounts Payable Services Providers.pptx
Factors to Consider When Choosing Accounts Payable Services Providers.pptx
 
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdfThe Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
 
Tata AIG General Insurance Company - Insurer Innovation Award 2024
Tata AIG General Insurance Company - Insurer Innovation Award 2024Tata AIG General Insurance Company - Insurer Innovation Award 2024
Tata AIG General Insurance Company - Insurer Innovation Award 2024
 
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
 
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
 
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...
Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...
 

Системный взгляд на параллельный запуск Selenium тестов

  • 1. Parallel Run Selenium Tests in a Good / Bad Way Anton Semenchenko
  • 2. Anton Semenchenko Creator of communities www.COMAQA.BY and www.CoreHard.by, founder of company www.DPI.Solutions, «tricky» manager at EPAM Systems. Almost 15 years of experience in IT, main specialization: Automation, С++ and lower development, management, sales. Anton Semenchenko EPAM Systems, Software Testing Manager
  • 3. Agenda • Why do we need run tests in parallel? • Challenge • Solution • Algorithm • Static or Dynamic; stateless or statefull: Architecture related questions • Metrics definition • Custom Test Runner: General scheme • Risks based “good” examples of customized Test Runners • “Bad” examples of customized Test Runners • Refactoring as a criteria – detailed information • Metrics definition
  • 4. Why do we need run tests in parallel?
  • 5. Challenge Challenge • How to invest min amount of time money to run tests in parallel • How to maximize QA Automation ROI • ROI >> 0
  • 6. Solution Let’s define Algorithm “How to run tests in parallel efficiently”
  • 7. Algorithm • Define Tests properly Tests attributes • Define All shared entities • Select proper Selenium WebDriver Wrapper • Select proper Architecture • Test Parallel approach or combination o Some standard Test Runner o Build instruments o Several Processes o Selenium Grid o OS Language specific multithreading
  • 8. Why do we need run tests in parallel? 2 types of reasons: • Process related reasons • Project specific reasons o Risk based reasons Meaning: • Test == Feedback Mechanism • Test Value == Feedback Value
  • 9. Feedback’s in Scrum example Methodology – as a predictable way of risk management for some context • Pre planning grooming – run-time feedback from customer side • Planning poker during Iteration planning – run-time feedback from team side mostly + customer side too • Daily Stand up – daily feedback, Team side • Iteration Demo – per iteration feedback, customer side • Iteration Retrospective - per iteration feedback, Team side • Pair programming (as an example) – run-time technical feedback • Unit Tests + CI – close to run-time technical feedback • QA Automation Tests + CI + Report + Report Analyses – daily feedback mechanism • And so on
  • 10. Feedback’s in Scrum example Methodology – as a predictable way of risk management for some context
  • 11. Goals 1. Decrease QA Automation “Window” 2. Decrease Test results analysis “Window” 3. Increase Regression frequency 4. Decrease Optimize hardware utilization 1. Electricity 2. Hardware costs (buy or rent) 5. Increase QA Automation ROI >> 0
  • 12. Algorithm • Define Tests properly Tests attributes • Define All shared entities • Select proper Selenium WebDriver Wrapper • Select proper Architecture • Test Parallel approach or combination o Some standard Test Runner o Build instruments o Several Processes o Selenium Grid o OS Language specific multithreading
  • 13. Algorithm – The best way Test attributes Atomic tests without dependencies Some dependency resolver Add specific annotation plus add new feature to existing standard test-runner Develop your own test- runner with integrated dependency resolver
  • 14. Algorithm – The best way How to choose – ROI calculator as a solution Atomic tests without dependencies Some dependency resolver Decreased time to runDecreased test debug time Lower hardware costs + electricityDecreased test update/support time No time spent on dependency definition No time spent on dependency resolver Lower entry barrier for newcomers Less documentation
  • 15. Algorithm – The best way In most cases – no dependencies: • More expensive specialists • Higher hardware and electricity costs
  • 16. Algorithm – The best way o Define All shared entities o Improve Architecture o For example: • Pre-steps using DB • DB Layer:  Singleton  Thread-safe  Optimize (use profiler)  Migrate to Singleton-Bus (instance per thread, in a thread-safe way)  Solution: in an iteration-based way, start from the simplest singleton
  • 17. Algorithm – The best way o Define All shared entities o Improve Architecture o For example: • Logger • Tracer • Report Engine:  +1 more reason to integrate Test Runner and Report Engine, knows how to run in parallel and integrate reports pieces into one document
  • 18. Algorithm – The best way o Define All shared entities o Improve Architecture o For example: • Data-provider • Any other orthogonal entity:  Define  Isolate  Remember
  • 19. Algorithm – The best way o Select proper Selenium WebDriver Wrapper • Mature • Thread-safe • Easy-to-use “downcast” • Examples:  Selenide – easy to use  JDI evolution  Serenity – more complicated to use
  • 20. Algorithm – The best way o Select proper Architecture • Stateless architecture • Static Page Object • Isolate all orthogonal shared entities • Use “From Conditional to Patterns and reverse” Refactoring as a metric + ROI to prof
  • 21. Algorithm – The best way o Select proper Architecture • Convert to Stateful architecture • Dynamic Page Object • Update all isolated orthogonal shared entities • Re-calculate ROI and reuse “From Conditional to Patterns and reverse” in a systematical way
  • 22. Algorithm • Define Tests properly Tests attributes • Define All shared entities • Select proper Selenium WebDriver Wrapper • Select proper Architecture • Test Parallel approach or combination o Some standard Test Runner o Build instruments o Several Processes o Selenium Grid o OS Language specific multithreading
  • 23. Algorithm – The best way o Some standard test-runner • The lowest layer • Standard (or some specialized), stable, efficient, simple, most of instruments use it as a basement
  • 24. Algorithm – The best way o Build instruments • Use parameters to configure test run • Use Test Runner as a basement • Some kind of Test Runner wrapper • + 1 layer => less stable, less efficient, sometimes easier to use • Anyway, doesn’t work without Test Runner • Maven example: Thread Count and param: Test Method, Test Class, both
  • 25. Algorithm – The best way o Several processes • Using CI • Team City (Job Configuration) • Jenkins (Job Configuration) • Extensive way
  • 26. Algorithm – The best way o Selenium Grid • Infrastructure • Could be used for indirect test run, but this is not primary purpose • Could be combined with all other solutions
  • 27. Algorithm – The best way o Language / OS specific mechanisms • Language, focusing on multithreading • Java  Process  Thread / Fork  JVM (Java property config or command line arguments)
  • 28. Out of scope OS and Language related questions of multi-threading
  • 29. Reasons Transition complexity With proper architecture (plus mature, not self-developed, WebDriver wrapper, like Selenide) -> 0, just 3-5-10 places in a solution, QA Automation Architect or Developer should invest several hours With improper architecture (without any wrapper or with a self-developed WebDriver wrapper) - > complicated question Invest days or weeks to Update Architecture and wrapper (better, to use, mature one) Invest weeks or months to update tons of source code places Without any architecture -> nightmare Invest weeks to redesign tests using proper Architecture and mature wrapper Invest months or even years just to update tests ROI as a metric
  • 30. Architecture related questions Static or Dynamic; stateless or statefull: Architecture related questions?
  • 31. Architecture related questions 1. Static: transform to parallel run 2. Dynamic: transform to parallel run 3. Static <=> Dynamic: transformation criteria 4. Transformation example 5. Detailed information about transformation 6. Static or Dynamic – as an architecture basement
  • 32. Leak of stateless examples Leak of stateless examples in standard Selenium documentation IMHO: due to Selenium development process A tiny group of extra professionals developers No processes No backlog No priorities No сcommittee for backlog and backlog items prioritization No “iterations” How to add new feature Just to implement and then add for review
  • 33. 1. Let’s compare: Photo Share – looks like parallelism (easy parallelism). Video Share – looks like parallelism (not trivial parallelism). State-less or state-full solution?
  • 34. 1. How easy transform solution from “single” to “multi” threading (to decrease “QA Automation Windows”) State-less – like share a photo Just 5 minutes of work. State-full – like share a video Not trivial task, could be a night mare. 2. Summary prefer state-less solutions to state-full solutions in mooooost cases; before start implementation a state-full solution, please, take a break for a minute, and re-thing everything again, possibly you can find a proper state-less solution. State-less or state-full solution?
  • 35. 1. Static class could be implemented as a state-less solution easily 2. Object State-full solution in 99,99% cases 3. Summary prefer static class based solutions (state-less) to object based (state-full) in mooooost cases; before start implementation based on objects, please, take a break for a minute, and re-thing everything again, possibly you can find a proper solution based on static classes. Object or static class State-full or state-less solution?
  • 36. “Replace Conditional with Polymorphism refactoring” as a Static <=> Dynamic: transformation criteria Replace Conditional with Polymorphism as criteria
  • 37. 1. You have a conditional that chooses different behavior depending on the type of an object. 2. Move each leg of the conditional to an overriding method in a subclass. Make the original method abstract. 3. And vice versa 4. Example Replace Conditional with Polymorphism and vice versa
  • 38. 1. Replace Conditional Dispatcher with Command Design Pattern Create a Command for each action. Store the Commands in a collection and replace the conditional logic with code to fetch and execute Commands. 2. Replace Conditional Logic with Strategy Design Pattern Create a Strategy for each variant and make the method delegate the “calculation” to a Strategy instance. 3. Replace Conditional Logic with State Design Pattern Create a State for each variant as a part of “State Machine” and make the method delegate tricky “calculation” to the “State Machine”. Replace Conditional with … more sophisticated options
  • 39. 1. Problem: You have a conditional that performs various actions depending on object type or properties. 2. Solution: Create subclasses matching the branches of the conditional. In them, create a shared method and move code from the corresponding branch of the conditional to it. Replace the conditional with the relevant method call. The result is that the proper implementation will be attained via polymorphism depending on the object class. Replace Conditional with Polymorphism – detailed description
  • 40. 1. Transformation example 2. Detailed information about transformation 3. Static or Dynamic – as an architecture basement Example plus some details
  • 41. Custom Test Runner: General scheme
  • 42. Risks based “good” examples of customized Test Runners
  • 43. Custom Java test runner first iteration The runner allowed selecting test suite and browser CSV-report as s result
  • 44. Custom Java test runner final iteration Added various features for test-run configuration
  • 45. Custom Java test runner parallel engine We get the number of nodes from Selenium Grid Get node ip’s from Grid Get the number of cores on each node (use the smallest number) Use this info to configure the number of parallel threads using standard test-runner (Test-NG) Use the power of both Test-NG and Selenium Grid
  • 46. Custom Java test runner next iteration • Reworked the re-run mechanism • Changed CSV-reports for detailed Excel spreadsheets with color coding • Integrate with load emulator
  • 47. “Bad” examples of customized Test Runners
  • 48. “Bad” examples of customized Test Runners • Custom test-runner • XML-configuration-based • Features: o Test, not test-suite level orientation o XML-config for multithreading
  • 49. “Bad” examples of customized Test Runners
  • 50. “Take away” points Algorithm 1. Define Tests properly Tests attributes 2. Define All shared entities 3. Select proper Selenium WebDriver Wrapper 4. Select proper Architecture 5. Test Parallel approach or combination 1. Some standard Test Runner 2. Build instruments 3. Several Processes 4. Selenium Grid 5. OS Language specific multithreading
  • 51. Summary Step by step summary 1. Algorithm 2. Static or Dynamic; stateless or statefull: Architecture related questions 3. Metrics definition 4. Custom Test Runner: General scheme 1. Risks based “good” examples of customized Test Runners 2. “Bad” examples of customized Test Runners
  • 52. What’s next? Let’s go and discuss all open questions in an informal way 
  • 53. 1. “Refactoring is a controlled technique for improving the design of an existing code base.” 2. “Its essence is applying a series of small behavior-preserving transformations, each of which "too small to be worth doing".” 3. “The cumulative effect of each of these transformations is quite significant.” 4. “By doing Refactoring in small steps you reduce the risk of introducing errors. You also avoid having the system broken while you are carrying out the restructuring - which allows you to gradually refactor a system over an extended period of time.” Refactoring by Martin Fowler
  • 54. 1. Ask yourself "how can I hide some details from the rest of the software?“ 2. What is encapsulation? hide variability hide complexity Details "conflict of interests“ “tech” discussions 3. Example of public member or private member + setter/getter What is really hidden? Where is simplicity? Encapsulation – the most important OOP principle
  • 55. 1. “There is a close relationship between refactoring and patterns.” 2. “Often the best way to use patterns is to gradually refactor your code to use the pattern once you realize it’s needed.” 3. “Joshua Kerievsky’s Refactoring to Patterns explores this topic, making this a great topic to learn about once you’ve got the basic refactoring's under your belt.” 4. “From Refactoring To Design Pattern” path – from pure design to adequate design 5. “From ~Design Patterns To Refactoring” path – from over design to adequate design Refactoring and Design Patterns by Martin Fowler
  • 56. 1. “Refactoring to Patterns is the marriage of refactoring - the process of improving the design of existing code - with patterns, the classic solutions to recurring design problems.” 2. “Refactoring to Patterns suggests that using patterns to improve an existing design is better than using patterns early in a new design. This is true whether code is years old or minutes old.” 3. “We improve designs with patterns by applying sequences of low-level design transformations, known as refactoring's.” 4. And vice versa Refactoring and Design Patterns by Joshua Kerievsky
  • 57. 1. There are more then 90 types of refactoring 2. Refactoring types that relate to a particular field is called a ”Refactoring Language” 3. ”Refactoring Language” gives a common terminology for discussing the situations specialists are faced with: “The elements of this language are entities called Refactoring types”; “Each type of Refactoring describes a problem that occurs over and over again in our environment”; “Each type of Refactoring describes the core of the solution to that “~low level” problem, in such a way that you can use this solution a million times over, without ever doing it the same way twice!” Refactoring Catalog / Language
  • 58. 1. You have a conditional that chooses different behavior depending on the type of an object. 2. Move each leg of the conditional to an overriding method in a subclass. Make the original method abstract. 3. And vice versa 4. Example Replace Conditional with Polymorphism and vice versa
  • 59. 1. Replace Conditional Dispatcher with Command Design Pattern Create a Command for each action. Store the Commands in a collection and replace the conditional logic with code to fetch and execute Commands. 2. Replace Conditional Logic with Strategy Design Pattern Create a Strategy for each variant and make the method delegate the “calculation” to a Strategy instance. 3. Replace Conditional Logic with State Design Pattern Create a State for each variant as a part of “State Machine” and make the method delegate tricky “calculation” to the “State Machine”. Replace Conditional with … more sophisticated options
  • 60. 1. Problem: You have a conditional that performs various actions depending on object type or properties. 2. Solution: Create subclasses matching the branches of the conditional. In them, create a shared method and move code from the corresponding branch of the conditional to it. Replace the conditional with the relevant method call. The result is that the proper implementation will be attained via polymorphism depending on the object class. Replace Conditional with Polymorphism – detailed description
  • 61. 1. This refactoring technique can help if your code contains operators performing various tasks that vary based on: Class of the object or interface that it implements Value of an object's field Result of calling one of an object's methods 2. If a new object property or type appears, you will need to search for and add code in all similar conditionals. Thus the benefit of this technique is multiplied if there are multiple conditionals scattered throughout all of an object's methods. Why refactor
  • 62. 1. This technique adheres to the Tell-Don't-Ask principle: instead of asking an object about its state and then performing actions based on this, it is much easier to simply tell the object what it needs to do and let it decide for itself how to do that. 2. Removes duplicate code. You get rid of many almost identical conditionals. 3. If you need to add a new execution variant, all you need to do is add a new subclass without touching the existing code (Open/Closed Principle). Benefits
  • 63. 1. For this refactoring technique, you should have a ready hierarchy of classes that will contain alternative behaviors. If you do not have a hierarchy like this, create one. Other techniques will help to make this happen: 2. Replace Type Code with Subclasses. Subclasses will be created for all values of a particular object property. This approach is simple but less flexible since you cannot create subclasses for the other properties of the object. 3. Replace Type Code with State/Strategy. A class will be dedicated for a particular object property and subclasses will be created from it for each value of the property. The current class will contain references to the objects of this type and delegate execution to them. 4. The following steps assume that you have already created the hierarchy. Preparing to Refactor
  • 64. 1. If the conditional is in a method that performs other actions as well, perform Extract Method. 2. For each hierarchy subclass, redefine the method that contains the conditional and copy the code of the corresponding conditional branch to that location. 3. Delete this branch from the conditional. 4. Repeat replacement until the conditional is empty. Then delete the conditional and declare the method abstract. Refactoring Steps
  • 65. Regression frequency (RF) Definition • Regression Frequency (RF) = How frequent does automated regression run? «Meaning» • The value of product use is better as higher it is. That is ok for automated tests, if automation test runs are frequent, their importance for customer is bigger. Because of that that metric is one of the key metrics while valuing ROI.
  • 66. Regression frequency (RF) Boundaries • Widespread boundaries / recommendations: smoke – every night full-regression – every weekend Where do we get info from • Automation reports • Continuous Integration (CI)
  • 67. Regression frequency (RF) Examples: • RF and Economical expediency of АТ(ROI); • Facebook and Bamboo • HeadHunter • Kanban: RF and WarGaming experience • Contra example «Absolute» «recommendations» • Contra example «Commit window»
  • 68. Regression frequency (RF) Visualization • Not less than one a week – green color • Not less than once in two weeks – yellow color • Less than one a month - red color • More frequent than once a day - red color Connection between other metrics • Automation testing window (ATW); • Test results analysis window (TRAW); • Economical expediency of АТ (ROI) • “Commit window“ Category: • Quality • Automated testing
  • 69. АТ «Window» Definition • Automated testing «Window» – how much physical time does Automated test run take (full run or subset) • Automated testing «Window» – how much system «lab» time does Automated test run take (full run or subset)
  • 70. АТ «Window» «Meaning» • Time, that is required to be calculated while estimating economical expediency of AUT while analyzing ROI in comparison with manual testing. Metric is required as for making decision about introduction of Automation and as for valuing current state of implemented automation with the aim of looking for narrow places.
  • 71. АТ «Window» Boundaries • Depends on the size of the project, might take from couple of hours to many hours. In general, Smoke after commit should be not longer than one hour, full Regression not more than two days (weekend). Where do we get info from • Test Reports • Continuous Integration (CI)
  • 72. АТ «Window» Examples: • Social networks (Facebook, Bamboo), CMS, CMS templates – before automation tools for vizual testing automated test cases percent was not big; • HeadHunter example • Counterexample – physical time • Counterexample – machine time (Cloud) • Technical details: Stateless and Statefull Automation, parallel run • Technical details: Effective waiters • Technical details: Premature optimization
  • 73. АТ «Window» Visualization • Smoke <= 1 hour, Full Regression <= 12 hours (night) – green color • Smoke <= 2 hours, Full Regression <= 2 days (weekend) – yellow color • Smoke > 2 hours, Full Regression > 2 days(weekend) – red color
  • 74. АТ «Window» Connection between other metrics • Automation progress (AP) • Automated tests coverage percentage • Regression Frequency (RF) • Automated tests stability (ATS) • Economical expediency of АТ (ROI) Category: • Cost / Time • Automated testing
  • 75. Test results analysis “Window” (TRAW) Definition • Analyzing «Window» of automation test results = How much time does it take to analyze received data? «Meaning» • Metric shows how exhaustive and readable are reports, how stabile AT and AUT. When the window is too big, less time would be devoted to tests development, or analysis will be performed not thoroughly enough, which will decrease Automation value.
  • 76. Test results analysis “Window” (TRAW) Boundaries • In dependency of the project can last from some minutes to many hours. In general, analyzing results of Smoke test after commit – should take couple of minutes, analyzing results of full Regression – should take couple of hours, ideally, less than an hour. Where do we get info from • Test Reports • Continuous Integration (CI) • Task Tracking Systems
  • 77. Test results analysis “Window” (TRAW) Examples: • Social networks (Facebook, Bamboo), CMS, CMS templates – before automation tools for vizual testing automated test cases percent was not big; • HeadHunter example • Mature Data Protection Solution, new SQL Denali plug-in, close to 100%; • Mature Secure VPN (R), technological stack; • Counterexamples;
  • 78. Test results analysis “Window” (TRAW) Visualization • Smoke <= 10 minutes, Full Regression <= 2 hours – green color • Smoke <= 20 minutes, Full Regression <= 4 hours – yellow color • Smoke > 20 minutes, Full Regression > 4 hours – red color
  • 79. Test results analysis “Window” (TRAW) • Connection between other metrics • Automation progress (AP) • Automated tests coverage Percentage (ATC) • Regression Frequency (RF) • Automated Tests stability (ATS) • Category: • Cost / Time • Automated testing
  • 80. ROI Definition • Economical expedience of AT (ROI) = Manual efforts – (Automation efforts + Automation investment) / QA investment * 100% «Meaning» • Shows does it have sense to implement automation on the current project in the current time. It might happen, that at some conditions, automation on the project can be economically inappropriate, because manual testing, even in long term future can be cheaper.
  • 81. ROI Boundaries • Out of scope Where do we get info from • Test Strategy • Test Plan • Test Management Systems (TMS) • Task Tracking System
  • 82. ROI Examples: • Variety of projects • Standard «problem» while working with middle+ automation specialists of «old formation» • A set of “alternative” ways of ROI usage (out of scope)
  • 83. ROI (+ additional profit) Visualization • Comparing trends • Manual testing vs Automation • Whole variant of option of implementing / developing automation • Different investment options • Choosing optimal team-trend here and now
  • 84. ROI Connection between other metrics • % of Tests, suitable for AT • Regression frequency (RF) • Automated test creation time (ATDT) • Automated test support time (ATST) • Automated tests stability (ATS) • Automation testing window (ATW) • Test results analysis window (TRAW) Category: • Price / time • Automation testing
  • 86. www.COMAQA.BY Community’s audience Testing specialists (manual and automated) Automation tools developers Managers and sales specialists in IT IT-specialists, thinking about migrating to automation Students looking for perspective profession. Community goals Create unified space for effective communication for all IT-specialists in the context of automated testing. Your profit Ability to listen to reports from leading IT-specialists and share your experience. Take part in «promo»-versions of top IT-conferences in CIS for free. Meet regularly, at different forums, community «offices», social networks and messengers.
  • 88. www.CoreHard.by Community’s audience «Harsh» С++ developers & co, IoT, BigData, High Load, Parallel Computing Automation tools developers Managers and sales specialists in IT Students looking for perspective profession. Community goals Create unified space for effective communication for all IT-specialists in the context of «harsh» development. Your profit Ability to listen to reports from leading IT-specialists and share your experience. Take part in «promo»-versions of top IT-conferences in CIS for free. Meet regularly, at different forums, community «offices», social networks and messengers.

Notes de l'éditeur

  1. Text should be left aligned / icons should be broken into two columns three and three