背景简单交代一下,业务是广告平台,广告主要展现在C端,C端每接入一个广告位需要QA介入测试,主要针对广告展现、广告的pv/click的数据上报。
由于历史原因,C端并不统一采用sdk方式接入。
由于C端以及广告平台均是公司业务,cpc广告才刚刚开始接入,公司并未重视各接入方的收入情况,以及各种内部广告及宣传的融合。
各种原因吧,导致上报数据不准确。这个风险性是显而易见的。(但总有人对风险视而不见)
临时抱佛脚的修复,随着广告位越来越多,积攒的问题也会越来越多。
有必要分析一番
- 关于上报数据问题:该是C端QA来保证质量还是广告QA来保证?
理论上广告QA只需要保证请求展现、pv/click上报接口以及后续报表的正确,反作弊系统正常运作。可是由于业务的历史原因,这个责任落到了广告QA身上。(其实就是各方PK失败😢)
- 所以广告QA该做什么呢?辅助自己或C端QA做上报校验,避免让自己陷入手工重复劳动的漩涡里。
再来分析一番
- 什么样的需求会用到自动化工具呢?
(1)新增广告位
(2)C端优化
(3)广告侧广告引擎优化=》影响展现
(4)广告侧上报服务优化
我们来讨论一下(1)(2)(4),(3)可以通过广告QA接口测试来保证质量,不做赘述。 - 如何做全自动/半自动化工具?
- 我们是怎么手工测试的呢?
以Android为例,一般通过抓包过滤上报请求,校验上报字段是否正确,再确定广告侧落库成功,报表展示正确。(一般上报请求数据丢入redis,广告侧从redis中取数据做分析落库等等。) - 哪里可以做辅助测试?
(1)如果仅C端有更改,广告侧无更改,那么可以【抓包=》校验】,无需关注后续的落库和数据展示。
(2)如果仅广告侧有改动,C端无改动,那么可以在redis中构造不同广告类型等上报数据,验证后端逻辑。
(3)全有改动,需要做全流程测试,通过UI自动化,加后端逻辑校验,走全流程回归。 - 效率提升?
保守估计,之前一个广告位要测试要4小时,现在1小时内搞定。主要是纯手工眼睛会累瞎。
今天主要说一下第(1)种方案,第(2)种很简单,第(3)种非常复杂,性价比不高。
辅助打点测试方案:
经过以上分析,针对C端有改动,广告侧无改动情况,方案图如下通过配置文件来配置需要校验的数据,抓包,过滤上报请求,校验上报字段正确性,做的好看一点可以输出报告。
还有有几个小点想提一下:
- 我进了一个页面,一下子有10几条上报数据,怎么check?
首先你要明确要测试广告位的上报条数,是上报一条还是多条,每条上报是否是一样的?只需要将自己需要校验的数据过滤出来并check就可以了 - 期望结果有多个,实际结果只要match上一个就算通过
- 有一些点我们未必可以check的很全,比如广告id,如果每次都有变化,最好用正则去match
选型
没做什么特别的对比分析,没什么权威性,不过可以说用起来还不错。
原来想用一个基于nodejs的开源库,后来还是选择了mitmproxy,基于python的,选择自己熟悉的没错。
整个程序可以说就是在分析数据,校验数据,输出校验结果,没别的了。整个工程不超过500行代码。
由于没什么代码没什么通用性,就不分享代码了,大家可以动手做起来,代码虽不通用,但想法是可以借鉴的。
附一下我的代码结构config/:存放期望结果配置
core/:核心代码(每次执行后,再去生成html报告即可)
report/:本次测试结果,缓存在这里
static/:html模板,用于生成html报告