Magento Performance Toolkit Customization @SergiiShymko Software Engineer, Magento
Magento Performance Toolkit • Available at GitHub github.com/magento/magento-performance-toolkit • Designed for EE 1.14, 1.13, 1.12 • Compatible with CE* • Features: – Generation of sample data – Imitation of user activity – Comparing performance before/after changes * – after some tweaks ;-)
Performance Toolkit Architecture Overview Magento instance Fixtures Profiles Scenarios
Performance Toolkit Architecture: Fixtures Magento instance Fixtures Profiles Scenarios Predefined state of environment
Performance Toolkit Architecture: Profiles Magento instance Fixtures Profiles Scenarios Presets of fixture parameters
Performance Toolkit Architecture: Scenarios Magento instance Fixtures Profiles Scenarios User activity imitation
Performance Toolkit Technologies Magento instance Fixtures Profiles Scenarios PHP, XML JMeter
Repository Structure • 1.12/… • 1.13/… • 1.14/ – fixtures/ • categories.php • … – framework/… – profiles/ • small.xml • … – benchmark.jmx – generate.php • Magento Performance Toolkit User Guide.pdf Fixtures Profiles Scenarios
Usage 1. Install JMeter 2. Install JMeter plugins Standard and Extras 3. Locate Magento instance 4. Extract toolkit files to <magento_dir>/dev/tools/performance_toolkit/ 5. Generate fixture data php -f generate.php -- --profile=<profile_path> 6. Run JMeter scenario jmeter -n -t benchmark.jmx -Jhost=magento.example.com -Jbase_path=/ 7. Compare results with previous
Customizing the Toolkit Customizing Fixtures Customizing Profiles Customizing Scenarios
How to Create a Custom Fixture 1. Create fixture script file fixtures/<fixture_name>.php 2. Register fixture in framework/fixtures.xml 3. Describe fixture parameters in framework/labels.xml
Create from scratch Reuse existing code Fixture Script Implementation 1. Log data when saving entity in the admin panel 2. Clean up logged data 3. Substitute variable data 4. Parameterize fixture  Adopt fixtures from Magento 2  Performance tests  Integration tests Use Magento API
Fixture Example $product = Mage::getModel('catalog/product'); $product->setData(array( 'type_id' => Mage_Catalog_Model_Product_Type::TYPE_VIRTUAL, 'name' => 'Virtual Product 1', 'sku' => 'virtual_product_1', 'price' => 10, 'visibility' => Mage_Catalog_Model_Product_Visibility::VISIBILITY_BOTH, 'status' => Mage_Catalog_Model_Product_Status::STATUS_ENABLED, // ... )); $product->save(); fixtures/product_virtual.php
Parameterized Fixture $count = MagentoToolkitFrameworkConfig::getInstance()->getValue('virt_products', 1); for ($i = 1; $i <= $count; $i++) { $product = Mage::getModel('catalog/product'); $product->setData(array( 'type_id' => Mage_Catalog_Model_Product_Type::TYPE_VIRTUAL, 'name' => 'Virtual Product ' . $i, 'sku' => 'virtual_product_' . $i, 'price' => 10, 'visibility' => Mage_Catalog_Model_Product_Visibility::VISIBILITY_BOTH, 'status' => Mage_Catalog_Model_Product_Status::STATUS_ENABLED, // ... )); $product->save(); } fixtures/products_virtual.php
Fixture Registration <fixtures> <products_virtual> <file>products_virtual.php</file> <action>Generating virtual products</action> </products_virtual> </fixtures> framework/fixtures.xml <config> <labels> <virt_products>Number of virtual products</virt_products> </labels> </config> framework/labels.xml
Customizing Profiles How to Create Custom Profiles
How to Create a Custom Profile <config> <profile> <websites>1</websites> <store_groups>1</store_groups> <store_views>1</store_views> <simple_products>800</simple_products> <configurable_products>50</configurable_products> <virt_products>100</virt_products> <categories>30</categories> <categories_nesting_level>3</categories_nesting_level> <catalog_price_rules>10</catalog_price_rules> <catalog_target_rules>2</catalog_target_rules> <cart_price_rules>10</cart_price_rules> <cart_price_rules_floor>2</cart_price_rules_floor> <customers>20</customers> </profile> </config> profiles/<profile_name>.xml
Customizing Scenarios How to Create Custom Scenarios
Create from scratch Reuse existing code JMeter Scenario Implementation 1. Set up JMeter to act as HTTP proxy server 2. Configure browser to use proxy 3. Record your manual actions 4. Clean up recorded requests 5. Substitute variable data 6. Parameterize scenario  Extract scenarios from benchmark.jmx  Adopt scenarios from Magento 2 performance tests Use JMeter GUI
JMeter GUI
Parameterized Scenario • Accept input parameters ${__P(<param_name>, <default_value>)} • Reuse parameters of benchmark.jmx host, base_path, etc. • Run with custom parameters jmeter -n -t <scenario_name>.jmx -J<param_name>=<param_value>
Summary & Tips • Fixture creation – Use Magento models – Use import/export API – Adopt fixtures from Magento 2 • Scenario creation – Use JMeter script recorder – Disable secret keys in URLs – Adopt scenarios from Magento 2 • Infrastructure – Run JMeter on a separate server JMeter Magento
Thank You! Q & A @SergiiShymko sshymko@ebay.com The answer is... 42
Resources • JMeter and plugins jmeter.apache.org jmeter-plugins.org • Magento Performance Toolkit for Magento 1.x github.com/magento/magento-performance-toolkit • Automated Tests for Magento 2 github.com/magento/magento2/tree/develop/dev/tests/

Magento Performance Toolkit

  • 2.
  • 3.
    Magento Performance Toolkit •Available at GitHub github.com/magento/magento-performance-toolkit • Designed for EE 1.14, 1.13, 1.12 • Compatible with CE* • Features: – Generation of sample data – Imitation of user activity – Comparing performance before/after changes * – after some tweaks ;-)
  • 4.
    Performance Toolkit Architecture Overview Magentoinstance Fixtures Profiles Scenarios
  • 5.
    Performance Toolkit Architecture: Fixtures Magentoinstance Fixtures Profiles Scenarios Predefined state of environment
  • 6.
    Performance Toolkit Architecture: Profiles Magentoinstance Fixtures Profiles Scenarios Presets of fixture parameters
  • 7.
    Performance Toolkit Architecture: Scenarios Magentoinstance Fixtures Profiles Scenarios User activity imitation
  • 8.
  • 9.
    Repository Structure • 1.12/… •1.13/… • 1.14/ – fixtures/ • categories.php • … – framework/… – profiles/ • small.xml • … – benchmark.jmx – generate.php • Magento Performance Toolkit User Guide.pdf Fixtures Profiles Scenarios
  • 10.
    Usage 1. Install JMeter 2.Install JMeter plugins Standard and Extras 3. Locate Magento instance 4. Extract toolkit files to <magento_dir>/dev/tools/performance_toolkit/ 5. Generate fixture data php -f generate.php -- --profile=<profile_path> 6. Run JMeter scenario jmeter -n -t benchmark.jmx -Jhost=magento.example.com -Jbase_path=/ 7. Compare results with previous
  • 11.
    Customizing the Toolkit CustomizingFixtures Customizing Profiles Customizing Scenarios
  • 12.
    How to Createa Custom Fixture 1. Create fixture script file fixtures/<fixture_name>.php 2. Register fixture in framework/fixtures.xml 3. Describe fixture parameters in framework/labels.xml
  • 13.
    Create from scratchReuse existing code Fixture Script Implementation 1. Log data when saving entity in the admin panel 2. Clean up logged data 3. Substitute variable data 4. Parameterize fixture  Adopt fixtures from Magento 2  Performance tests  Integration tests Use Magento API
  • 14.
    Fixture Example $product =Mage::getModel('catalog/product'); $product->setData(array( 'type_id' => Mage_Catalog_Model_Product_Type::TYPE_VIRTUAL, 'name' => 'Virtual Product 1', 'sku' => 'virtual_product_1', 'price' => 10, 'visibility' => Mage_Catalog_Model_Product_Visibility::VISIBILITY_BOTH, 'status' => Mage_Catalog_Model_Product_Status::STATUS_ENABLED, // ... )); $product->save(); fixtures/product_virtual.php
  • 15.
    Parameterized Fixture $count =MagentoToolkitFrameworkConfig::getInstance()->getValue('virt_products', 1); for ($i = 1; $i <= $count; $i++) { $product = Mage::getModel('catalog/product'); $product->setData(array( 'type_id' => Mage_Catalog_Model_Product_Type::TYPE_VIRTUAL, 'name' => 'Virtual Product ' . $i, 'sku' => 'virtual_product_' . $i, 'price' => 10, 'visibility' => Mage_Catalog_Model_Product_Visibility::VISIBILITY_BOTH, 'status' => Mage_Catalog_Model_Product_Status::STATUS_ENABLED, // ... )); $product->save(); } fixtures/products_virtual.php
  • 16.
    Fixture Registration <fixtures> <products_virtual> <file>products_virtual.php</file> <action>Generating virtualproducts</action> </products_virtual> </fixtures> framework/fixtures.xml <config> <labels> <virt_products>Number of virtual products</virt_products> </labels> </config> framework/labels.xml
  • 17.
    Customizing Profiles How toCreate Custom Profiles
  • 18.
    How to Createa Custom Profile <config> <profile> <websites>1</websites> <store_groups>1</store_groups> <store_views>1</store_views> <simple_products>800</simple_products> <configurable_products>50</configurable_products> <virt_products>100</virt_products> <categories>30</categories> <categories_nesting_level>3</categories_nesting_level> <catalog_price_rules>10</catalog_price_rules> <catalog_target_rules>2</catalog_target_rules> <cart_price_rules>10</cart_price_rules> <cart_price_rules_floor>2</cart_price_rules_floor> <customers>20</customers> </profile> </config> profiles/<profile_name>.xml
  • 19.
    Customizing Scenarios How toCreate Custom Scenarios
  • 20.
    Create from scratchReuse existing code JMeter Scenario Implementation 1. Set up JMeter to act as HTTP proxy server 2. Configure browser to use proxy 3. Record your manual actions 4. Clean up recorded requests 5. Substitute variable data 6. Parameterize scenario  Extract scenarios from benchmark.jmx  Adopt scenarios from Magento 2 performance tests Use JMeter GUI
  • 21.
  • 22.
    Parameterized Scenario • Acceptinput parameters ${__P(<param_name>, <default_value>)} • Reuse parameters of benchmark.jmx host, base_path, etc. • Run with custom parameters jmeter -n -t <scenario_name>.jmx -J<param_name>=<param_value>
  • 23.
    Summary & Tips •Fixture creation – Use Magento models – Use import/export API – Adopt fixtures from Magento 2 • Scenario creation – Use JMeter script recorder – Disable secret keys in URLs – Adopt scenarios from Magento 2 • Infrastructure – Run JMeter on a separate server JMeter Magento
  • 24.
    Thank You! Q &A @SergiiShymko sshymko@ebay.com The answer is... 42
  • 25.
    Resources • JMeter andplugins jmeter.apache.org jmeter-plugins.org • Magento Performance Toolkit for Magento 1.x github.com/magento/magento-performance-toolkit • Automated Tests for Magento 2 github.com/magento/magento2/tree/develop/dev/tests/

Editor's Notes

  • #4 Realistic sample data Realistic user activity Compatible with CE, if to exclude Target Rules
  • #15 Assume that fixture script runs after Mage::app()
  • #22 HTTP(S) Test Script Recorder