SlideShare una empresa de Scribd logo
1 de 69
© 2018 Magento, Inc. Page | 1
Automated Testing in
Magento 2
Igor Miniailo
Magento 2 Architect
© 2018 Magento, Inc. Page | 2
© 2018 Magento, Inc. Page | 3
© 2018 Magento, Inc. Page | 4
*Automated Testing in Magento 2
based on examples from Multi-Source
Inventory
© 2018 Magento, Inc. Page | 5
MSI is designed to enable stock management in multiple
locations so that merchants can properly reflect their physical
warehouses in Magento system without external extensions or
customization
Multi-Source Inventory (MSI)
https://github.com/magento-engcom/msi/
© 2018 Magento, Inc. Page | 6
Split the inventory
between the
sources within one
Magento installation
© 2018 Magento, Inc. Page | 7
Replace current CatalogInventory with MSI
© 2018 Magento, Inc. Page | 8
© 2018 Magento, Inc. Page | 9
© 2018 Magento, Inc. Page | 10
Unit Testing
© 2018 Magento, Inc. Page | 11
Unit test types
https://martinfowler.com/bliki/UnitTest.html
© 2018 Magento, Inc. Page | 12
Test Doubles
https://martinfowler.com/bliki/TestDouble.html
© 2018 Magento, Inc. Page | 13
© 2018 Magento, Inc. Page | 14
Let’s see how typical Unit test for this code looks like
© 2018 Magento, Inc. Page | 15
Solitary Unit Test with Mocks and Expects
© 2018 Magento, Inc. Page | 16
TTDD - Tautological Test Driven Development
Tautological: - needless, redundant repetition of an idea - repetition of
same sense in different words; - the phrase "a beginner who has just
started" is tautological
© 2018 Magento, Inc. Page | 17
TTDD - Tautological Test Driven Development
Unit tests currently do not check that code works
properly, but check that code works the same way
as we implemented it.
Coupling between Production and Testing code.
Test duplicates the business logic code.
© 2018 Magento, Inc. Page | 18
http://fabiopereira.me/blog/2010/05/27/ttdd-tautological-
test-driven-development-anti-pattern/
© 2018 Magento, Inc. Page | 19
• Asserts more interactions with collaborators than the outputs
• It doesn’t really test the behavior of the class, but only its
implementation
• The test is too white box
• Too much mock setup deviates the intent of the test
• Adding a new feature or changing an existing one requires
changing mock expectations
• Such tests don’t help to find bugs in application code
© 2018 Magento, Inc. Page | 20
The problem is not in Unit tests
The problem is in Transient State of objects
under the test
(especially in legacy code)
© 2018 Magento, Inc. Page | 21
© 2018 Magento, Inc. Page | 22
Two Unit tests passed. No Integration tests
© 2018 Magento, Inc. Page | 23
Two Unit tests passed. No Integration tests
© 2018 Magento, Inc. Page | 24
Whether Unit tests are useless?
NO!
Unit tests could be the first “Smell” informing that
something wrong with your application code
© 2018 Magento, Inc. Page | 25
• Readability
– Test should be easy to follow
– Test should be simple to update
– Code can be reused to test all similar cases
• Stability
– Test should be stable by execution
– Test should be stable to code changes
– Test should focus on result not on the path
• Speed
Qualities of a Test
© 2018 Magento, Inc. Page | 26
Integration Testing
© 2018 Magento, Inc. Page | 27
Reservation - the entity is used when the order is placed and
we need to reserve some product quantity in stock.
Reservations are append only operations and help us to prevent
blocking operations and race conditions at the time of checkout.
Reservation mechanism
https://github.com/magento-engcom/msi/wiki/Reservations
© 2018 Magento, Inc. Page | 28
Order Placement – Step 1
France Warehouse
SKU-1: 5qty
EU Stock
SKU-1: 15qty
Italy Warehouse
SKU-1: 10qty
Raw data Index Reservations
No records
Available Qty: 15qty (data from index, empty reservations)
© 2018 Magento, Inc. Page | 29
Order Placement – Step 2
Action: Customer buys 5 products on frontend
© 2018 Magento, Inc. Page | 30
Order Placement – Step 3
France Warehouse
SKU-1: 5qty
EU Stock
SKU-1: 15qty
Italy Warehouse
SKU-1: 10qty
Raw data Index Reservations
SKU-1: -5
Available Qty: 10qty (data from index 15, apply all reservations -5)
Data is NOT changed Reservation has been
added
© 2018 Magento, Inc. Page | 31
Order Placement – Step 4
Action: Admin makes a re-order, 3 products out of 5 returned,
and new order consists of 2 products
© 2018 Magento, Inc. Page | 32
Order Placement – Step 5
France Warehouse
SKU-1: 5qty
EU Stock
SKU-1: 15qty
Italy Warehouse
SKU-1: 10qty
Raw data Index Reservations
SKU-1: -5
SKU-1: +3
Available Qty: 13qty (data from index 15, apply reservations -5+3)
Data is NOT changed
Reservation has been added
© 2018 Magento, Inc. Page | 33
Order Placement – Step 6
Action: Admin completes order. Re-index was run.
© 2018 Magento, Inc. Page | 34
Order Placement – Step 7
France Warehouse
SKU-1: 3qty
EU Stock
SKU-1: 13qty
Italy Warehouse
SKU-1: 10qty
Raw data Index Reservations
SKU-1: -5
SKU-1: +3
SKU-1: +2
Available Qty: 13qty (data from index 13, apply reservations -5+3+2=0)
Data is CHANGED Compensation Reservation
has been added
© 2018 Magento, Inc. Page | 35
Order Placement – Step 8
Action: Reservation cleaning
Looping through these reservations we could find reservations
which in sum gives 0 (Zero) and remove them.
© 2018 Magento, Inc. Page | 36
Order Placement – Step 9 (like Step 1)
France Warehouse
SKU-1: 3qty
EU Stock
SKU-1: 13qty
Italy Warehouse
SKU-1: 10qty
Raw data Index Reservations
Available Qty: 13qty (data from index, empty reservations)
Data is NOT changed Reservations have been removed
No records
© 2018 Magento, Inc. Page | 37
API interface to test
© 2018 Magento, Inc. Page | 38
So, what’s about testing?
© 2018 Magento, Inc. Page | 39
What about fixtures?
© 2018 Magento, Inc. Page | 40
© 2018 Magento, Inc. Page | 41
Tests Isolation
© 2018 Magento, Inc. Page | 42
Using DocBlock Annotations
http://devdocs.magento.com/guides/v2.2/test/integration/annotations.html
© 2018 Magento, Inc. Page | 43
© 2018 Magento, Inc. Page | 44
Clean the state after your tests!
© 2018 Magento, Inc. Page | 45
Cleaning up the state. Rollback Fixtures
© 2018 Magento, Inc. Page | 46
Cleaning up the state. Rollback Fixtures
© 2018 Magento, Inc. Page | 47
Cleaning up the state
© 2018 Magento, Inc. Page | 48
• Readability
– Test should be easy to follow
– Test should be simple to update
– Code can be reused to test all similar cases
• Stability
– Test should be stable by execution
– Test should be stable to code changes
– Test should focus on result not on the path
• Speed
Qualities of a Test
© 2018 Magento, Inc. Page | 49
Web API Testing
© 2018 Magento, Inc. Page | 50
© 2018 Magento, Inc. Page | 51
© 2018 Magento, Inc. Page | 52
© 2018 Magento, Inc. Page | 53
Headless Magento
© 2018 Magento, Inc. Page | 54
RESTful API
© 2018 Magento, Inc. Page | 55
Swagger
http://devdocs.magento.com/guides/v2.2/rest/generate-local.html
© 2018 Magento, Inc. Page | 56
Web API tests
https://github.com/magento-engcom/msi/wiki/How-to-create-Web-API-and-How-To-cover-them-with-Functional-Testing
© 2018 Magento, Inc. Page | 57
Database Generated IDs
© 2018 Magento, Inc. Page | 58
Why can’t we just use predefined IDs?
© 2018 Magento, Inc. Page | 59
Predefined ID approach (used in MSI)
© 2018 Magento, Inc. Page | 60
Predefined IDs matter
Just for this particular case (Source to Stock assignment) - we got rid of more
than 300 lines of boilerplate code in our Integration tests using Pre-Generated
IDs approach.
https://github.com/magento-engcom/msi/wiki/The-first-step-towards-pre-generated-
IDs.-And-how-this-will-improve-your-Integration-tests
© 2018 Magento, Inc. Page | 61
Be Responsible or train your dog tests to be!
© 2018 Magento, Inc. Page | 62
Static Testing
© 2018 Magento, Inc. Page | 63
Strict Typing
© 2018 Magento, Inc. Page | 64
declare(strict_types=1)
© 2018 Magento, Inc. Page | 65
© 2018 Magento, Inc. Page | 66
LiveCodeTest
© 2018 Magento, Inc. Page | 67
Functional Testing
© 2018 Magento, Inc. Page | 68
http://devdocs.magento.com/guides/v2.2/mtf/mtf_introduction.html
© 2017 Magento, Inc. Page | 69
How to join us? Send an email to
engcom@magento.com
@iminyaylo
Thank y’all!

