python django ab测试框架

consumeraffairs-django-experiments的Python项目详细描述


django实验图片::https://codeship.com/projects/1c7cb7a0-caa8-0130-f2cb-36bd8b1bab14/status?branch=master
:target:https://codeship.com/projects/4846


django实验是django的ab测试框架。

你不知道什么是a b测试,请访问"wikipedia"http://en.wikipedia.org/wiki/a/b\u testing>;`.



this fork
——


请参阅"1.3.0"以后的更改日志。




fork from:https://github.com/mixcloud/django experiments


installation
——


:consumerraffairs django实验

这应该下载django实验和任何依赖项。如果从回购协议下载,
pip仍然是安装依赖项的推荐方式:






dependencies
----`django<;https://github.com/django/django/>;`\br/>-`redis<;http://redis.io/>;`\br/>-`django jsonfield<;https://github.com/dmkoch/django jsonfield/>;`
-`django modeldict<;https://github.com/disks/django modeldict>;`
-`django import export<;https://github.com/django import export/django import export>;`

(setup.py中的详细列表)


它还要求在已安装的应用程序中使用"django.contrib.humanize"。

usage
----


示例项目是一个很好的开始和播放的地方。
结果存储在redis中并显示在django管理员中。此框架的关键组件是:实验、备选方案和目标。





有关下载和文档,请参见"redis.io<;http://redis.io/>;``。


这是将设置文件配置到最低限度的快速指南。
首先,添加redis服务器的相关设置(我们将其作为本地主机运行):




实验设备=本地主机
实验设备=6379
实验设备=0

下一步,通过将应用程序添加到已安装的应用程序中来激活它们:




"django.contrib.humanize"如上文所述,如果还没有包括在内。
在"实验"下面包括"导入/导出"。


在url.py文件中包括app urlconf:

url(r"实验/",include('experiments.url'),

我们还没有配置我们的目标,我们将在一段时间内完成。请确保
您已正确配置静态URL设置。

"实验.中间件.confirmHumanMiddleware",
"实验.中间件.实验保留中间件",
]


*注意,下面详细介绍了更多配置选项。*



注意:"confirmHumanMiddleware"是可选的,不需要您计划只运行基于模板的测试。
如果使用,它应该在这些类之后:


"django.contrib.auth.middleware.authenticationmiddleware"、
"django.contrib.auth.middleware.sessionauthenticationmiddleware",




jinja2:

模板=[
{
'后端':'django_jinja.backend.jinja2',
'选项':{
'扩展名':[

'实验.模板标记.实验.实验张力',
],

}、
}、
]




实验和替代品
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~


可以在Django管理员中手动创建实验。添加备选方案目前必须在模板标记中完成,或者调用相关代码,如下所述。

django实验的设计目的是在django模板内工作
,使设计者更容易。我们从加载模块开始(除非使用jinja2):

::


{%load experiments%}

,然后定义第一个实验和备选方案,使用
以下语法:

::

{%experiment experiment alternative%}


我们将运行一个名为"register"的实验,以查看
注册链接文本会导致更多用户完成注册过程。我们的第一个备选方案必须始终是"控制"备选方案。
如果实验被禁用,这是我们的备用方案。

::

{%experiment register_text control%}
<;a href="register.html">;立即注册。<;/a>;
{%endexperiment%}

因此,当实验被禁用时,用户将看到一个register链接,上面写着"立即注册"。让我们定义另一个更礼貌的替代方案:



{%experiment register_text polite%}
<;a href="register.html">;请注册!<;/a>;
{%endexperiment%}


实验启用时,用户将被随机分配到每个
选项。此信息存储在注册中,是用户的唯一
组合,实验以及它们被分配到的替代项。


确保实验标记可以访问请求对象(对于常规模板不是
问题,但您可能必须手动将其添加到包含标记中),否则它将无提示地无法工作。

也可以使用实验注册分配标记(请注意,它使用与旧实验标记不同的字符串或变量):




