应用中不同的场景、设计方案,不经过测试,你永远不知道消费者会更偏好哪一种。面对随时可能变更的产品需求,开发人员如何才能在保证测试进程的同时,让工作也变得高效、省力?

本章内容,网易严选Android资深开发张云龙为您解读《Android ABTest 的框架设计》

概述

什么是Android ABTest ?

AB测试是为web或app制作两个(A/B)或多个(A/B/n)版本,在同一时间维度,分别让组成成分相同或相似的访客群组随机访问这些版本,收集各群组的用户体验数据和业务数据,最后分析评估出最好版本正式采用。

在网易严选中,张云龙团队涉及的业务内容基本分为两类:

1、纯业务逻辑的测试。如:分享给微信好友、分享微信小程序、分享网页。

但由于我们无法预判不同的业务场景对用户拉新的助力效果如何,所以这种情况下,会进行AB测试。

2、UI变化。下图表现的就是一个UI的改变,“立即购买”和“加入购物车”的位置发生变化,当然属性也有变化,背景颜色也有替换。

1.png

本章内容将围绕四部分展开:

A/B/n设计与实现

ViewID实现与优化

UI属性动态修改

UI重排版与替换

A/B/n设计与实现

2.png

以上是一段常见的业务逻辑测试方案代码,从这个方案中可以发现存在以下问题:

业务上层开发的同学需要关心协议数据内容;

if/else方案出现重复代码,当产品上线后,测试版本发生变化时,会出现一个协议多处代码随时变化的情况,解决起来费时费力;

另外也容易出现历史老版本两端表现不一致问题。

因此,做A/B/n的设计与实现时,要注意以下方面:设计协议对接层规避 if/else

A/B/n 实例管理

后台数据同步

多种生效策略

下图是我写的ABTest的实例,这是协议对接层的代码,通过注解的方式,指定itemID。

3.png

在ABTest的更新逻辑中,涉及了立即更新、热启动更新、冷启动更新。

当数据处于立即更新策略时,会自动调用基类接口 onUpdateConfig,协议对接层的同学只需要通过这个接口就可以实现需求,并可以通过注解来指定不同caseld下的初始化方法。通过指定 defaultInit 注解,后台的AB协议即使撤销,业务层的执行逻辑也能明确。

这种通过协议对接层隔离业务上层和协议数据的做法,能保证在协议数据发生变化的时候,业务上层代码并不需要改动,避免了业务上层逻辑的频繁多处修改,以提高效率。

4.png

ViewID实现与优化

ViewID的实现有两点原则:

唯一性,是指同一界面中,各个控件的ID是唯一的、不同的

一致性,是指多次进入同一个界面,控件 ID 是相同的、不变的。

初步有以下方案:

1、View.getId()。该方案可以排除,因为大部分控件的 ID 是不会指定的,布局文件中指定了多次编译也会发生变化;

2、XPath,根据场景树计算。大部分可视化埋点方案或无埋点方案都是用这种方法去做的,mixpanel、百分点、网易乐得和网易 HubbleData 使用的就是这种方案。

XPath优点和缺点都非常明显:

优点是XPath对于业务层开发是完全无侵入的,无论是用xml生成布局还是通过动态生成,都可以计算XPath值;

XPath缺点是在多版本开发过程中,如果布局发生变化,同一个控件的XPath值就会发生变化,无法保证跨版本的 ViewID 一致性,会对后台的数据分析产生麻烦。

3、得到 Android 提出的 TouchTarget 方案,针对 XPath 的缺点做了改进:在用户点击时,可以根据当前的 Activity 名字加上控件所在布局的资源名、ID资源名,拼凑起来得到它的 ViewID。

但这种方案会对业务开发产生入侵。

考虑到 ABTest 的场景中,很可能不需要跨多版本收集数据分析,我们采用 XPath 的方案。

UI属性动态修改

如何动态地修改线上UI属性?

总结下来有以下几点:

利用 ViewID 定位控件;

修订数据协议,修改控件,修改属性;

把握作用时机。要保证在客户看到页面之前就修改完成;

可视化方式,生成数据和效果检查

自定义控件和属性。SDK 可以预置大部分常见属性;而自定义属性,可以让业务层开发制定,包含两方面:属性的设置、可视化编辑器增加编辑项。

5.png

6.png

UI 重排版与替换

7.jpg

可以从上图看到,A和B之间的修改并不只是属性修改,布局也在发生变化。这其中涉及了两点:

定位控件,原布局阻断,新布局算法应用;

重布局后需要属性设置继续生效,所以ViewID不能变化。

类似上述这种场景,假设有三个子控件,重新布局该如何做?

实现其实非常简单,我们只需要在中间加入StubCSSLayout(SDK 内置布局控件),插进去就可以起到承上启下的作用(承上:阻隔原布局算法,启下:应用新布局算法)。

8.png

想要 ViewID 在重布局前后不变,只需在计算 XPath 的过程中,将 StubCSSLayout 忽略掉,就能保证这一点。

在实际操作中,也可能遇到特殊需求,这就要求创建新的布局。

