自动化测试现状与挑战
随着人们对生活品质要求的不断提升,市场上产品更新换代的频率也随之增加,这对于产品开发者来说是不小的挑战。而我们探索自动化测试的意义,就是为了帮助业务以更好的品质,更快的速度来占领市场。
相比于人工测试,自动化测试有更高的测试覆盖率,在面对 TOP300 机型与 TOP500 机型时的测试效率也更高。同时,自动化测试能配合持续集成的工具,做到快速响应的版本,达到一个版本就可以进行一次回归测试,甚至一个代码提交就可以进行一次回归测试的效果。并且自动化测试还可以把多项专项测试也融合在其中。
近年来在腾讯内部,自动化测试的需求也在持续上升。从 2019 年到 2020 年的数据来看,腾讯的头部项目自动化测试用例数量提升了 50%,自动化测试的频度提高了 200%。本文将从多个角度全面剖析,腾讯内部是如何进行自动化测试的探索与建设的。

智能自动化测试的探索
腾讯内部的产品数量多,覆盖类型广,其对于接入方式、测试场景和测试需求是有差异的。一个优秀的自动化测试平台,需要帮助业务解决以下问题:

  1. 效率:业务接入方便快捷,支持多种接入方式
  2. 可用:测试任务执行稳定:99.9%+
  3. 效果:问题分析定位方便,回归容易 那么 WeTest 作为得到腾讯众多知名产品认可的一站式测试平台,是如何搭建智能自动化测试的技术方案的? 01 全链路测试能力搭建 WeTest 自动化测试平台提供了从脚本编写到任务触发、任务执行、任务报告,最终到问题调试调试的一系列的自动化测试能力。同时,也提供从 IAAS、PAAS、SAAS 不同层次的接入方式。在 IAAS 层,WeTest 提供了包括信号屏蔽柜、恒温实验室,国内外网络专线等一系列的硬件设施;在 PAAS 层提供不同的接入方式。在 SAAS 层提供全链路的自动化测试能力。业务可以只通过 IAAS 层接入来使用这些底层的硬件和设备,也可以通过 PAAS 层来对接整个测试平台,还可以直接通过 SAAS 层来使用这些自动化测试的能力。 02 多种接入机制,满足各种系统对接 面对不同的业务接入需求,WeTest 提供不同的接入方式。例如 CI 插件,其作为 CI 自动化测试中的一个环节,可以每日定时地对版本构建进行冒烟或者回归;面对有测试平台的业务,WeTest 可以提供 REST API 的方式进行平台级的对接;针对业务侧的不同需求,WeTest 还提供在 web 页面上可以一键提交的自动化测试,以及执行一个简单命令就可以提交自动化测试的命令行工具。 03 镜像化测试框架部署 在进行自动化测试时,不同业务团队的自动化测试技术是千差万别的,其使用的脚本框架、脚本环境、终端设备的需求都是不一样的,甚至有的用户脚本可能还会有一些安全隐患的问题。 为了解决这类问题,WeTest 提供了一个镜像化的部署方案。业务团队部署测试框架时,只需要生成相应的镜像就可以使用。镜像里需要依赖的脚本或者测试框架的库,只需要通过写 DockerFile 的方式打包成镜像,然后上传到平台的镜像仓库。当用户提交自动化测试的时候,平台系统就会从用户的镜像仓库拉到用户所需要的镜像,然后在整个 K8S 的集群里面,以拉取到的形式跑起来。 使用 K8S 集群还可以自动地进行负载均衡,让任务执行的容器均匀的分布在不同的节点上,也非常方便进行扩容。 04 配置化测试调度 设备、用例、脚本都是可以配置调度的资源。例如用户需要进行用例调度时,只需要配置好需要的执行用例与用例所需要的设备执行条件,平台就会根据用户用例的历史执行时间,用例所需要的条件、用例的预估结果以及用例的执行方式,最优的分配到设备上,从而加快用例的执行速度。对于机型的调度,平台会根据一定的算法,选择出既空闲又能满足用户测试需求的设备,进而提高测试效率。 05 中心化、网络化、集群化 目前业界大部分的自动化测试平台,平台设施接入的硬件都是消费级产品的一个拼接,导致手机的可用率依赖于整个链路所有硬件的可用率。当其中一个硬件不可用时,手机就将无法使用。这样不仅会使单点故障成为整个手机的瓶颈,整体的控制链路也会非常长。面对这类问题,WeTest 提出了 “硬件数据中心化、手机控制网络化、执行机集群化” 的新方案。 06 全方位测试报告 为了使业务完成测试后能快速便捷的发现问题、定位问题并进行回归测试,WeTest 提供了全方位的测试报告。包括设备日志、性能数据、网络数据、截图数据、错误的堆栈信息、整个测试过程的回放等。针对报告中个别手机出现的问题,平台还提供远程调试功能,支持高清的画面和音频的输入输出。 07 专有云 对于某些业务保密性强、设备及时性的特殊需求,平台可以提供只有该业务独占的专有云。不但能满足保密性要求,0 等待的设备及时性,同时可以对设备进行特殊的配置与部署,满足用户特定应用预装、不卸载、登录状态常驻、自动聊天、自动审核等需求场景。

