使用optimizely做A/B测试
摘要:
optimizaly是一个提供A/B测试服务的网站,可以可视化地在线编辑测试内容和目标,简单方便。
1. A/B测试简介
所谓 A/B 测试,简单来说,就是为同一个目标制定两个方案(比如两个页面),让一部分用户使用 A 方案,另一部分用户使用 B 方案,记录下用户的使用情况,看哪个方案更符合设计目标。参考:
http://oldj.net/article/ab-testing-basic-concept
http://www.zhihu.com/question/20045543
http://en.wikipedia.org/wiki/A/B_testing
https://www.optimizely.com/ab-testing
2. optimizaly是什么
optimizaly是一个提供A/B测试SaaS服务的互联网公司,网址是https://www.optimizely.com。是家美国公司,2010年创立,获得$1.2M,2013.04获得A轮$28M,2014.05获得B轮$57M。参考:
https://www.optimizely.com/about
http://en.wikipedia.org/wiki/Optimizely
http://www.zhihu.com/question/23756936
3. optimizaly的使用简述
(1)测试发布
测试发布流程:登陆optimizaly的网站 —>输入要测试的URL —>在optimizaly上编辑对照版本的页面 —>在optimizaly设定测试目标 —>在页面源码上加入一小段js,该js由optimizaly生成 —>启动测试
所有测试发布操作都是可视化的。可以在线编辑页面各元素的内容、坐标、样式,也可以插入或删除元素。新增图片时,可以上传到optimizaly的cdn上,也可以提供已存在图片的URL。
提供了多种测试目标的设定:
a)点击事件,在一个预览页面上,可视化地进行点击页面配置
b)pageView,提供精确、简单、子串、正则表达式四种URL匹配方法
c)自定义事件,要通过optimizaly提供的api进行设定
操作细节详见:https://www.optimizely.com/gettingstarted
测试发布的关键在于optimizaly生成的js代码,所有与测试相关的在线编辑,都会相应地体现在该js代码里,最终也是通过此js控制页面显示与数据统计。

注意:该js需要加入到html的head中。该js保存在optimizaly的cdn服务器上,每个测试有一个固定的js的url,但每次修改测试内容或目标,都会生成一个新的js,但url不变。
实际的页面大改版,不适合在线编辑页面,会有实际的页面文件存在于我们自己的服务器,可以通过重定向的方式,对新旧版本页面做A/B测试,详见:https://help.optimizely.com/hc/en-us/articles/200040675-Redirect-experiments-Comparing-two-separate-pages
(2)页面浏览与统计
页面浏览流程:输入网址并回车 —>下载页面元素,并要下载optimizaly的js —>optimizaly的js通过hash计算出展示给用户的页面版本,并通过js控制展示,发送一个uv记录到optimizaly服务器—>用户操作... —>如果触发预设的事件,则通过ajax发送相应记录到optimizaly服务器
用户浏览测试页面,会额外产生两类流量:
a)下载optimizaly的js代码:因为js是在head中,所以打开页面时必然要先加载此js,且会影响到用户打开页面的速度。js文件大小是46KB,位于美国的服务器上,我的网络的打开速度在200-500ms之间。可以考虑把此js放到自己的国内服务器上,但要保证每次修改测试时,都要及时更新js文件。
b)触发统计事件,发送消息给optimizaly服务器:接受操作日志的服务器也在美国,我的网络延迟在300ms以上,低概率出现发送失败或时间超长的情况,但因为是异步发送操作日志,对用户是没有影响的。如果发送失败,则丢失统计数据

(3)统计结果查看
optimizaly有专门的测试结果页面,使用比较简单,结果也直观。有几个指标,说明如下:
• visitor over time:统计周期的uv数
• conversion over time:如果用户对页面进行操作,此处数值就加1;多次操作也算1
• conversion rate:conversion/visitor的计算结果
• improvement:会挑选一个版本叫做baseline,此数值表示与baseline的转换率差值
• chance to beat baseline: 若用当前版本替换baseline,战胜它的概率
4. optimizaly的一些技术细节
(1) 如何辨别UV
关键在于cookie,会存储用户id,测试id,浏览版本记录,用户设备信息,最近10次历史操作,时间戳等信息。详见:
https://help.optimizely.com/hc/en-us/articles/200040335-How-Optimizely-Works-Snippet-order-of-operations-JavaScript-evaluation-timing-and-cookies
optimizaly生成的js中,根据用户cookies,通过一个hash算法,计算出当前用户展示的页面样式,或者跳转页面,一个用户总会看到相同版本的页面,算法的细节没能找到资料。如果删除了cookie,即便是同一台电脑同一个浏览器,再次访问时,又会当做一个新的uv。
(2) optimizaly的架构
有三个组件:
a) Google App Engine,用于存储用户账户、测试配置信息
b) Amazon Elastic Compute Cloud and Simple Storage Service,用于接收、存储、计算统计数据
c) Akamai ,用于存储生成的js文件