{%experiment注册"experiment""alternative1""alternative2"作为已分配的"alternative%}
{%=="alternative1"或assigned_alternative=="alternative2"%}
<;a href="register.html">;请注册!<;/a>;
{%else%}
<;a href="register.html">;立即注册。<;/a>;
{%endif%}


您还可以将用户注册到实验中,并从python中找出他们是什么替代方案的一部分。在实验中注册用户并根据备选方案显示不同的结果:utils import participant


:=获取礼貌的文本()
elif alternative=='控制':
文本到显示=获取正常的文本()

如果您希望了解用户是哪种实验替代品的一部分,但如果他们还不是成员,则可以使用获取替代品。如果用户未注册,则返回'control'。对于注册了实验但被分配到
对照组的用户,也返回"control"
-无法区分这些情况。

::

active=参与者(请求)。get_alternative('register_text')
如果alternative='礼貌':
header_text=get_polite_text_summary()
elif alternative='控制':
header_text=get_normal_text_summary()

您还可以使用以下技巧:




alternative=participant(request).enroll('example_test',{'control':99,"v2":1})

::

{%experiment example\u test control 99%}v2{%endexperiment%}
{%experiment example\u test v2 1%}v2{%endexperiment%}

默认情况下,参与者函数需要一个httprequest对象,但您可以将用户或会话作为关键字传递参数

::


参与者(用户=当前用户)。获取替代('register_text')
参与者(会话=会话)。获取替代('register_text')



\*\*如果实验是在模板中而不是在管理员中定义的,则默认情况下将动态创建这些实验。这可以在
设置中重写。*

使用django管理或通过
模板标记或代码创建实验后,您必须在django
管理员中启用该实验,或手动启用该实验。





goals
~~


goals允许我们在用户访问某个页面时进行确认。您可以在设置中的"实验"目标元组中指定它们。考虑到上面的
示例,我们希望在用户完成注册过程后触发目标。




目标是唯一标识目标的简单字符串。

这不是射门的唯一方法。总共有四种记录目标的方法:

1。**django模板标记**(如上所述)。

::

{%实验目标"注册"%}


2。**服务器端**,使用Django视图中的某个python函数:

::


**javascript onclick**:

::

<;button onclick="experiments.goal('registration')">;完成注册<;button>;

您需要将http头与ajax请求一起发送。django实验
提供了一个钩子,在发出ajax请求之前将调用这个钩子。要使用它,
创建一个名为"expericssrftoken"的函数,并让它返回令牌的值
。例如:




function experimentscsrftoken(){
返回experiments.getcookie('');
}

**cookies**:

::

<;span data experiments goal="registration">;完成注册<;/span>;

可以通过cookie使用空格作为分隔符来记录多个目标。


目标独立于实验,因为许多实验都可以有相同的目标。这些目标在您的项目的settings.py文件中定义。


分别)。要使用它们,请安装保留中间件。访问定义为在
会话时间(默认为6)内没有页面视图。

visit\u present\u count\u goal does not trigger直到用户注册后的下一次访问,并且在大多数情况下应使用
。注册
后第一次访问时,visit_not_present_count_goal触发器,应用于注册
时用户不在场的情况(例如发送电子邮件时)。所有实验都会跟踪这两个目标,因此在解释结果时请小心
只使用一个目标。


通过将

::

{%load experiments%}

{%experiments_confirm_human%}

包含在代码中的某个位置(我们建议您将其放在base.html
文件中),未注册的用户将被确认为human。这可以在设置中被快速覆盖,但要小心-机器人程序会把结果搞砸!

如果要自定义"确认人工代码",可以更改"确认人工会话"键设置,并自行管理设置值。
请注意,当参与者的"确认"和"设置"被确认时,您需要调用参与者的"确认人工"。会话[确认人会话密钥]
等于true。

基本上是残疾的。所有用户都将看到
控制选项,并且不会收集任何数据。

**enabled**-对所有用户全局启用实验。



settings
--




如果不存在,则切换框架是否应验证用户是否为人类。小心。
实验验证人类=错误

设置


--


1.4.4
~~~~~
-条件的错误修复版本

>1.4.3
~~~~
-通过js将目标报告到testicssroken js hook


>1.4.1
~~~~~~~~~~~
-多站点管理仪表板上的状态切换


