Skip to content

errogaht/pabtest2

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

5 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

pabtest2

Проверено на php 5.4.45

  1. Скачать архив https://github.com/errogaht/pabtest2/archive/master.zip
  2. Все изменения которые я сделал для внедрения системы в исходный код видны тут https://github.com/errogaht/pabtest2/commit/ad87e08f70b2dc66b2187a8c57554fe783f0c0f3
  3. настраиваем БД для формы регистрации в файле lib/db.php и создаём базу из reg.sql

Запуск симуляции AB теста

этот пункт не обязательный, просто если не хочется вручную форму заполнять для тестирования.

acceptance тест, заходит на страницу, заполняет форму и отправляет её, можно запустить много раз подряд

Настраиваем codeception в pabtest2/tests/acceptance.suite.yml , нужно заменить http://pabtest2.loc на ДОМЕН на котором запускается форма Только обратите внимание что тут должен быть именно домен а не домен + path, если нужно отредактировать path то он в самом сценарии теста тут pabtest2/tests/acceptance/EmulateCept.php:4

с текущими настройками тест ломится на http://pabtest2.loc/reg.php

cd pabtest2

chmod a+x runSimulation.sh

runSimulation.sh x 10

Просмотр результатов

cd pabtest2

php bin/pabtest list

php bin/pabtest result formTest

Особенности выполнения

Сначала я хотел сделать на cookies, подумал что так будет лучше? так как я могу устанавливать cookie lifetime, а при использовании сессии, session life time будет таким, какой он установлен для нужд приложения, в котором запускается тест.

Но с cookies вариант я отбросил так как их нужно устанавливать до заголовков, а в них должна быть информаци какой тест и какой вариант выбран для посетителя ,а чтобы это всё в cookies установить - нужно код инициализации теста вызывать до заголовков. А это не удобно так как код инициализации теста с настройками вариантов удобно располагать не в одном месте, а в месте непосредственного тестирования. Тем более если у нас 20 тестов то информация о тестах будет очень длинная и кука будет большая, а на неё есть ограничения в 4 кб. И тем более нужно шифровать данные в куке. А держать свою базу всех пользователей на стороне сервера это затратно может быть, если у проекта большой траффик, база быстро вырастет до больших размеров, а зачем если можно хранить данные просто в сесиии.

С сессией есть минусы конечно, например session life time установлен ниже чем хотелось бы для АБ тестов, ведь когда посетителю показали вариант A то ему нужно теперь всегда показывать вариант A.

Так как супер точного распределения траффика между вариантами не нужно, а экономия ресурсов гораздо важнее, то я сделал выбор варианта простым управляемым рандомом с помощью weights, для каждого варианта указывается его вес $formTest = new PABTest2('formTest', ['1' => 50, '2' => 50]); например если оба веса равны, 1/1 50/50 100/100 то на каждый вариант уйдёт примерно 50% траффика. Чтобы на A ушло 33% а всё остальное на B: ['1' => 1, '2' => 2]

Настройка теста

$formTest = new PABTest2('formTest', ['1' => 50, '2' => 50]);

Это мы создали тест с названием formTest и двумя вариантами:

  • 1 на который уйдёт 50% траффика
  • 2 на который уйдёт 50% траффика

При вызове в нужном месте $formTest->getVariant() выдаст либо 1 либо 2.

Конечно можно и больше вариантов, например так $formTest = new PABTest2('formTest', ['big' => 1, 'medium' => 1, 'small' => 1]);

Когда совершилось целевое действие нам нужно вызвать PABTest2::reachGoal('formTest') для регистрации конверсии по данному тесту.

Тестов может быть сколько угодно.

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages