首页
学习
活动
专区
工具
TVP
发布

移动端自动化测试解决方案

背景介绍

我们的测试对象为广告SDK,主要功能为嵌入到各个流量平台中,提供广告数据请求、完成广告渲染、广告曝光及过程数据上报等功能。随着项目版本的快速迭代,广告SDK测试工作出现以下几个特点:

²与流量平台的耦合度高,版本迭代过快:SDK需要嵌入到各种不同流量平台中实现自身功能,它依赖于应用的代码逻辑,无法完全独立的执行对SDK的测试。而且目前各种流量平台版本迭代很快,回归测试的压力很大。

²请求及上报数据繁杂:广告的请求上报数据比较多,且逻辑复杂,手工测试极为困难,而且难免疏漏。

²测试场景构造困难:SDK请求到的广告数据依赖于后台引擎的选单逻辑,具体广告数据和上报要求SDK无法控制。

为节省成本,保证高效率及高质量迭代,我们需采用更有效的测试方法,App自动化测试是比较合适的解决方案。

之前自动测试实践过程中遇到过诸多问题(代码复用率低,Case开发及数据构造繁琐,问题定位困难,学习成本高等),为解决相关痛点问题,我们重新设计并实现了一套APP自动测试框架。本文将着重介绍技术选型、设计思路及视频APP上广告业务的自动化具体实践。

技术选型

自动化代替手工测试主要有三个难点需要解决:

²自动化交互控制:用于广告场景触发、模拟用户广告交互及广告曝光监测

²广告数据校验:用于广告请求数据及上报检查

²mock广告服务器:用于构造稳定可预期的广告订单

自动化交互控制方案

目前主流的自动化工具对比:

同时,它还具有以下优点:由于广告SDK应用场景的复杂性,我们要尽量选取一种适用于多种平台的测试工具,Appium是一个开源、跨平台的测试框架,支持IOS、Android及FirefoxOS平台,可以较大限度的增加自动化测试框架的可扩展性

²Appium使用WebDriver的json wire协议,支持Selenium WebDriver支持的所有语言。

²Appium的开发者目前仍然在维护其版本升级,可以根据系统版本的升级进行同步升级。

Mock广告服务器

稳定的测试环境需要完全屏蔽后台引擎选单的不确定性对测试带来的影响,使mock广告服务器根据前端用例的需求出单。

广告服务器需要提供以下功能:

²验证广告请求的有效性

²根据测试用例选单

²根据测试用例对上报的数据进行校验

测试框架选型

一个项目中自动化测试是否能有效的展开,自动化测试框架是关键所在。因此,如何如何构建稳定的、易扩展的自动化的测试项目对于敏捷测试有重要的意义。在设计框架的时候应该尽可能的沿用自动化测试工具已提供的功能,避免重复开发,以减少开发成本。目前比较主流的单元测试框架为Junit和testng,这两者的主要功能非常类似。

TestNG与JUnit的相同点:

²使用annotation,且大部分annotation相同。

²都可以进行单元测试(Unit test)。

²都支持时间测试,忽略测试和异常测试,且实现方法几乎相同。

但实际上,在实际使用中,TestNG比JUnit 4灵活性的体现:

²JUnit 4中须把@BeforeClass方法声明为public static。而TestNG中无此限制。

²JUnit 4测试的依赖性非常强,测试用例间有严格的先后顺序。前一个测试不成功,后续所有的依赖测试都会失败。TestNG将失败用例跳过,而不是标记为失败。

²TestNG的参数化测试,把所需要的参数加到TestNG的xml配置文件中。这参数与测试代码分离。

²TestNG的结果除了Green/Red bar,还有Console窗口和test-output文件夹,对测试结果的描述更加详细,方便定位错误。

由于TestNG在参数化测试、依赖测试以及测试输出等方面功能更加强大。意味着其可以执行高级的测试和复杂的集成测试。所以,我们采用TestNG测试框架控制整个测试流程。

自动化测试整体架构

该框架基于appium开源技术开发,使用Maven工具进行Project管理,采用TestNG工具组织测试,应用xml和json文件存储测试数据,实现测试数据与测试用例的分离,方便测试数据管理,降低自动化脚本的维护成本,实现数据驱动。此外,该框架还封装了丰富的appium方法关键字,降低自动化代码的冗余与重复。借助Jenkins进行CI测试,实现测试任务的Schedule和Report功能,通过Jenkins Master/Slave模式管理虚拟机节点,实现多任务多机器分布式并发的执行管理,从而提高测试效率。

该框架的好处在于:1、构建可复用的、稳定的代码集。通过封装appium实现用例执行与数据调用分离,参数化配置常用信息,并提供统一接口;2、模块化管理自动化测试用例。主要根据TestNG工具的支持参数测试和依赖测试的特点实现;3、测试结果分析和统计。利用jenkins工具建立持续集成,定期运行自动化测试项目,并将测试结果以定制化报告的形式展现。