Más contenido relacionado

La actualidad más candente

Igor Miniailo - Magento 2 API Design Best Practices
Igor Miniailo - Magento 2 API Design Best PracticesIgor Miniailo - Magento 2 API Design Best Practices
Igor Miniailo - Magento 2 API Design Best PracticesAtwix
 
Valeriy Nayda - Best Practices in Magento 2. Based on Multi Source Inventory ...
Valeriy Nayda - Best Practices in Magento 2. Based on Multi Source Inventory ...Valeriy Nayda - Best Practices in Magento 2. Based on Multi Source Inventory ...
Valeriy Nayda - Best Practices in Magento 2. Based on Multi Source Inventory ...Atwix
 
Magento Storefront architecture
Magento Storefront architectureMagento Storefront architecture
Magento Storefront architectureIgor Miniailo
 
Chernivtsi Magento Meetup&Contribution day. Miniailo.I.
Chernivtsi Magento Meetup&Contribution day. Miniailo.I. Chernivtsi Magento Meetup&Contribution day. Miniailo.I.
Chernivtsi Magento Meetup&Contribution day. Miniailo.I. Elogic Magento Development
 
Goods and servers tax all industry
Goods and servers tax all industryGoods and servers tax all industry
Goods and servers tax all industrySupriya SAVIC
 
Awesome architectures in Magento 2.3
Awesome architectures in Magento 2.3Awesome architectures in Magento 2.3
Awesome architectures in Magento 2.3Alessandro Ronchi
 

La actualidad más candente (6)

Igor Miniailo - Magento 2 API Design Best Practices
Igor Miniailo - Magento 2 API Design Best PracticesIgor Miniailo - Magento 2 API Design Best Practices
Igor Miniailo - Magento 2 API Design Best Practices
 
