ABToast is a simple A/B Testing app that is developed in django. This app implements the Django Session functionality to achieve the goal.
ABToast requires Django to run.
Install ABToast from pip
$ pip install django-abtoast
OR, Get ABToast locally
$ git clone https://github.com/htadg/ABToast.git ABToast
$ cd ABToast/
$ python setup.py install
Add ABToast to INSTALLED_APPS
INSTALLED_APPS = (
# Django Default Apps
'django.contrib.admin',
'...',
# ABToast
'ABToast',
)
Add ABToast.middleware.ABMiddleware to the project middlewares
MIDDLEWARE_CLASSES = (
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.common.CommonMiddleware',
'...',
# Custom Middleware
'ABToast.middleware.ABMiddleware',
)
Migrate the database and create admin account
$ python manage.py makemigrations
$ python manage.py migrate
$ python manage.py createsuperuser
Now Create your own new Tests in the Database
Note: You can also create New Experiment and Tests from the Django Admin Panel
from datetime import datetime
from dateutil.relativedelta import relativedelta
from ABToast.models import Experiment, Test
# Starting the Experiment from today
start_date = datetime.now()
# End Date for the Experiment
# Experiment runs for two months
end_date = start_date + relativedelta(months=+2)
# Initial Traffic Redirect for the first variant
initial_traffic = 50 # 50%
# Create an Experiment
exp = Experiment.objects.create(name="Homepage Test", template_name="registrations/signup.html", goal="registrations/success", start=start_date, end=end_date, cancelled=False)
# Create two variations of the homepage.
# Currently User can only create two Test instances for a particular Experiment
# which means currently user can run A/B Testing on only two variants of a Page
# One Test for the original template
Test.objects.create(template_name="registrations/signup.html", experiment=exp)
# Other Test for the New Variant
Test.objects.create(template_name="registrations/new_signup.html", experiment=exp)
Now You can run A/B Test on a view
def home(request, template_name="registrations/signup.html"):
try:
template_name = request.ab.run(template_name)
except TemplateDoesNotExist:
pass
return render_to_response(template_name)
Want to contribute? Great!
Do the necessary changes that you feel and send a pull request.
- Multivariate Testing
- Add Graphical Information
- Add Bayesian Formula for the Conversion Rates
MIT
Free Software, Hell Yeah!