框架具体实现为:TestNG通过appium对被测APP进行UI操作,并检测验证UI展示结果。移动app将广告请求和上报数据发送给mocksvr服务器,并根据mocksvr服务器返回的广告数据进行广告渲染。同时,appium向APP发送交互指令,进行广告交互,触发广告数据上报。

最终app将广告展示的结果数据上报给mocksvr,mocksvr对协议进行基本检查之后,将业务数据推送协议管理器,由协议管理器对业务数据进行详细分析校验。

如下图所示,整个自动化测试的框架如下:

手工测试的各个功能点验证已在图中标出:

流量平台广告场景/广告打点场景构造

SDK广告请求触发及校验

引擎数据返回

广告渲染曝光监测

广告交互控制

广告上报校验

整个服务器框架分为三层:

²数据层:负责管理用例和协议相关数据,如用例的订单数据,校验数据;相关协议的数据格式,数据值的基本要求。更新订单和协议的时候只需要更新数据文件即可。

²接口层:主要包含三个部分,adserver服务器,协议校验模块,业务逻辑控制模块。adserver服务器封装http协议服务功能;协议校验模块根据底层的数据文件对上报的协议数据进行检查,为上层用例层提供协议状态,通用的校验接口和定制校验接口等服务;业务控制逻辑模块封装各种业务逻辑,如不同类型广告场景构造,缓存清除等和业务相关性比较大的功能,同时提供多种重载接口,提供灵活的业务服务。

²用例管理层:专注与用例的管理,通过调用下层的接口,按照人工测试过程书写用例。

测试控服务器

控制整个测试流程并输出测试报告。

²初始化,初始化被测对象、启动mocksvr、加载数据文件等

²用例执行,控制测试流程,检查UI交互、数据校验结果

²现场请求,测试用例整理,输出结果

业务逻辑的封装

由于广告的业务特点,在测试过程中会大量复用各种不同广告形式的请求及曝光逻辑,在这里,我们将这些请求逻辑统一封装为对外的接口。供各个测试用例调用,这样做主要有两方面的好处:

1.大大简化了测试用例的增量过程,也方便其他测试人员接入;

2.当流量平台UI产生变动,或者更换硬件设备时,只需要修改公共接口相关逻辑即可,不涉及用例的改动;

Mocksvr

模拟广告后台引擎,根据测试用例数据执行选单逻辑,输出广告数据,并对广告相关的请求和上报数据进行校验

主要功能如下:

²根据测试用例中对应测试点选择订单并返回

²通用的协议数据校验,http协议格式,包头字段等

²将不同的广告数据分发给不同的协议管理器进行校验

当mocksvr服务器接收到广告请求,通过调用控制服务器接口,获取到当前用例状态,并从用例数据文件中获取测试内容,根据数据文件内容进行订单的筛选,并将广告订单数据返回给流量平台。

对于流量平台上报的广告数据,mock只对其进行应用层的协议检查,并将具体的业务数据发送给广告协议,这样做的目的是,使mocksvr和具体的业务内容和用例数据解耦,提高其复用性。

广告协议管理器

对广告相关的请求和上报数据进行保存和验证。

²维护不同的协议数据配置文件,协议改变时,只需要修改配置文件

²保存上报数据,设置上报标识

²根据协议文件进行协议基础检查

²提供与实际用例相关的精准校验的接口

协议管理器将不同类型的广告上报分为不同的协议管理类,每个类对某一种广告协议进行管理和保存,对外提供协议状态(是否收到该条协议)、基本的协议数据检验、特殊字段校验的接口。

协议管理器将每条协议的基本检查包装为一个接口,检查内容包括协议包含的字段,字段值长度,是否为空,data密串等基本检查。

对于和用例相关的数据检查,协议管理器也对外提供检查接口,测试用例只需要传入检查内容,协议管理器即可将检查结果返回给测试用例。

目前协议管理器提供的检查均为被动检查,需要用例函数主动调用,这样做的目的也是为了使协议检查和具体用例解耦。尽量将更多业务相关的内容放到具体用例中去。

目前支持,http请求参数和json来两种协议格式的检查。

日志管理模块

日志管理,输出测试过程数据,辅助bug定位和用例调试

²提供日志打印接口给测试进程各个模块使用

²测试日志分级管理:debug,trace,run,error

²测试日志文件管理:按照当前系统时间生成测试日志文件

总结

目前自动化已经完成45个测试用例,共包含168个验证点,自动化用例占总用例数目24%,代码覆盖率为56.6%。开发提测后,会自动从RDM上拉取最新包进行自动化测试。自动化测试很大程度上提高了测试效率,相同数量验证点耗时从原来人工10小时缩短到1.5小时,且不需要人工干预,基本不占用测试人力。对于上报字段校验功能,自动化更加准确快速,从一定程度上极大的解放了人力,提高了测试效率。

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180110G0S3ZF00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券