Valeriy Nayda - Best Practices in Magento 2. Based on Multi Source Inventory ...
Valeriy Nayda - Best Practices in Magento 2. Based on Multi Source Inventory ...Valeriy Nayda - Best Practices in Magento 2. Based on Multi Source Inventory ...
Valeriy Nayda - Best Practices in Magento 2. Based on Multi Source Inventory ...
 
Magento Storefront architecture
Magento Storefront architectureMagento Storefront architecture
Magento Storefront architecture
 
Chernivtsi Magento Meetup&Contribution day. Miniailo.I.
Chernivtsi Magento Meetup&Contribution day. Miniailo.I. Chernivtsi Magento Meetup&Contribution day. Miniailo.I.
Chernivtsi Magento Meetup&Contribution day. Miniailo.I.
 
Goods and servers tax all industry
Goods and servers tax all industryGoods and servers tax all industry
Goods and servers tax all industry
 
Awesome architectures in Magento 2.3
Awesome architectures in Magento 2.3Awesome architectures in Magento 2.3
Awesome architectures in Magento 2.3
 

Similar a Magento 2 Automated Testing via examples of Multi-Source Inventory (MSI)

Eugene Shaksuvarov - Tuning Magento 2 for Maximum Performance
Eugene Shaksuvarov - Tuning Magento 2 for Maximum PerformanceEugene Shaksuvarov - Tuning Magento 2 for Maximum Performance
Eugene Shaksuvarov - Tuning Magento 2 for Maximum PerformanceMeet Magento Italy
 
Volodymyr Kublytskyi - Develop Product, Design Platform
Volodymyr Kublytskyi - Develop Product, Design PlatformVolodymyr Kublytskyi - Develop Product, Design Platform
Volodymyr Kublytskyi - Develop Product, Design PlatformMeet Magento Italy
 
Magento2.3 API Functional Testing
Magento2.3 API Functional TestingMagento2.3 API Functional Testing
Magento2.3 API Functional TestingVishwas Bhatnagar
 
Magento Function Testing Framework - Intro and Overview
Magento Function Testing Framework - Intro and OverviewMagento Function Testing Framework - Intro and Overview
Magento Function Testing Framework - Intro and OverviewTom Erskine
 
A long way from Monolith to Service Isolated Architecture #MM19NL
A long way from Monolith to Service Isolated Architecture #MM19NLA long way from Monolith to Service Isolated Architecture #MM19NL
A long way from Monolith to Service Isolated Architecture #MM19NLIgor Miniailo
 
Demystifying Multi Source Inventory(MSI) - M2NGP03 (Virtual Meetup)
 Demystifying Multi Source Inventory(MSI) - M2NGP03 (Virtual Meetup) Demystifying Multi Source Inventory(MSI) - M2NGP03 (Virtual Meetup)
Demystifying Multi Source Inventory(MSI) - M2NGP03 (Virtual Meetup)ShilpaGajbhiye2
 
Max Yekaterinenko - Magento 2 & Quality
Max Yekaterinenko - Magento 2 & QualityMax Yekaterinenko - Magento 2 & Quality
Max Yekaterinenko - Magento 2 & QualityMeet Magento Italy
 
Backwards Compatibility Developers Guide. #MM17NL
Backwards Compatibility Developers Guide. #MM17NLBackwards Compatibility Developers Guide. #MM17NL
Backwards Compatibility Developers Guide. #MM17NLIgor Miniailo
 
API design best practices
API design best practicesAPI design best practices
API design best practicesIgor Miniailo
 
Introduction to Integration Tests in Magento / Adobe Commerce
Introduction to Integration Tests in Magento / Adobe CommerceIntroduction to Integration Tests in Magento / Adobe Commerce
Introduction to Integration Tests in Magento / Adobe CommerceBartosz Górski
 
Introduction to Integration Tests in Magento / Adobe Commerce
Introduction to Integration Tests in Magento / Adobe CommerceIntroduction to Integration Tests in Magento / Adobe Commerce
Introduction to Integration Tests in Magento / Adobe CommerceBartosz Górski
 
Magento 2.3 Schema and Data Patches
Magento 2.3 Schema and Data PatchesMagento 2.3 Schema and Data Patches
Magento 2.3 Schema and Data Patchesatishgoswami
 
Magento Commerce Global contribution day 2020
Magento Commerce Global contribution day 2020Magento Commerce Global contribution day 2020
Magento Commerce Global contribution day 2020Slava Mankivski
 
Backward Compatibility Developer's Guide Webinar
Backward Compatibility Developer's Guide WebinarBackward Compatibility Developer's Guide Webinar
Backward Compatibility Developer's Guide WebinarIgor Miniailo
 
Magento 2.1 ee content staging
Magento 2.1 ee content stagingMagento 2.1 ee content staging
Magento 2.1 ee content stagingAnton Kaplya
 
Mli 2017 technical first steps to building secure Magento extensions
Mli 2017 technical first steps to building secure Magento extensionsMli 2017 technical first steps to building secure Magento extensions
Mli 2017 technical first steps to building secure Magento extensionsHanoi MagentoMeetup
 

Similar a Magento 2 Automated Testing via examples of Multi-Source Inventory (MSI) (20)

Eugene Shaksuvarov - Tuning Magento 2 for Maximum Performance
Eugene Shaksuvarov - Tuning Magento 2 for Maximum PerformanceEugene Shaksuvarov - Tuning Magento 2 for Maximum Performance
Eugene Shaksuvarov - Tuning Magento 2 for Maximum Performance
 
