Skip to content

dimgraycat/php-split-testing

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

32 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

License Latest Stable Version Minimum PHP Version Travis

SplitTesting

A server-side A/B/n testing tool

This library provides a layer to run AB tests on your applications. The "SplitTesting" is useful when you want to change something on the application, but you want to check the optimize by using various variations.

Installation

$ composer require dimgraycat/split-testing
{
    "require": {
        "dimgraycat/split-testing": "^1.0"
    }
}

And install dependencies:

$ curl -sS https://getcomposer.org/installer | php
$ php composer.phar install

Usage

Random

<?php
use Ab\SplitTesting;

$params = array(
    'use' => 'random',
    'variation' => array(
        'foo',
        'bar',
        'baz'
    );
);

$result = SplitTesting::get($params);

// $seed is optional
// e.g.) userId, IpAddress
$seed = 1234;
echo SplitTesting::get($params, $seed);

Rate (Roulette)

<?php
use Ab\SplitTesting;

$params = array(
    'use'       => 'rate',
    'variation' => array(
        'rate'  => array(
            // 1 => 0.1%, 50 => 5%, 500 => 50%, 1000 => 100%
            'foo' => 50,
            'bar' => 20,
            'baz' => 500,
        ),
        'list'  => array(
            'default'   => array('hoge'),
            'a'         => '5%',
            'hoge'      => 1234567890,
            'moge'      => '123456789',
        ),
    ),
);
echo SplitTesting::get($params);

PatternMatch

<?php
use Ab\SplitTesting;

$params = array(
    'use'       => 'pattern',
    'variation' => array(
        'pattern'   => array(
            'foo' => '/[0-9]$/',
            'bar' => '/z$/',
        ),
        'list'      => array(
            'default'    => 'default',
            'foo'       => 'hit 1!',
            'bar'       => 'hit 2!'
        ),
    ),
);

$seed = 1234; // required
echo SplitTesting::get($params, $seed); // hit 1!