machine - magentoinfo2.magento.com/rs/magentoenterprise/images/magentolive uk 2… · magento...

Post on 08-Aug-2020

5 Views

Category:

Documents

0 Downloads

Preview:

Click to see full reader

TRANSCRIPT

machine learning Magento

&

About me

Dhruv Boruah

Co Founder, Reckless.io

Agenda

Agenda

• Your KPIs

• Session Goal

• Interesting Magento Data

• Magento Case

• Tools/How?

• Demo

• Q&A

Your KPIs

• Are you asking the right questions?

• How much do you know about your

customers?

• AOV/LTV/GPM

• Sales/Returns/Shipping

• Churn Rate

• Abandonment Rate

• …

External Factors • Weather/ Forex/

Holiday/Newsletters

• Census (birth/death/age)

• …

Machine Learning

A branch of artificial intelligence,

concerns the construction

and study of systems that

can learn from data.

Source: http://en.wikipedia.org/wiki/Machine_learning

Session Goal

How to predict

customer behavior

using machine learning?

Interesting Magento Data

1. log_visitor_online (visitor_id, type, ip, customer_id, last_url )

2. log_visitor (visitor_id, session_id, first & last visit, last_url, store)

3. Viewed product (visitor_id, customer_id, product_id, store)

4. Aggregated viewed products(view_num, price, name, store)

5. Quote tables

Magento Case

Case

“Retailer A” trades in:

Clothing/ Toys/Shoes/Home etc.

Goal:

• Predict “checkout intent” of online customers

• Deliver personalize promotion to prevent cart abandonment

Tools

How?

How?

Listens for events

Does delta sync

Processes responses

Magento

Extension

Scalable

Infrastructure

Slave Database

NoSQL

Google/Amazon

How?

YES

/NO

• Slave Database

• Flatten Magento Tables

• NoSql database

Data Warehouse

• Transaction History

• Merchandising

• Operational

• Marketing

Modeling • Preparation

• Training

• Predict

Predict

Training Model

Successful

Checkouts

Created date/time

Remote IP

Base subtotal

Items

Customer is guest

Category

Location

Training

Model

Unsuccessful

Checkouts

Demo

Sisyphus Inspiration

Tests should be independent from each other

Full test suite should run as quickly as I want

Maintaining tests should be easy and cheap

Tests should be stable, robust and [here your next lovely buzzword]

… and it would be really better if we wouldn’t require them at all!

“A dream you dream alone is only a dream.

A dream you dream together is reality.”

John Lennon

Reality

Extremely Extensible

Core

Continuously Changing Business

Modular Platform

Multi - Language

- Theme

- Website

- Tenant

Dreams

$superF = new SuperFramework();

$superF->Ineed(‘result’);

$superF->toGo(‘start’);

$superF->andClick(‘whatever’);

$superF->andDo(‘something’);

$superF->andClick(‘done’);

$superF->andGet(‘success’);

Top Layer

• BDD

• Code Generators

Mid Layer

• Framework

Low Layer

• PHPUnit

• Selenium

More DECLARATIVE

More IMPERATIVE

?

MTF Components

System Under Test Direct Access

Handlers

Fixtures (and Repositories)

Selenium Driver

Page Objects (Pages, Blocks, Elements)

Test Cases (Pre-conditions, Scenario, Constraints)

Tools and Utils

Low Layer

Test Cases

/**

* Run create product test

*

*/

public function testCreate(CatalogProductSimple $product, CatalogCategory $category)

{

$this->productGridPage->open();

$this->productGridPage->getProductBlock()->addProduct($product->getTypeId());

$productBlockForm = $this->newProductPage->getForm();

$productBlockForm->fillProduct($product, $category);

$this->newProductPage->getFormAction()->save();

}

Page Objects namespace Magento\Mtf\Test\Page\Area;

use Mtf\Page\Page;

class TestPage extends Page

{

const MCA = 'testPage';

protected $_blocks = [

‘rootBlock' => [

'name' => ‘rootBlock',

'class' => 'Magento\Mtf\Test\Block\RootBlock',

'locator' => 'body',

'strategy' => 'tag name'

]

];

public function getRootBlock()

{

return $this->getBlockInstance(‘rootBlock');

}

}

<page mca="testPage">

<block>

<name>testBlock</name>

<class>Magento\Mtf\Test\Block\TestBlock</class>

<locator>body</locator>

<strategy>tag-selector</strategy>

</block>

</page>

Constraints namespace Magento\Mtf\Test\Constraint;

use Mtf\Constraint\AbstractConstraint;

use Magento\Mtf\Test\Page\Area\TestPage;

use Magento\Mtf\Test\Fixture\Test;

class PageOpenSuccess extends AbstractConstraint

{

protected $severeness = 'low';

public function processAssert(TestPage $page, Test $fixture)

{

//

}

public function toString()

{

//

}

}

<constraint>

<pageOpenSuccess module="Magento_Mtf">

<severeness>low</severeness>

</pageOpenSuccess>

</constraint>

Fixtures namespace Magento\Mtf\Test\Fixture;