Volodymyr Kublytskyi - Develop Product, Design Platform
Volodymyr Kublytskyi - Develop Product, Design PlatformVolodymyr Kublytskyi - Develop Product, Design Platform
Volodymyr Kublytskyi - Develop Product, Design Platform
 
Magento2.3 API Functional Testing
Magento2.3 API Functional TestingMagento2.3 API Functional Testing
Magento2.3 API Functional Testing
 
Magento Function Testing Framework - Intro and Overview
Magento Function Testing Framework - Intro and OverviewMagento Function Testing Framework - Intro and Overview
Magento Function Testing Framework - Intro and Overview
 
A long way from Monolith to Service Isolated Architecture #MM19NL
A long way from Monolith to Service Isolated Architecture #MM19NLA long way from Monolith to Service Isolated Architecture #MM19NL
A long way from Monolith to Service Isolated Architecture #MM19NL
 
Demystifying Multi Source Inventory(MSI) - M2NGP03 (Virtual Meetup)
 Demystifying Multi Source Inventory(MSI) - M2NGP03 (Virtual Meetup) Demystifying Multi Source Inventory(MSI) - M2NGP03 (Virtual Meetup)
Demystifying Multi Source Inventory(MSI) - M2NGP03 (Virtual Meetup)
 
Max Yekaterinenko - Magento 2 & Quality
Max Yekaterinenko - Magento 2 & QualityMax Yekaterinenko - Magento 2 & Quality
Max Yekaterinenko - Magento 2 & Quality
 
Backwards Compatibility Developers Guide. #MM17NL
Backwards Compatibility Developers Guide. #MM17NLBackwards Compatibility Developers Guide. #MM17NL
Backwards Compatibility Developers Guide. #MM17NL
 
API design best practices
API design best practicesAPI design best practices
API design best practices
 
Introduction to Integration Tests in Magento / Adobe Commerce
Introduction to Integration Tests in Magento / Adobe CommerceIntroduction to Integration Tests in Magento / Adobe Commerce
Introduction to Integration Tests in Magento / Adobe Commerce
 
Introduction to Integration Tests in Magento / Adobe Commerce
Introduction to Integration Tests in Magento / Adobe CommerceIntroduction to Integration Tests in Magento / Adobe Commerce
Introduction to Integration Tests in Magento / Adobe Commerce
 
Magento best practices
Magento best practicesMagento best practices
Magento best practices
 
Magento Technical guidelines
Magento Technical guidelinesMagento Technical guidelines
Magento Technical guidelines
 
Magento 2.3 Schema and Data Patches
Magento 2.3 Schema and Data PatchesMagento 2.3 Schema and Data Patches
Magento 2.3 Schema and Data Patches
 
Magento Commerce Global contribution day 2020
Magento Commerce Global contribution day 2020Magento Commerce Global contribution day 2020
Magento Commerce Global contribution day 2020
 
Backward Compatibility Developer's Guide Webinar
Backward Compatibility Developer's Guide WebinarBackward Compatibility Developer's Guide Webinar
Backward Compatibility Developer's Guide Webinar
 
Magento 2.1 ee content staging
Magento 2.1 ee content stagingMagento 2.1 ee content staging
Magento 2.1 ee content staging
 
Mli 2017 technical first steps to building secure Magento extensions
Mli 2017 technical first steps to building secure Magento extensionsMli 2017 technical first steps to building secure Magento extensions
Mli 2017 technical first steps to building secure Magento extensions
 
Vue Vuex 101
Vue Vuex 101Vue Vuex 101
Vue Vuex 101
 
BigCommerce Akeneo Connector
BigCommerce Akeneo ConnectorBigCommerce Akeneo Connector
BigCommerce Akeneo Connector
 

Más de Igor Miniailo

CQRS and Event-Sourcing in Magento2 by examples of MSI
CQRS and Event-Sourcing in Magento2 by examples of MSICQRS and Event-Sourcing in Magento2 by examples of MSI
CQRS and Event-Sourcing in Magento2 by examples of MSIIgor Miniailo
 
MageConf 2017, Design API Best Practices
MageConf 2017, Design API Best PracticesMageConf 2017, Design API Best Practices
MageConf 2017, Design API Best PracticesIgor Miniailo
 
Multi-Source Inventory. Imagine. Las Vegas. 2018
Multi-Source Inventory. Imagine. Las Vegas. 2018Multi-Source Inventory. Imagine. Las Vegas. 2018
Multi-Source Inventory. Imagine. Las Vegas. 2018Igor Miniailo
 
Backward Compatibility Developer's Guide in Magento 2. #MM17CZ
Backward Compatibility Developer's Guide in Magento 2. #MM17CZBackward Compatibility Developer's Guide in Magento 2. #MM17CZ
Backward Compatibility Developer's Guide in Magento 2. #MM17CZIgor Miniailo
 
Backward Compatibility Developer's Guide in Magento 2
Backward Compatibility Developer's Guide in Magento 2Backward Compatibility Developer's Guide in Magento 2
Backward Compatibility Developer's Guide in Magento 2Igor Miniailo
 
Magento Developer Talk. Microservice Architecture and Actor Model
Magento Developer Talk. Microservice Architecture and Actor ModelMagento Developer Talk. Microservice Architecture and Actor Model
Magento Developer Talk. Microservice Architecture and Actor ModelIgor Miniailo
 
Applying Code Customizations to Magento 2
Applying Code Customizations to Magento 2 Applying Code Customizations to Magento 2
Applying Code Customizations to Magento 2 Igor Miniailo
 
