• 0
  • 0
分享
  • 如何进行A/B测试,你学会了吗?——软件测试圈
  • 曼倩诙谐 2024-08-20 16:54:12 字数 2114 阅读 373 收藏 0

  什么是 A/B 测试?

  A/B 测试,也称为拆分测试,是一种营销实验,可以在其中拆分受众以测试广告系列的多个变体并确定哪个效果更好。换句话说,可以向一半观众展示内容/功能/行为的版本 A,而向另一半观众展示版本 B。

  为什么不使用第三方服务?

  确实将第 3 方 X 用于 A/B。

  对于 X,观察到以下问题:

  · 由于服务器端标记的高延迟

  · 特征复杂度

  · 分割部分的跟踪和影响测量。

  · 成本高

  它提供什么?

  该服务(作为微服务实现)将使客户能够进行 A/B 测试。可以对多个特征(返回值)进行任意数量的实验。

  设计时要牢记可扩展性和进一步增强功能。

  常用功能包括:

  · 能够在受限的基础上控制功能上线(特定用户)

  · 为随机 (%) 用户启用任何功能

  · 根据具有复杂逻辑的用户配置文件/特定参数评估功能

  · 能够在受限的基础上控制前端功能(UI 元素)

  · 在任何实验中添加/编辑特征

  · 使段相互排斥的能力

  · 能够找出哪个用户属于特定细分

  · 此类实验可能产生的所有其他分析

  技术栈:

  Springboot

  Java 8

  Maven

  Mysql

  Groovy

  架构设计:

1-1.png

  这是上面实体保存的内容的简短描述。所有实体都扩展 BasEntity 以获取所有实体的公共列。

  实验:所有实验都将保存在这里,并带有唯一名称和可选描述。

  Feature:一个实验可以有多个特征,这些特征将保存在这个表中,具有唯一的名称,可选的描述和 experiment_id 作为实验表的外键。 值是该功能将以 json 格式返回给客户端的内容。 Whitelisted_users 将包含 user_id 列表作为逗号分隔列表,它将告诉哪些用户分配给此功能。

  逻辑:由于每个实验都可以有一定的条件来划分用户段,所以这个条件会保存在逻辑表的条件栏中。(我们稍后会来实现)

  User_Feature_Mapping:因为我们可能希望一旦用户被分配到某个功能,它将在未来的 api 调用中保持相同的功能。换句话说,我们可能希望保持一致性而不是每次都评估逻辑(条件)。

  流程设计:

1-2.png

1-3.png

  现在将了解以上 2 个流程的含义:

  usePreCalculated标志在这里很重要,因为它意味着我们是要重用 User_Feature_Mapping 表中包含的值还是再次评估逻辑表中的条件。

  如果为假,将检查实验的每个特征的 whitelisted_list。如果退出则返回值,否则将评估逻辑然后相应地返回特征值;

  如果为真,将首先检查 user_feature_mapping 表是否存在 user_id 和 experiment_id。如果是,那么返回该值。如果没有,那么将按照上面的步骤(步骤 1)

  注意:每次评估逻辑时,都会将结果保存在user_feature_mapping表中

  如何评估条件?

  将常规代码存储在逻辑表的条件列中。以下只是一个示例:

  import groovy.lang.GroovyShell;
  public class GroovyDemo {
      public static void main(String[] args) {
          System.out.println("This represents some random code");
          String groovyScript = "println 'first line of Groovy output'\n" +
                  "println 'second line of Groovy output'";
          GroovyShell groovyShell = new GroovyShell();
          // instead of passing a String you could pass a
          // URI, a File, a Reader, etc... See GroovyShell javadocs
          groovyShell.evaluate(groovyScript);
          System.out.println("This represents some more random code");
      }
  }

  选择 groovy shell 是因为它具有绝对的灵活性。可以执行复杂的功能,甚至可以使用存储为文本的代码调用外部方法和 api。当用例很复杂时,这很有用,例如想根据某些只能由第三方 api 实现的用户属性或参数来分配用户段。

  例如,如果想将A/B分成90:10,可以对user_id进行模10运算,并将结果0分配给B段,剩下的分配给A段。可以多次更改比例甚至逻辑无需重新部署。


