移动广告SDK测试思路

什么是移动广告SDK

移动广告SDK是嵌入到宿主APP中的一个jar或aar包,其提供了一系列API供开发者调用。这些API可以进行广告请求、广告打点等行为,可以对广告进行渲染。开发者只需要关注自身App的开发,广告逻辑全部交给广告SDK实现。广告SDK和应用之间关系是什么呢?以公司内部广告SDK为例,如下图所示,应用APP通过调用广告SDK接口,进行广告的展示等操作。

广告SDK测试对象有哪些?

广告SDK是为第三方开发者提供的软件开发工具包,包括接入文档、SDK接口、以及Sample等。因此测试的主要内容有:

01

接入文档

SDK面向的是开发者,正确引导开发者接入SDK是必要的。

02

SDK接口

SDK的核心内容,也是主要测试对象。

03

SDK日志

对开发者来说,SDK接口里面的具体实现是透明的,当上层调用时遇到问题,只能依赖SDK打印的日志来定位分析。所以SDK日志是否完备,是否有助于解决问题,对应用开发者、测试人员和SDK提供方来说都很重要。

04

Sample

Sample是SDK提供方用来示例如何调用接口实现具体的功能,也可以作为开发者直观感受SDK接入效果。

广告SDK接口测试类型有哪些?

广告SDK根据需求和开发平台不同,可能需要选择不同的测试类型对SDK接口进行测试,常用的测试类型有:

  1. 功能测试

需保证SDK接口功能正确性和完备性,包括场景覆盖和接口参数覆盖等。主要测试在不同场景下功能逻辑是否按照预期实现,返回开发者是否有回调且顺序是否正确。

  1. 兼容性测试

确保SDK兼容特定的设备平台,并与其他软件兼容,没有内存泄漏和闪退崩溃现象。

兼容测试的工作量通常是比较大的,可根据产品需求和市场现状对需要适配的设备机型做分析,覆盖的机型、系统版本、分辨率等进行优先覆盖排序。

  1. 网络相关测试

在不同网络环境和类型下,SDK接口都能较好的处理。在涉及到下载和视频广告时,弱网通常通过Fiddler/Charles工具模拟;网络切换、sim卡欠费等情况也是关注重点。

  1. 安全性测试

随着国家对隐私数据保护,访问权限的控制,用户服务鉴权等越来越严格,安全测试也是重要部分,例如移除imsi和android ID等字段,增加下载类广告隐私信息协议等。SDK接口的安全性也如此,发版前需提交到安全部门进行安全审核。

  1. 稳定性测试

确保场景在一定压力下,持续运行一定时间,有无异常。广告SDK在信息流场景中,保证广告展示和点击时设备资源有无异常,正在通过Maxim进行测试。

  1. 性能测试

保证SDK接口满足特定的性能需求,比如资源占用、移动设备耗电量等。在广告SDK开屏广告请求时长过长时会导致应用启动慢或者卡顿,所以测试时需要考虑这个场景性能。

SDK功能测试

上述诸多测试类型中,功能测试先行。在进行广告SDK测试前,需要全面的了解测试对象的细节:

  1. 了解业务流程,结合API接口文档和开发指南,理顺接口的使用场景和调用关系;

  2. 了解SDK协议,理解协议中字段的意义;

  3. 了解各接口或协议返回码,分析对应的场景;

  4. 了解开发实现细节,可以绘制成图,便于测试分析和分层验证;

对广告SDK进行测试,可以采用的分层测试方式由上至下依次有:基于Demo ->基于SDK接口调用 ->基于代码

1.基于Demo

广告SDK提测时,通过Demo模拟开发者接入,并覆盖对应的接口和业务场景。测试同学根据Demo界面上广告类型很容易mock出自己想要的测试广告,这种方案优点是上手快且较常用;缺点是对业务场景类型覆盖有限,发现问题时需首先判断是否是Demo问题,为满足上述需要,需投入较大精力开发维护Demo。此方案适用于手工或者UI层自动化测试。

2. 基于Demo的UI打点自动化测试

根据广告SDK的特性,有大量重复工作在于打点数据校验,并且SDK与服务端交互的协议稳定。同时有多个SDK业务,从自身业务出发,形成SDK自动化测试解决方案,结构图如下:

基于以上方案,大大节省了打点数据校验工作的人力和时间。

3. 基于SDK接口调用

随着第三方SDK迭代频繁,面临着回归工作量大,不同媒体的定制需求,根据以上问题探索出SDK接口自动化测试方法。

①. 首先将待测SDK集成到demo中,其内置一个HttpServer

②. demo启动时反射扫描待测SDK的类

③. 发送HTTP请求到demo的server中,server反射调用SDK对应的接口

④. 然后通过自动化方式测试在各种参数组合覆盖下接口的返回值做断言以判断健壮性。以下是结构图:

基于接口调用自动化测试,在测试效率和人力的收益很大。

4. 基于代码

业务压力增加导致已没有充足的人力对每次的大小提测都进行全量回归;其次应对不同的接入媒体而分为好多渠道包,各个渠道包间的代码相似度很大,如果选择性测试,就需要测试人员对测试代码进行准确性的把握。基于上述原因,我们在业务中边摸索边实践边丰富,便有了精准测试平台。平台分为以下几个端:

**①. server端:**核心功能是实时计算以及数据整理

**②. plugin端:**核心功能是原始数据收集以及非实时计算,主要用于流水线中

**③. cli-server端:**核心功能是原始数据采集,主要用于java开发的aspring服务

**④. cli-android端:**核心功能是原始数据采集,主要用于java开发的android应用

方案图如下:

业务中应用50+个版本中,在用例反推和提高开发质量等方面有重要价值。

本文主要介绍了广告SDK测试的一些思路,希望能给大家提供一些参考。如果您有关于SDK的其他测试方法,欢迎留言交流。