Modular development in Magento 2
Modular development in Magento 2Modular development in Magento 2
Modular development in Magento 2Igor Miniailo
 
Мониторинг веб приложений на PHP в режиме реального времени с помощью Pinba. ...
Мониторинг веб приложений на PHP в режиме реального времени с помощью Pinba. ...Мониторинг веб приложений на PHP в режиме реального времени с помощью Pinba. ...
Мониторинг веб приложений на PHP в режиме реального времени с помощью Pinba. ...Igor Miniailo
 
Сommand Query Responsibility Segregation (CQRS) - Отделяем Мух от Котлет
Сommand Query Responsibility Segregation (CQRS) - Отделяем Мух от КотлетСommand Query Responsibility Segregation (CQRS) - Отделяем Мух от Котлет
Сommand Query Responsibility Segregation (CQRS) - Отделяем Мух от КотлетIgor Miniailo
 

Más de Igor Miniailo (10)

CQRS and Event-Sourcing in Magento2 by examples of MSI
CQRS and Event-Sourcing in Magento2 by examples of MSICQRS and Event-Sourcing in Magento2 by examples of MSI
CQRS and Event-Sourcing in Magento2 by examples of MSI
 
MageConf 2017, Design API Best Practices
MageConf 2017, Design API Best PracticesMageConf 2017, Design API Best Practices
MageConf 2017, Design API Best Practices
 
Multi-Source Inventory. Imagine. Las Vegas. 2018
Multi-Source Inventory. Imagine. Las Vegas. 2018Multi-Source Inventory. Imagine. Las Vegas. 2018
Multi-Source Inventory. Imagine. Las Vegas. 2018
 
Backward Compatibility Developer's Guide in Magento 2. #MM17CZ
Backward Compatibility Developer's Guide in Magento 2. #MM17CZBackward Compatibility Developer's Guide in Magento 2. #MM17CZ
Backward Compatibility Developer's Guide in Magento 2. #MM17CZ
 
Backward Compatibility Developer's Guide in Magento 2
Backward Compatibility Developer's Guide in Magento 2Backward Compatibility Developer's Guide in Magento 2
Backward Compatibility Developer's Guide in Magento 2
 
Magento Developer Talk. Microservice Architecture and Actor Model
Magento Developer Talk. Microservice Architecture and Actor ModelMagento Developer Talk. Microservice Architecture and Actor Model
Magento Developer Talk. Microservice Architecture and Actor Model
 
Applying Code Customizations to Magento 2
Applying Code Customizations to Magento 2 Applying Code Customizations to Magento 2
Applying Code Customizations to Magento 2
 
Modular development in Magento 2
Modular development in Magento 2Modular development in Magento 2
Modular development in Magento 2
 
Мониторинг веб приложений на PHP в режиме реального времени с помощью Pinba. ...
Мониторинг веб приложений на PHP в режиме реального времени с помощью Pinba. ...Мониторинг веб приложений на PHP в режиме реального времени с помощью Pinba. ...
Мониторинг веб приложений на PHP в режиме реального времени с помощью Pinba. ...
 
Сommand Query Responsibility Segregation (CQRS) - Отделяем Мух от Котлет
Сommand Query Responsibility Segregation (CQRS) - Отделяем Мух от КотлетСommand Query Responsibility Segregation (CQRS) - Отделяем Мух от Котлет
Сommand Query Responsibility Segregation (CQRS) - Отделяем Мух от Котлет
 

Último

How to Choose the Right Laravel Development Partner in New York City_compress...
How to Choose the Right Laravel Development Partner in New York City_compress...How to Choose the Right Laravel Development Partner in New York City_compress...
How to Choose the Right Laravel Development Partner in New York City_compress...software pro Development
 
5 Signs You Need a Fashion PLM Software.pdf
5 Signs You Need a Fashion PLM Software.pdf5 Signs You Need a Fashion PLM Software.pdf
5 Signs You Need a Fashion PLM Software.pdfWave PLM
 
Tech Tuesday-Harness the Power of Effective Resource Planning with OnePlan’s ...
Tech Tuesday-Harness the Power of Effective Resource Planning with OnePlan’s ...Tech Tuesday-Harness the Power of Effective Resource Planning with OnePlan’s ...
Tech Tuesday-Harness the Power of Effective Resource Planning with OnePlan’s ...OnePlan Solutions
 
+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
 
Shapes for Sharing between Graph Data Spaces - and Epistemic Querying of RDF-...
Shapes for Sharing between Graph Data Spaces - and Epistemic Querying of RDF-...Shapes for Sharing between Graph Data Spaces - and Epistemic Querying of RDF-...
Shapes for Sharing between Graph Data Spaces - and Epistemic Querying of RDF-...Steffen Staab
 
Exploring the Best Video Editing App.pdf
Exploring the Best Video Editing App.pdfExploring the Best Video Editing App.pdf
Exploring the Best Video Editing App.pdfproinshot.com
 
VTU technical seminar 8Th Sem on Scikit-learn
VTU technical seminar 8Th Sem on Scikit-learnVTU technical seminar 8Th Sem on Scikit-learn
VTU technical seminar 8Th Sem on Scikit-learnAmarnathKambale
 
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️Delhi Call girls
 
HR Software Buyers Guide in 2024 - HRSoftware.com
HR Software Buyers Guide in 2024 - HRSoftware.comHR Software Buyers Guide in 2024 - HRSoftware.com
HR Software Buyers Guide in 2024 - HRSoftware.comFatema Valibhai
 