智能自动化测试
为了更好的保障用户的产品质量,给予用户更好的平台使用体验。我们一直在对自动化测试技术进行研究、探索与思考,不断的追求技术进步。
对于低代码工具与 AI 探索的领域,然后我们研发了用于脚本录制的新一代低代码自动化工具——WeAutomator。这款低代码工具包含了多种的脚本录制功能,包括最基础的通过图像、空间和坐标的综合录制,也可以提供根据图片的边缘算法来进行的智能录制。并且这款工具支持场景与代码模式,支持 Android 与 iOS。

案例分享
王者荣耀皮肤自动化测试
左侧画面是用户真实的游戏画面,右侧画面是王者荣耀为了该屏幕自动化测试提供的一个专用测试地图。其把时间改成一个逻辑的称号,同时去除了地图的噪声,将底面变成统一的蓝色,并对敌方不需要进行测试的英雄、血量、英雄名称等进行了隐藏。

在整个自动化测试的过程中,系统会进行录制,录制完成后会对每一个视频的每一帧画面通过 OCR 识别进行提取,然后将所有的图片帧都保存下来。不同迭代版本之间的图片,会通过 ORB 的特征匹配和图片的精准对比,利用图片比对库来比对,从而筛选出具有差异的图片进行标注,然后判断是否出现了 UI 异常。整个自动化测试的 bug 发现能力非常强,相当于人工能力的 5 倍。同时,因为王者荣耀组件资源较多,进行一次自动化测试相较于人工测试可以节约 160 小时。
微信客户端自动化测试案例
微信相关的端到端的 UI 自动化测试主要涉及:微信基础客户端,支付 UAT,小程序基础,搜索等业务测试。一般 UI 自动化测试需要历经四个步骤:选择 UI 驱动工具、选择用例组织工具,编写用例和用例部署。微信客户端项目组根据自身业务情况,在用例部署时,选用了 3 个时机介入自动化测试。
1. 合入检查
开发每次提交 MR 的时候会检查编译,启动问题。这个时机主要检查微信启动/发消息是否成功,用 3 条用例 + 登陆来进行测试。
2. 红版测试
在此版本上,需要保证应用基础功能是稳定可用的,允许新特性或者部分场景带 bug。在编译出包之后介入一个精选用例(大概 40 条用例)进行测试,验证基础功能是否执行成功,主要为检测出是否有一些明显影响体验的问题 。
3. P0 测试
测试通过的需求会合入到发布分支等待发布,合入后会触发编包。在编包后介入执行 P0 自动化测试(大概 400 条用例),测试可以保证在 26min 左右运行完。  

微信接入 WeTest 的自动化测试后,可把用例分发,用例结果存储,测试报告等功能交给 WeTest,自身则有更多的精力聚焦业务本身测试,WeTest 提供了高稳定性的设备、自动化设备运维监控,测试稳定性达 99.68%,测试效率提升 40%,让用户无需担忧设备问题,更加高效便捷地检验产品质量。

探索成果
1. 设备维度:设备稳定性高,在月均测试量 100w+ 台次的情况下设备成功率与测试任务执行率高达到 99.9%
2. 用例纬度:用例覆盖率高,通过用例动态分发,缩短测试时长,支持灵活的用例分发模式
3. 效率维度:资源更多,速度更快,测试提效 40%

  1. WeTest 目前已覆盖腾讯 6 大 BG


↙↙↙阅读原文可查看相关链接,并与作者交流