optimizaly的官方网站没有披露更多技术细节
5. optimizaly的坑
(1)费用
它提供的A/B测试是收费的,按照被测网站的uv收费,类似运营商套餐,按月计费,不同套餐提供不同的月uv上限,超出部分费用另算。详见:https://www.optimizely.com/pricing
(2)统计精度
可能出现统计不准的情况,可能的原因有
a)统计事件发送失败:统计服务器在美国,低概率发送失败,文档前面有描述
b)统计结果非实时:一次用户操作后,一般5分钟以后才能在统计结果里查到,并且各指标是分开统计的,例如可能用户的uv数已经+1了,但该用户的点击操作还没有+1
c)可能optimizaly本身就不准
(3)optimizaly网站最好翻XX墙
测试配置、统计结果等页面经常打不开,最好带梯子。
使用optimizely做A/B测试的更多相关文章
- nodejs做的一个测试端口程序
最近在学习nodejs的http,然后做了一个测试域名有没有使用那些端口,原意是用来做一个本地的静态服务器,然后运行前先测试端口,首先要用到的是net模块,主要用到的是Socket,判断其连接状态即可 ...
- Apache JMeter 做接口并发测试
获知来源:查找如何使用Postman进行接口并发测试时,在StackOverflow上看到,说postman只能做串行测试,而且postman并不是被设计做这种测试的:而jmeter就是为了测试而开发 ...
- nginx整合tomcat集群并做session共享----测试案例
最近出于好奇心,研究了一下tomcat集群配置,并整合nginx,实现负载均衡,session共享,写篇记录,防止遗忘.---------菜鸡的自我修炼. 说明:博主采用一个web项目同时部署到两台t ...
- ab命令做压测测试
1. 背景:互联网发达的今天,大大小小的网站如雨后春笋,不断出现,但是想要做出一个网站很简单,但是想要做好一个网站,非常非常难,首先:网站做好之后的功能怎么样这都是次要的,主要的是你的网站能承受怎么样 ...
- 【转】Jmeter做web压力测试时设置持续时间注意点
头一回使用jmeter做web的压力测试,遇到个很莫名其妙的问题,不管我的线程组怎么设置,它就是执行一次就结束了. 设置循环次数为300,不使用调度器--〉执行一次就结束了,循环次数未生效 设置循环次 ...
- 初始化一台linux server来做项目管理和测试
毕业以后很多没做过这么技术的事情了,不过今年要开始咯. Goal: 练手安装Nginx,并且配置不同的server,后端有Tomcat的(JIRA),有PHP(总得有的),还有Tornado和Node ...
- 用nc做网络压力测试
测试结果: 1.数据的收发正常,没有出现丢包: 2.平均数据接发速率为:112MB/S,基本用完的千兆带宽. 测试方法: 1.通过FTP拷贝3.6G ...
- 使用gtest自动化测试并给出性能测试结果(windows 版本,版本平台也可以使用,但并没有做完整的测试)
/************************************************************* *使用gtest自动化测试 * ********************* ...
- CentOS上使用sysstat做系统监控测试
先安装sysstat yum -y install systat 然后,再改一下任务计划 [root@localhost sa]# cat /etc/cron.d/sysstat # Run syst ...
随机推荐
- PHP的优点
1.语法简单 2.学习成本低 3.开发效率高 4.跨平台 5.开发部署方便 6.开源框架非常丰富(如:ThinkPHP) 7.开源CMS系统非常丰富(如:Joomla,Wordpress) 8.开源网 ...
- hdu 5595 GTW likes math(暴力枚举查询)
思路:直接暴力枚举区间[l,r]的整数值,然后max和min就可以了. AC代码: #pragma comment(linker, "/STACK:1024000000,1024000000 ...
- jquery第三期:js与jquery对象转换
我们开始进入jquery的学习了,jquery的学习就不那么中规中矩了,我们来看一个和javascript有所区别的地方. <!DOCTYPE html PUBLIC "-//W3C/ ...
- 初探swift语言的学习笔记七(swift 的关健词)
每一种语言都有相应的关键词,每个关键词都有他独特的作用,来看看swfit中的关键词: 关键词: 用来声明的: “ class, deinit, enum, extension, func, impor ...
- 第九十六题(编写strcpy 函数)
96.08 年中兴校园招聘笔试题 1.编写strcpy 函数 已知strcpy 函数的原型是 char *strcpy(char *strDest, const char *strSrc); 当中st ...
- .NET程序性能优化基本要领
想了解更多关于新的编译器的信息,可以访问 .NET Compiler Platform ("Roslyn") 基本要领 在对.NET 进行性能调优以及开发具有良好响应性的应 ...
- think in python 11 字典
字典 字典类似于列表,但更加通用 键值对 ,字典是 键与值之间的映射,每个键都映射到一个值上 dict可以创建一个不包含任何项的字典 eng2sp = dict() print eng2sp 还可以给 ...
- sql 添加字段备注和查看已添加表的备注
虽然avl树和红黑树在数据搜索和排序方面都是有效的数据结构,但是都显得特别麻烦,跳跃表就显得特别简单,虽然简单 不影响他性能,在平均情况下,其插入.删除.查找数据时间复杂度都是O(log(N)),其最 ...
- JQuery EasyUI combobox动态添加option
<input class="easyui-combobox" id="rwlb" name="rwlb" style="wi ...
- Weex 开发入门
去年也听说过 React Native 技术,现在好像很多大公司都在这套技术中踩坑,在开发自己的UI.工作中涉及不到,一直没有学习相关的知识. 并且听说阿里的 vue native,一直很期待.前段时 ...