【转转QA】ZLJ_A/B测试流程改进方案落地实践

作者 | 庄锦弟

一、A/B测试的认知

百度一查,ab测试的介绍太多了,这里就不再详细介绍了。本文主要是介绍如何对ab需求进行测试和验证。

二、历史背景

1、需求文档缺失定义

2、业务场景梳理不清晰

3、研发过程对业务流程理解不一致

4、测试过程覆盖颗粒度不全,部分场景属于盲测状态

5、缺少数据验证

三、业务测试流程改进

改进现有的测试流程,从业务场景测试,埋点测试,A/B数据验证这些流程进行梳理,流程图如下:


【改进说明】

1、需求文档(大数据产品确认之后)要明确业务场景和业务流程,A/B实验测试id、相关字段说明或者验证sql,如果不明确或者不清晰,需要找产品,需求方提供(产品、研发、测试 三方对需求理解需保持一致性)

需求评审,大数据产品一定要到场(或者安排相关人员)

埋点文档需要明确测试字段(产品/需求方提供),和哪些业务场景有埋点,如有影响A/B实验场景,必须说明场景

A/B测试范围有哪些业务场景(产品/需求方提供),有哪页面或者入口

如果大数据产品未确认的需求,又是需要做的,需求评审结果: 评审不通过

2、研发过程设计文档或者接口字段,需提供A/B实验相关的场景说明,便于测试理解

提供数据验证的sql(研发),或者验证字段说明

3、测试用例:设计A/B实验的测试场景用例,A/B测试需要通过神策系统验证数据是否正确

用例内审:A/B实验测试场景的覆盖、数据上报和数据验证

如有与埋点有相关的A/B实验,需把组合场景用例输出

神策验证测试账号(验证测试数据)

4、增加验收环节,埋点验收人:业务产品 A/B测试验收人:大数据产品 测试流程验收:QA验收

PS:测试环境验收不通过,不能上线

5、A/B实验测试需要加入到迭代版本计划中

【问题】

1.实验字段说明,哪个场景传什么内容

2.上传加密串暂时无法解密,无法确认上传数据是否正确

四、测试实施方案

1、埋点测试
A、需求文档标注检查参数和字段说明(数据敏感已过滤,需求文档要明确各个字段是什么意思,上报什么内容)


B、编写检查测试sql,根据测试时间段和触发条件

测试sql语句示例

--  xxx页,进入页面时 上报商品id"
SELECT page_id,event_xxx,goods_id AS "上报商品id" ,time
 
FROM EVENTS
 
WHERE DATE<='2020-07-17' AND page_id=10xxxx AND event_xxx='pagexxxxxx'  
 
ORDER BY TIME DESC LIMIT 10;
 
--  xxxx页,点击时,click_xxxx,上报商品名"
 
SELECT page_id,event_xxx,goods_id AS "上报商品id",goods_name AS "上报商品名",time
 
FROM EVENTS
 
WHERE DATE<='2020-07-17' AND page_id=10xxxx AND event_xxx='click'
 
ORDER BY TIME DESC LIMIT 10;

C、根据埋点文档,操作对应测试流程步骤(埋点上报有时间延迟,1分钟左右)

D、进入神策系统(测试环境需要添加本地hosts配置,参考wiki文档:测试环境和预览环境Hosts说明)

分析--》自定义查询–》查询结果

验证查询sql数据是否与测试结果一致,如果一致,则证明埋点上报正常,如果数据不对,埋点上报则有问题。注意:上报延迟时间

2、A/B实验测试


A、需求文档需要标明AB实验页面、实验id相关的字段说明,及上报节点

例如:实验--》新用户,上报数据,某页面弹窗

       实验B--》新用户,上报数据,不弹窗

       实验C--》新用户,上报数据,不弹窗

B、研发确认上报接口参数

验证接口

1、冷启动检查点,确认对应环境下是AB实验哪个组,返回接口:
HTTPS://xxxxxxg?group_id=100&XXXXXXXXXX
响应参数:dynamxxxxxx 里面包含所有已经添加实验的页面key
settings:
xxxxx_id=桶号
urlMap:获取动态参数(作为上报参数数据)
2、抓包工具返回报文有带 _md_data这部分内容,都是AB实验

C、测试步骤:

进入到首页:

打开开发者模式,切换服务器

切换桶号,重新启动

通过fiddler抓包:

ctrl+f 查找 _md_data 字段,把所有包含字段的接口都过滤出来