ndroid 开发中,常用的 setContentView(@LayoutRes int layoutResID) 方式创建布局有如下几点关键步骤:

根据ID得到文件路径,进行布局;

根据路径,获取long类型的xmlBlock;

构建Java类XmlBlock;

清楚了原生流程,通过利用 XmlBlock(byte[] data) 构造函数,构建 XmlBlock 对象来实现布局下发和创建的功能。

android怎么做ab测试工具,开发必读:网易专家解读Android ABTest 框架设计相关推荐

  1. [原创]Android Monkey 在线日志分析工具开发

    [原创]Android Monkey 在线日志分析工具开发 在移动App测试过程中,Monkey测试是我们发现潜在问题的一种非常有效手段,但是Android原生的Monkey有其天然的不足,数据不能有 ...

  2. Apache ab 测试工具使用(一)

    简述: 试用apache ab测试工具 下载点 http://httpd.apache.org/download.cgi 参考: http://jingyan.baidu.com/article/e3 ...

  3. Centos ab测试工具

    安装AB测试工具 yum -y install httpd-tools测试命令 模拟并发请求100次,总共请求10000次 命令模板: ab -c 100 -n 10000 待测试网站(建议完整路径) ...

  4. Apache ab测试工具使用方法(无参、get传参、post传参)

    Ab测试工具是apache自带的测试工具,具有简单易上手的特性,下面我总结一下我的使用方法,首先去官方下载apache程序包,我下的最新版本apache2.4.23,下载地址Download - Th ...

  5. mac apache自带 ab 测试工具安装及使用

    欢迎大家访问我的博客 blog.ayla1688.cool 使用mac 的小伙伴, 一直在使用自带的apache , 但是apache 自带ab测试工具无法使用. 网上的结果都不可信,没有人提到不要使 ...

  6. 基于Java实现的Web服务器与测试工具开发

    资源下载地址:https://download.csdn.net/download/sheziqiong/85706486 资源下载地址:https://download.csdn.net/downl ...

  7. ab测试工具使用详情

    一.ab工具介绍 ab是apache bench命令的缩写.ab是Apache超文本传输协议(HTTP)的性能测试工具.它不仅可以对apache服务器进行网站访问压力测试,也可以对或其它类型的服务器进 ...

  8. 华清远见专家解读Android开发者的前景

    小编有话说: 日前,华清远见专家就Android开发者的成长之路进行分析,专家表示Android是一个比较庞大的体系,从底层的Linux内核到上层的应用层,各部分的内容跨度也比较大.因此,一个好的学习 ...

  9. socket 测试工具_Soloπ:支付宝开源的Android专项测试工具

    1.前言 近年来,随着移动互联网的蓬勃发展,移动测试技术也取得了长足的进步,从早期基于测试脚本的单机自动化,到录制回放.图像识别.云测平台等测试技术贴合实际业务需求深度应用和创新,测试效率从而一次又一 ...

最新文章

  1. 美工自我培养的几点经验总结
  2. 数学建模题目及论文_数学与运用数学专业论文题目帮助
  3. ubuntu创建wifi热点plasma-nm
  4. Java8中的外观(JavaFX8)
  5. MongoDB 教程索引 (附有视频)
  6. #窗体整人小程序_Excel VBA和文件夹-1.8通过对话框灵活选定文件的小技巧
  7. ApacheCN 安卓译文集(二)20211226 更新
  8. android升级adt和sdk之后无法识别SDK Location的一个解决方式
  9. Spring Boot中@Autowired可以省略的情况
  10. 进制转换 [2008年北京大学图形实验室计算机研究生机试真题]
  11. Windows7下通过VHD安装Windows8系统
  12. html javascript 表格id,javascript 获取表格中元素id的实现代码
  13. 从知网或PDF复制英文单词间隔过大问题
  14. 学生考勤系统设计mysql_学生考勤系统的设计与实现(Eclipse,MySQL)
  15. QT 使用全局钩子监听鼠标事件和键盘事件
  16. 基于TI DRV8424驱动步进电机实现调速和行程控制
  17. recyclerView多条目加载,点击动画事件
  18. 中年妇女,偶很想念你
  19. Jsoup和JsoupXpath详解
  20. 什么是无线cpe与AP?如何区分二者的功能?

热门文章

  1. 《金融学》笔记 第十一章 货币政策
  2. iMeta | 兰大张东等使用PhyloSuite进行分子系统发育及系统发育树的统计分析
  3. 【校招】面试_华为_通用软件工程师_二面
  4. 选择斯诺克球杆的基本要素
  5. 夏普SH6310C使用小结
  6. html5播放器android,分享一个Html5+video 基于mui 5+的视频播放器
  7. Knowledge-Driven Distractor Generation for Cloze-Style Multiple Choice Questions翻译
  8. 局域网聊天软件 简单实现原理(附:代码)
  9. 前端页面嵌入二维码,微信扫出现“请点击右上角,选择“在浏览器中打开“的解决方法
  10. 阿里巴巴藏经阁,快来学习起来