How To Use Server-Side Rendering with Nuxt.js
How To Use Server-Side Rendering with Nuxt.jsHow To Use Server-Side Rendering with Nuxt.js
How To Use Server-Side Rendering with Nuxt.jsAndolasoft Inc
 
A Secure and Reliable Document Management System is Essential.docx
A Secure and Reliable Document Management System is Essential.docxA Secure and Reliable Document Management System is Essential.docx
A Secure and Reliable Document Management System is Essential.docxComplianceQuest1
 
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 AidPhilip Schwarz
 
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️Delhi Call girls
 
8257 interfacing 2 in microprocessor for btech students
8257 interfacing 2 in microprocessor for btech students8257 interfacing 2 in microprocessor for btech students
8257 interfacing 2 in microprocessor for btech studentsHimanshiGarg82
 
Unveiling the Tech Salsa of LAMs with Janus in Real-Time Applications
Unveiling the Tech Salsa of LAMs with Janus in Real-Time ApplicationsUnveiling the Tech Salsa of LAMs with Janus in Real-Time Applications
Unveiling the Tech Salsa of LAMs with Janus in Real-Time ApplicationsAlberto González Trastoy
 
The Guide to Integrating Generative AI into Unified Continuous Testing Platfo...
The Guide to Integrating Generative AI into Unified Continuous Testing Platfo...The Guide to Integrating Generative AI into Unified Continuous Testing Platfo...
The Guide to Integrating Generative AI into Unified Continuous Testing Platfo...kalichargn70th171
 
The Ultimate Test Automation Guide_ Best Practices and Tips.pdf
The Ultimate Test Automation Guide_ Best Practices and Tips.pdfThe Ultimate Test Automation Guide_ Best Practices and Tips.pdf
The Ultimate Test Automation Guide_ Best Practices and Tips.pdfkalichargn70th171
 
Learn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdf
Learn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdfLearn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdf
Learn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdfkalichargn70th171
 
introduction-to-automotive Andoid os-csimmonds-ndctechtown-2021.pdf
introduction-to-automotive Andoid os-csimmonds-ndctechtown-2021.pdfintroduction-to-automotive Andoid os-csimmonds-ndctechtown-2021.pdf
introduction-to-automotive Andoid os-csimmonds-ndctechtown-2021.pdfVishalKumarJha10
 

Último (20)

How to Choose the Right Laravel Development Partner in New York City_compress...
How to Choose the Right Laravel Development Partner in New York City_compress...How to Choose the Right Laravel Development Partner in New York City_compress...
How to Choose the Right Laravel Development Partner in New York City_compress...
 
5 Signs You Need a Fashion PLM Software.pdf
5 Signs You Need a Fashion PLM Software.pdf5 Signs You Need a Fashion PLM Software.pdf
5 Signs You Need a Fashion PLM Software.pdf
 
Tech Tuesday-Harness the Power of Effective Resource Planning with OnePlan’s ...
Tech Tuesday-Harness the Power of Effective Resource Planning with OnePlan’s ...Tech Tuesday-Harness the Power of Effective Resource Planning with OnePlan’s ...
Tech Tuesday-Harness the Power of Effective Resource Planning with OnePlan’s ...
 
+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...
 
Shapes for Sharing between Graph Data Spaces - and Epistemic Querying of RDF-...
Shapes for Sharing between Graph Data Spaces - and Epistemic Querying of RDF-...Shapes for Sharing between Graph Data Spaces - and Epistemic Querying of RDF-...
Shapes for Sharing between Graph Data Spaces - and Epistemic Querying of RDF-...
 
Exploring the Best Video Editing App.pdf
Exploring the Best Video Editing App.pdfExploring the Best Video Editing App.pdf
Exploring the Best Video Editing App.pdf
 
VTU technical seminar 8Th Sem on Scikit-learn
VTU technical seminar 8Th Sem on Scikit-learnVTU technical seminar 8Th Sem on Scikit-learn
VTU technical seminar 8Th Sem on Scikit-learn
 
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️
 
HR Software Buyers Guide in 2024 - HRSoftware.com
HR Software Buyers Guide in 2024 - HRSoftware.comHR Software Buyers Guide in 2024 - HRSoftware.com
HR Software Buyers Guide in 2024 - HRSoftware.com
 
How To Use Server-Side Rendering with Nuxt.js
How To Use Server-Side Rendering with Nuxt.jsHow To Use Server-Side Rendering with Nuxt.js
How To Use Server-Side Rendering with Nuxt.js
 
A Secure and Reliable Document Management System is Essential.docx
A Secure and Reliable Document Management System is Essential.docxA Secure and Reliable Document Management System is Essential.docx
A Secure and Reliable Document Management System is Essential.docx
 
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
 
CHEAP Call Girls in Pushp Vihar (-DELHI )🔝 9953056974🔝(=)/CALL GIRLS SERVICE
CHEAP Call Girls in Pushp Vihar (-DELHI )🔝 9953056974🔝(=)/CALL GIRLS SERVICECHEAP Call Girls in Pushp Vihar (-DELHI )🔝 9953056974🔝(=)/CALL GIRLS SERVICE
CHEAP Call Girls in Pushp Vihar (-DELHI )🔝 9953056974🔝(=)/CALL GIRLS SERVICE
 
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️
 
8257 interfacing 2 in microprocessor for btech students
8257 interfacing 2 in microprocessor for btech students8257 interfacing 2 in microprocessor for btech students
8257 interfacing 2 in microprocessor for btech students
 
Unveiling the Tech Salsa of LAMs with Janus in Real-Time Applications
Unveiling the Tech Salsa of LAMs with Janus in Real-Time ApplicationsUnveiling the Tech Salsa of LAMs with Janus in Real-Time Applications
Unveiling the Tech Salsa of LAMs with Janus in Real-Time Applications
 