A/B实验返回报文验证

首页上报AB实验格式
    _md_data
        event=ab_event
        event_content
            bucket_content=[{"test_id":10xxxx,"bucket_id":31},{"test_id":10xxxx,"bucket_id":87},{"test_id":10xxxx,"bucket_id":39}]
            channel_id=1
            event_type=ab
            page_id=10xxxx
            test_name=[{"test_id":10xxxx,"group":"E"},{"test_id":10xxxx,"group":"C"},{"test_id":10xxxx,"group":"B"},{"test_id":10xxxx,"group":"A"}]
 
具体业务场景上报AB实验数据格式:
    _md_data
        event=ab_event
        event_content
            event_type=ab
            page_id=10xxxx
            test_content=[{"test_id":10xxxx,"group":"E"}]
 
 
当 _md_data 返回null,则未实验数据未上报

通过连接数据库,查看对应实验id包含的桶号:


检查神策上报数据接口,http:/xxxxxxx.sa?project=dafault


D、进入神策系统(测试环境需要添加本地hosts配置,参考wiki文档:测试环境和预览环境Hosts说明) (AB测试数据上报有时间延迟,1分钟左右,最大延迟上报2分钟)

分析--》自定义查询–》验证A/B测试数据是否正常上报

验证查询sql数据是否与测试结果一致(事件属性说明,可以参考:神策埋点属性说明),如果一致,则证明A/B测试上报正常,如果数据不对,A/B测试上报则有问题。注意:上报延迟时间

注意事项:1、关键上报事项 event= 'ab_event'
2、test_name或者test_content,必有一个字段有值,若两个字段都为空,则说明数据上报异常
3、test_name和test_content上报数据保持一致,如:test_name 上报 A实验,test_content 上报 也是A实验,如果test_name和test_content上报数据不一致,则A/B实验数据上报异常

A/B测试验证sql

select "$os","$app_version",zlj_device_id,
distinct_id, -- 登录取user_id,没登录取设备id
"$device_id", -- 没登录取版本号,登录之后取设备版本
test_name,
test_content,
group_id, -- 匹配关系的桶号字段
"$lib",channel_id,event,event_xxxxx,time,page_id,page_xxxx,
operation_xxxx, -- 操作模块
operation_xxxx, -- 操作区域
operation_xxxx --区域索引
from events
where date='2020-08-12'
-- and event= 'ab_event'
and time >='2020-08-12 00:01:11'
and zlj_device_id = '66155xxxxxxxxxxxxxxB9A' -- 抓包获取设备id x_device_id
order by zlj_device_id,time desc -- limit 20;

3、AB问题验证流程


五、AB测试注意事项

1、后端返回格式(首次接触AB的开发容易出现返回格式错误问题)
注意:实验开启情况下,后端未返回数据,检查鹰眼配置是否有误

实验开启情况下,后端有返回数据,但仍查不到数据上报,优先检查后端返回数据格式是否正确

2、上报时机

1)明确产品文档规定的上报时机(若产品文档未明确,需及时与产品沟通补充文档):

2)进入页面即上报时:

注意上报顺序,先上报enter_page事件再上报AB

3)实验组在实验页面需要满足某种条件才上报时(测试前同产品及大数据确认对应场景):

验证满足条件时后端正确上报AB(接口及神策数据体现)

验证不满足条件时后端不上报AB(接口及神策数据体现)

4)业务接口会在实验页面有多个操作下触发时:

提前与大数据验收人员确认,多时机触发是否会影响数据准确性

5)需求存在后端相关埋点时:

与大数据确认具体上报字段,如何验收,避免漏测

3、上报路径
根据产品文档,操作对应流程,检查上报

检查Android和iOS相同操作下,业务接口请求顺序及AB上报是否一致,若不一致及时与产品及大数据沟通

检查常规路径,尤其是提交订单、购买相关埋点上报:商城提交订单

埋点上报脚本

埋点上报路径(为业务主要流程,其它区域显示埋点根据实际情况有则上报,没有则不上报)

4、版本隔离
需要验证高版本正常上报AB

需要验证低版本对应场景不上报AB

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,233评论 6 495
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,357评论 3 389
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 159,831评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,313评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,417评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,470评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,482评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,265评论 0 269
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,708评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,997评论 2 328
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,176评论 1 342
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,827评论 4 337
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,503评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,150评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,391评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,034评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,063评论 2 352

推荐阅读更多精彩内容