作者:学研妹    

来源:http://www.51testing.com/html/11/n-7796011.html

  • 【留下美好印记】
    赞赏支持
登录 后发表评论
+ 关注

热门文章

    最新讲堂

      • 推荐阅读
      • 换一换
          •   1.什么是测试用例?  测试用列(Test Case)是为了实施测试而向被测试的系统提供的一组集合,这组集合包含:测试环境、操作步骤、测试数据、预期结果等要素。  2.测试用例的要素  测试用例的标题、测试思路、预设条件、步骤、预期输出  一个好的测试用例是一个不熟悉业务的人也能依据用例来很快的进行测试。  评价测试用例的标准:  ·用例表达清楚,无二义性  ·用例可操作性强  ·永猎的输入与输出明确,一条用例只有一个预期结果  ·用例的可维护性好  ·用例对需求的覆盖率高  ·暴露程序bug的能力强  3.测试用例的好处  ·它是测试执行者的依据  ·它使得工作可重复,自动化测试的基础 ...
            12 12 2074
            分享
          •   1、测试中,为什么是32个错误帧出现一次Busoff?  Busoff的产生是因为TEC(Transmit Error Counter)>255导致,再次提醒:与REC(Receive  Error Counter)无关。也就是说,如果节点状态切换到Busoff,是因为节点自身外发报文错误导致TEC>255。  回顾一下节点状态机,节点状态机如下所示:  在切入主题之前,对Error Passive状态做一个展开,节点由Error Active进入Error Passive,是因为REC>127 or TEC>127。所以,节点进入Error Passive状态的可以分两个层面看...
            0 0 2492
            分享
          •   性能测试框架搭建+接口测试+渗透测试+测试开发+测试面试指南,点击下方链接填写测试行业调查问卷,任选两个带回家。链接:http://vote.51testing.com/  Jenkins作为目前持续集成中使用较为广泛的工具,在实际生产过程中通过结合众多的插件,从而实现工程的持续构建、持续部署。  而传统构建的应用场景大多数运行在虚拟机或者独立的服务器上,在资源开销和管理维护较为复杂。相比于独立的服务器/虚拟机而言,容器不仅部署方便,且占用资源较少。  Docker作为目前作为业内最火的一个容器解决方案之一,通过将两者结合,从而实现服务的轻量化,并通过Docker管理Jenkins的资源。...
            1 1 1932
            分享
          • 测试用例和缺陷报告模板对于测试工程师,必备技能之一便是测试用例的编写和软件缺陷报告的编写啦~下面提供一些模板还有项目实战样例供大家参考参考,1.通过Excel表格编写测试用例2. 缺陷报告模板下面来个实战案例3.在线课程作业管理系统项目测试用例(部分)4.缺陷报告实例这是我写的缺陷报告模板,可以参考下,可以把bug截图放进缺陷报告里,更直观的知道bug原因所在。(由于一些内容不是很方便共享,我做了马赛克处理,敬请原谅。仅供各位参考一下缺陷报告的模板可以采用这样的形式)测试用例是面试中经常被问及的,我实习面试面了四家,都被问到了!可见其重要性。作者:lucky多多原文链接:https://blo...
            14 14 3868
            分享
          • 随着技术和数字化的快速发展,企业努力确保其应用程序在所有浏览器和平台上流畅运行。在今天的情况下,企业依靠互联网存在来提高他们的投资回报率并扩大他们的在线影响力。这就是为什么大多数 Web 应用程序都设计为与多个浏览器兼容的原因。这对于任何响应式 Web 应用程序都非常重要,因为必须确保应用程序在任何给定时间与每个浏览器和浏览器版本兼容。尽管如此,跨浏览器测试还是被忽视了,因为开发人员在将跨浏览器测试纳入QA工作流程时面临许多挑战。随着时间的推移,客户的注意力持续时间越来越短,如果网站加载看起来有问题,他们会毫不犹豫地按下浏览器上的后退按钮。那么,有什么解决办法让Web应用程序和网站在每个浏览器...
            0 0 966
            分享
      • 51testing软件测试圈微信