The Guide to Integrating Generative AI into Unified Continuous Testing Platfo...
The Guide to Integrating Generative AI into Unified Continuous Testing Platfo...The Guide to Integrating Generative AI into Unified Continuous Testing Platfo...
The Guide to Integrating Generative AI into Unified Continuous Testing Platfo...
 
The Ultimate Test Automation Guide_ Best Practices and Tips.pdf
The Ultimate Test Automation Guide_ Best Practices and Tips.pdfThe Ultimate Test Automation Guide_ Best Practices and Tips.pdf
The Ultimate Test Automation Guide_ Best Practices and Tips.pdf
 
Learn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdf
Learn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdfLearn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdf
Learn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdf
 
introduction-to-automotive Andoid os-csimmonds-ndctechtown-2021.pdf
introduction-to-automotive Andoid os-csimmonds-ndctechtown-2021.pdfintroduction-to-automotive Andoid os-csimmonds-ndctechtown-2021.pdf
introduction-to-automotive Andoid os-csimmonds-ndctechtown-2021.pdf
 

Magento 2 Automated Testing via examples of Multi-Source Inventory (MSI)

  • 1. © 2018 Magento, Inc. Page | 1 Automated Testing in Magento 2 Igor Miniailo Magento 2 Architect
  • 2. © 2018 Magento, Inc. Page | 2
  • 3. © 2018 Magento, Inc. Page | 3
  • 4. © 2018 Magento, Inc. Page | 4 *Automated Testing in Magento 2 based on examples from Multi-Source Inventory
  • 5. © 2018 Magento, Inc. Page | 5 MSI is designed to enable stock management in multiple locations so that merchants can properly reflect their physical warehouses in Magento system without external extensions or customization Multi-Source Inventory (MSI) https://github.com/magento-engcom/msi/
  • 6. © 2018 Magento, Inc. Page | 6 Split the inventory between the sources within one Magento installation
  • 7. © 2018 Magento, Inc. Page | 7 Replace current CatalogInventory with MSI
  • 8. © 2018 Magento, Inc. Page | 8
  • 9. © 2018 Magento, Inc. Page | 9
  • 10. © 2018 Magento, Inc. Page | 10 Unit Testing
  • 11. © 2018 Magento, Inc. Page | 11 Unit test types https://martinfowler.com/bliki/UnitTest.html
  • 12. © 2018 Magento, Inc. Page | 12 Test Doubles https://martinfowler.com/bliki/TestDouble.html
  • 13. © 2018 Magento, Inc. Page | 13
  • 14. © 2018 Magento, Inc. Page | 14 Let’s see how typical Unit test for this code looks like
  • 15. © 2018 Magento, Inc. Page | 15 Solitary Unit Test with Mocks and Expects
  • 16. © 2018 Magento, Inc. Page | 16 TTDD - Tautological Test Driven Development Tautological: - needless, redundant repetition of an idea - repetition of same sense in different words; - the phrase "a beginner who has just started" is tautological
  • 17. © 2018 Magento, Inc. Page | 17 TTDD - Tautological Test Driven Development Unit tests currently do not check that code works properly, but check that code works the same way as we implemented it. Coupling between Production and Testing code. Test duplicates the business logic code.
  • 18. © 2018 Magento, Inc. Page | 18 http://fabiopereira.me/blog/2010/05/27/ttdd-tautological- test-driven-development-anti-pattern/
  • 19. © 2018 Magento, Inc. Page | 19 • Asserts more interactions with collaborators than the outputs • It doesn’t really test the behavior of the class, but only its implementation • The test is too white box • Too much mock setup deviates the intent of the test • Adding a new feature or changing an existing one requires changing mock expectations • Such tests don’t help to find bugs in application code
  • 20. © 2018 Magento, Inc. Page | 20 The problem is not in Unit tests The problem is in Transient State of objects under the test (especially in legacy code)
  • 21. © 2018 Magento, Inc. Page | 21
  • 22. © 2018 Magento, Inc. Page | 22 Two Unit tests passed. No Integration tests
  • 23. © 2018 Magento, Inc. Page | 23 Two Unit tests passed. No Integration tests
  • 24. © 2018 Magento, Inc. Page | 24 Whether Unit tests are useless? NO! Unit tests could be the first “Smell” informing that something wrong with your application code
  • 25. © 2018 Magento, Inc. Page | 25 • Readability – Test should be easy to follow – Test should be simple to update – Code can be reused to test all similar cases • Stability – Test should be stable by execution – Test should be stable to code changes – Test should focus on result not on the path • Speed Qualities of a Test
  • 26. © 2018 Magento, Inc. Page | 26 Integration Testing
  • 27. © 2018 Magento, Inc. Page | 27 Reservation - the entity is used when the order is placed and we need to reserve some product quantity in stock. Reservations are append only operations and help us to prevent blocking operations and race conditions at the time of checkout. Reservation mechanism https://github.com/magento-engcom/msi/wiki/Reservations
  • 28. © 2018 Magento, Inc. Page | 28 Order Placement – Step 1 France Warehouse SKU-1: 5qty EU Stock SKU-1: 15qty Italy Warehouse SKU-1: 10qty Raw data Index Reservations No records Available Qty: 15qty (data from index, empty reservations)
  • 29. © 2018 Magento, Inc. Page | 29 Order Placement – Step 2 Action: Customer buys 5 products on frontend
  • 30. © 2018 Magento, Inc. Page | 30 Order Placement – Step 3 France Warehouse SKU-1: 5qty EU Stock SKU-1: 15qty Italy Warehouse SKU-1: 10qty Raw data Index Reservations SKU-1: -5 Available Qty: 10qty (data from index 15, apply all reservations -5) Data is NOT changed Reservation has been added
  • 31. © 2018 Magento, Inc. Page | 31 Order Placement – Step 4 Action: Admin makes a re-order, 3 products out of 5 returned, and new order consists of 2 products
  • 32. © 2018 Magento, Inc. Page | 32 Order Placement – Step 5 France Warehouse SKU-1: 5qty EU Stock SKU-1: 15qty Italy Warehouse SKU-1: 10qty Raw data Index Reservations SKU-1: -5 SKU-1: +3 Available Qty: 13qty (data from index 15, apply reservations -5+3) Data is NOT changed Reservation has been added
  • 33. © 2018 Magento, Inc. Page | 33 Order Placement – Step 6 Action: Admin completes order. Re-index was run.
  • 34. © 2018 Magento, Inc. Page | 34 Order Placement – Step 7 France Warehouse SKU-1: 3qty EU Stock SKU-1: 13qty Italy Warehouse SKU-1: 10qty Raw data Index Reservations SKU-1: -5 SKU-1: +3 SKU-1: +2 Available Qty: 13qty (data from index 13, apply reservations -5+3+2=0) Data is CHANGED Compensation Reservation has been added
  • 35. © 2018 Magento, Inc. Page | 35 Order Placement – Step 8 Action: Reservation cleaning Looping through these reservations we could find reservations which in sum gives 0 (Zero) and remove them.
  • 36. © 2018 Magento, Inc. Page | 36 Order Placement – Step 9 (like Step 1) France Warehouse SKU-1: 3qty EU Stock SKU-1: 13qty Italy Warehouse SKU-1: 10qty Raw data Index Reservations Available Qty: 13qty (data from index, empty reservations) Data is NOT changed Reservations have been removed No records
  • 37. © 2018 Magento, Inc. Page | 37 API interface to test
  • 38. © 2018 Magento, Inc. Page | 38 So, what’s about testing?
  • 39. © 2018 Magento, Inc. Page | 39 What about fixtures?
  • 40. © 2018 Magento, Inc. Page | 40
  • 41. © 2018 Magento, Inc. Page | 41 Tests Isolation
  • 42. © 2018 Magento, Inc. Page | 42 Using DocBlock Annotations http://devdocs.magento.com/guides/v2.2/test/integration/annotations.html
  • 43. © 2018 Magento, Inc. Page | 43
  • 44. © 2018 Magento, Inc. Page | 44 Clean the state after your tests!
  • 45. © 2018 Magento, Inc. Page | 45 Cleaning up the state. Rollback Fixtures
  • 46. © 2018 Magento, Inc. Page | 46 Cleaning up the state. Rollback Fixtures
  • 47. © 2018 Magento, Inc. Page | 47 Cleaning up the state
  • 48. © 2018 Magento, Inc. Page | 48 • Readability – Test should be easy to follow – Test should be simple to update – Code can be reused to test all similar cases • Stability – Test should be stable by execution – Test should be stable to code changes – Test should focus on result not on the path • Speed Qualities of a Test
  • 49. © 2018 Magento, Inc. Page | 49 Web API Testing
  • 50. © 2018 Magento, Inc. Page | 50
  • 51. © 2018 Magento, Inc. Page | 51
  • 52. © 2018 Magento, Inc. Page | 52
  • 53. © 2018 Magento, Inc. Page | 53 Headless Magento
  • 54. © 2018 Magento, Inc. Page | 54 RESTful API
  • 55. © 2018 Magento, Inc. Page | 55 Swagger http://devdocs.magento.com/guides/v2.2/rest/generate-local.html
  • 56. © 2018 Magento, Inc. Page | 56 Web API tests https://github.com/magento-engcom/msi/wiki/How-to-create-Web-API-and-How-To-cover-them-with-Functional-Testing
  • 57. © 2018 Magento, Inc. Page | 57 Database Generated IDs
  • 58. © 2018 Magento, Inc. Page | 58 Why can’t we just use predefined IDs?
  • 59. © 2018 Magento, Inc. Page | 59 Predefined ID approach (used in MSI)
  • 60. © 2018 Magento, Inc. Page | 60 Predefined IDs matter Just for this particular case (Source to Stock assignment) - we got rid of more than 300 lines of boilerplate code in our Integration tests using Pre-Generated IDs approach. https://github.com/magento-engcom/msi/wiki/The-first-step-towards-pre-generated- IDs.-And-how-this-will-improve-your-Integration-tests
  • 61. © 2018 Magento, Inc. Page | 61 Be Responsible or train your dog tests to be!
  • 62. © 2018 Magento, Inc. Page | 62 Static Testing
  • 63. © 2018 Magento, Inc. Page | 63 Strict Typing
  • 64. © 2018 Magento, Inc. Page | 64 declare(strict_types=1)
  • 65. © 2018 Magento, Inc. Page | 65
  • 66. © 2018 Magento, Inc. Page | 66 LiveCodeTest
  • 67. © 2018 Magento, Inc. Page | 67 Functional Testing
  • 68. © 2018 Magento, Inc. Page | 68 http://devdocs.magento.com/guides/v2.2/mtf/mtf_introduction.html
  • 69. © 2017 Magento, Inc. Page | 69 How to join us? Send an email to engcom@magento.com @iminyaylo Thank y’all!