>1.4.0
~~~~~~~~~~~~~~~~~~
-多站点管理仪表板


<1.3.7
~~~~~~~~~~~~~~




<1.4.1.1
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-错误修复对于python2

1.3.4
~~~~~
-与自动创建实验相关的错误修复

>1.3.3
~~~~
-实验条件
-从管理员创建实验的能力(尽管没有代码atm)
-删除了south迁移
-新模板选项卡{%实验注册的"替代方案%"

>1.3.2
~~~~~
-添加确认的"人类中间件"

>1.3.1
~~~~
-添加Jinja2扩展的单元测试
-更新用户注册标记以仅注册指定的替代方案(加上控件)

>1.3.0(撤销)
~~~~~~~~~~~~~~~~~~~~~~~~~~
-分叉到consumerraffairs
-添加了jinja2支持
-从tox中删除了一些较旧的python版本
-删除了对jquery的依赖,放弃对IE8的支持

pre-1.3.0(未发布)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-符合"setup.py"中的常见预期:
-单独的"install\u requires"和"tests\u required"(不读取"requirements.txt")
-添加trove分类器,包括python和django支持的版本
-修复许可证名称(从"mit license,请参阅许可证文件"到"mit")
-使"setup.py"为python 3做好准备(使用codecs模块读取"readme.rst")
-删除了与古python错误无关的解决方法
-添加"setup.cfg"以支持t构建通用控制盘(为python 3做准备)
-tox运行"python setup.py test"(同时遵守"install-requires"和"tests-requires")
-prepared"tox.ini"以实现python 3和django 1.11的兼容性

1.2.0
~@kobold)
-使requirements.txt更加灵活
-为在多个django版本上进行测试添加了tox支持(再次感谢@kobold!)

1.1.6
~django 1.9(感谢david12341235)


1.1.4
~app

1.1.1
~Nexus-请注意,这可能有一些向后不兼容,具体取决于媒体文件的包含方式
-通过管理将实验升级到特定的替代方案(而不是控制)
-新的实验注册分配标记(见下文)


1.0.0
~~~


版本为1.0.0,因为django实验肯定已经准备好了
,但也由于合并到中的向后不兼容更改。

-django 1.7和1.8支持(包括自定义用户模型)
-修复了与保留目标有关的许多错误-在此更新之前他们不值得信赖。有关详细信息,请参阅下面的"保留"部分。
-根据请求修复由参与者缓存引起的错误
-修复与确认人为相关的错误并使功能可插入
-向参与者添加了"强制选择"选项。注册(重要说明:强制选择非随机方式将产生潜在的无效结果)
-删除Gargoyle集成和对不再需要它们的方法的额外"请求"参数,如已注册(向后不兼容的更改)
-实验中间软件更改为实验保留中间件(向后不兼容的更改)
-添加了更多的测试和日志记录

>0.3.5
~~~~

-为south添加迁移脚本
-在概率接近100%时修复呈现
-在用户多次执行操作时减少数据库负载

>0.3.4
~~~

-更新了js目标发布方法。需要csrf javascript。
-模板标记目标图像上的随机数,以防止缓存



>0.3.3
~br/>

-再次由nexus处理的静态媒体

>0.3.2
~br/>

-修复丢失的编辑/删除图像

>0.3.1
~模板标记。再次支持django 1.3!

0.3.0
~~~~

-添加了django权限支持。
-开始使用django static而不是nexus:media。(仅限Django 1.4)



欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java两个构造函数?   java for(inti:x)做什么?   java如何将一个bean的构造函数参数传递给嵌套bean   java从易趣链接提取项目ID   java多线程BufferedReader   安卓全新应用程序在R.java中抛出“语法错误,插入“}”以完成类体”   java Spring启动依赖注入请求范围的bean   java给定的时间,然后约定和异常处理。和莫基托和朱尼特在一起   与Android Studio的java Oracle数据库连接   在web服务器(Heroku)上承载可运行jar文件(Discord bot)的java   java如何每隔n秒在imageview中更改图像   java不理解“volatile”关键字   java使用JPA编写自定义SQL查询   java如何使用filechannel作为参数来编写对象