use Mtf\Fixture\InjectableFixture;

class Test extends InjectableFixture

{

protected $fieldName = [

'attribute_code' => 'code',

'frontend_input' => 'input_type',

'frontend_label' => 'Label'

];

public function getFieldName()

{

return $this->getData('fieldName');

}

}

<fixture>

<fixtureName module="Magento_Mtf">

<fields>

<fieldName>

<attribute_code>code</attribute_code>

<frontend_input>input_type</frontend_input>

<frontend_label>Laber</frontend_label>

</fieldName>

</fields>

</fixtureName>

</fixture>

Repositories namespace Magento\Mtf\Test\Repository;

use Mtf\Repository\AbstractRepository;

class TestRepository extends AbstractRepository

{

public function __construct()

{

$this->_data[‘identifier_value_1'] = [...];

$this->_data['didentifier_value_2'] = [...];

}

}

<fixture>

<fixtureName module="Magento_Mtf">

<type>blank|flat|eav</type>

<entity_type>entity_type_code</entity_type>

<collection>Resource Collection</collection>

<identifier>Unique Field/Attribute Name</identifier>

<fields>

<…>

</fields>

</fixtureName>

</fixture>

Low Layer

Mid Layer

Application Sates Iterator

Feature #17

Test Cases Iterator

Configuration Profile #1

Configuration Profile #2

Configuration Profile #3

Configuration Profile #4

Configuration Profile #n

Dataset #1

Dataset #2

Dataset #3

Dataset #4

Dataset #n

Test Case Scenario

Constraints

Low Layer

Mid Layer

Top Layer

Low Layer

Mid Layer

Top Layer

good things

Parallel Execution

Test Isolation Levels

Test Runners and Iterators

Event Manager

Logging and Reporting

Sample Database Management Tool

“I dream my painting and I paint my dream.”

Vincent van Gogh

VS

Magento Testing Framework The testing framework that does speak Magentish

Q&A Q&A Q&A

Magento Testing Framework Guidelines

Developer's Guide / Testing

magento/mtf magento/magento2

Magento

Performance

Toolkit

William Harvey

Principal Product Manager

Magento

Performance Toolkit

Magento Performance Testing – Control Variables

Test Protocol

Load Generator

Merchant Traffic Profile

Reference Store

Magento Platform

Environment

Reference System Architecture

Load Generator

• Hardware

• Developer’s Performance System

• Software

• Apache jMeter 2.11 r1554548

• JMeterPlugins-Standard, JMeterPlugins-Extra

Merchant Traffic Profile / Reference Store

Profile Websites Categories Simple Products Configurable Products

Small 1 30 800 50

Medium 1 300 16,000 1,000

Large 3 1,000 40,000 25,000

XL 5 3,000 800,000 50,000

Magento Platform

• Magento Version

• EE 1.13.1.0

• Patches Applied

• PHP 5.4 Compatibility Patch

• Scalability Patch (SUPEE-3818)

Environment (Hardware) – Desktop Example

• Developer’s Performance System

• CPU = 3.5 GHz, Quad-Core i7 (i4770k)

• RAM = 32 GB

• HDD = Sata III, Intel 530 Series 180GB SSD

Environment (Hardware) – Virtual Server Example

• Cloud Application Server

• CPU = 2x vCPU, 2.3 GHz (Xeon E5-2530)

• RAM = 7 GB

• Cloud Database Server

• CPU = 4x vCPU, 2.3GHz (Xeon E5-2530)

• RAM = 7 GB

Reference System Architecture – Examples

Environment (Software)

• MySQL 5.4.38

• PHP 5.4.30

• Redis 2.6.17

Environment (Software) – Example variables

• noatime, nodiratime

• no write barriers (barriers=0)

• swappiness = 10

• max file descriptors = 65535

Test Protocol – Example

1. Prepare environment

a. Provision servers and load system software

b. Install Magento and apply patches

2. Execute generate.php to populate the store

3. Run performance.jmx once to prime the cache

4. Run performance.jmx again and report results

Lessons Learned

What have we learned?

• Magento + PHP 5.3

Can see a major performance improvement with…

• Magento + Nginx + PHP-FPM

Is comparable to…

• Magento + PHP 5.4 + Opcache

What have we learned?

• Use redis as a cache backend for Magento

• Native support in CE 1.8, EE 1.12 & later

http://info.magento.com/rs/magentocommerce/images/MagentoECG-

UsingRedisasaCacheBackendinMagento.pdf

What have we learned?

• Importing is getting slower…

• Shopper experience is getting faster…

What have we learned?

• Magento 1.14 is faster than 1.13...

• Magento 1.14 is slower than 1.13…

What have we learned?

• Some extensions break caching…

• Magento EE FPC

• Nginx

• Varnish

What is coming?

What is coming?

• Performance Test Toolkit (1.12, 1.13, 1.14, 2.x)

• PHP Scripts (generate.php, indexer.php)

• jMeter Test Scripts (performance.jmx)

• Whitepaper: Magento Performance Test Guidelines

Q&A

Magento

Performance

Toolkit

top related