【支付宝生态质量验收与检测技术】

news2024/11/30 6:55:23

如何验收和检测海量的支付宝生态小程序的质量,是一个很重要的课题。本次分享会简单介绍如何通过平台化的方式在小程序入驻环节进行准入验收,以及使用前端自动化测试技术和智能化算法对小程序质量进行检测。希望能对小程序质量的验收和测试提供参考。
讲师介绍


马亚明 测试开发专家
主要负责支付宝行业生态小程序的质量保障工作。主要研究领域:前端自动化测试、云真机质量检测技术、小程序验收平台建设、行业生态质量保障平台架构设计等。2020 年加入蚂蚁金服,深耕行业生态质量领域,从事质量平台架构设计、研发工作。

背景

支付宝生态质量所负责的范围比较大,像政务、出行、医疗等等,各个行业的各种小程序以及它的细分行业有非常多。我们打开支付宝各种各样的小程序,其实都是我们生态质量要负责的范围,大家常用的健康码、场所码、地铁出行甚至点餐的那些麦当劳、肯德基餐厅相关服务等等。那么,面对这些生态质量小程序,我们质量要做的主要就是质量风险拦截和质量风险止损。质量风险拦截,也就是怎么发现问题,我会跟大家主要分享的是验收与检测两块技术。

一、生态质量验收

(一)什么是验收?

首先我跟大家介绍一下支付宝生态的质量验收,什么是验收?验收的概念和测试很接近,但是也稍有点区别。从上面这个流程可以看出来,我们的小程序由开发者开发完成,他们自己做完测试之后,需要交付到支付宝,那在这个之后我们的验收的环节就是对开发者开发的交付物根据交付的标准来进行质量的审核确认这样一个过程,当然验收这个环节在真正做的时候并不是一个人或者比较简单的一个点,它会比较复杂。

举个例子,比如健康码,这样一个小程序开发完成之后,要入驻到支付宝,那首先需要提交一些验收相关的物料,比如操作的一些视频图片给到支付宝。然后我们会有一系列的环节进行验收,比如说要首先进行功能上的验收,然后进行 UI 层面上的一些验收,最后可能产品还要再做验收。

而对于另一种,比如一些扫码点餐,那种餐饮类的小程序,要进到支付宝的话,就是另外一条不同的审核的流程。比如说因为扫码点餐会涉及一些支付,可能需要提交点赞的一些数据,那我们会校验这个数据的合法性,然后进一步看这次交易是否正确,最后还要从业务层面去看这个业务是不是符合我们的标准。

(二)支付宝生态质量验收现状

所以不同的业务、场景,不同的行业的小程序,验收的流程是完全不相同的。所以,我们支付宝生态质量验收面临的主要问题有:

第一是数量多。我们每周都有万级别的项目需要去验收,因此这么多的项目完全靠人去验,这显然是不现实的,所以我们必须要引入自动化验收的能力,来提升验收效率;

第二是业务多。上面其实只讲了两个例子,实际上我们形形色色的业务流程可能达到上百种上千种,那我们不可能针对每一种业务的验收流程去做定制化,所以我们必须抽象出一种通用的验收的框架能够支持各种业务的验收流程。

因此综合来说,我们生态质量的验收主要是要开发一种能够支持人工验收和自动化验收相结合的,能够动态适配不同验收流程的这样的一种验收的框架。

(三)验收框架

我们的验收框架主要分为 4 个步骤:定义验收标准、编写验收用例、编排验收方案、发起验收项目。

1.定义验收标准

首先第一步定义验收标准,因为标准是整个验收的一个起点,那我们会针对具体的验收对象,由业务、产品甚至质量同学一起去定验收的标准。

举个例子,比如某一个地铁出行相关的小程序,如果要进入到支付宝,我们要进行验收,那我们可能会先根据它的特性定一些标准。比如说:没有白屏、空白页的问题,没有页面报错,加载耗时要符合要求,没有功能异常,以及页面样式、业务类目信息正不正确等等。

所以我们会由产品和质量同学,共同去为交付的验收对象定制一系列的标准,以标准为起点来发现后面的验收的流程。

2.编写验收用例

那么有了标准之后,接下来就要到我们的执行层面,就是怎么去验收。因为真正的可执行的我们就称之为验收的用例,是把我们定的那些标准把它真正变成可执行的这样一个转换。

那标准和我们的验收用例其实并不是完全就是一对一的,比如说我们刚才这么多的标准,我们可能在真正做验收的时候,会把它拆成几个这种不同的验收用例。

比如说我们把白屏、空白页面报错这种标准我们可以用真机自动化的方式去做,我们会有一个真机自动化这种测试的用例;比如说功能异常这种,我们可能会有一个人工验收这种功能延伸的一种用例。所以它可能是一对多或者多对一这样一个关系,大部分情况我们的用户用例会由我们的质量同学去负责编写。

因为我们支付宝所验收项目很多,所以必须要用自动化的手段去集成验收效率,因此我们的验收用例同样的也会分为人工和自动化这两种主要的形式。

那这个验收用例的概念其实和我们的测试用例会比较像,但是又有区别,会更加的复杂。比如说我们的自动化验收常用的一些自动化的测试手段,如接口测试、功能测试等等。

那在验收这个层面上来讲,因为我们验收流程的业务种类非常多,所以我们的验收的自动化要更为灵活去支撑我们的业务,所以我们又加入代码组件这个概念来实现我们的自动化验收。

代码组件大致的形式就是一个代码的脚本,在这个脚本里面,我们可以做各种各样的逻辑,比如我们做一个接口测试,我们做一次数据库的查询,或者说我们会查一些离线数据日志等等,来实现我们的自动化的这样一个验收的逻辑。

当然我们自动化之后我们还会有一些不同的一些结果的判断,比如正则、比较、判空等等,来判断我们的自动化,判断我们验收的结果。

对于人工验收这一块,主要是由数据展示和交互操作组成的。那类比我们的测试用例的话,比如一个人工的测试用例,它主要就是会定义一些操作的步骤,然后有人工去执行。那对于验收来讲,它除了告诉验收的人应该怎么去执行(主要是数据展示部分)之外,它还会有一些交互的操作,比如最开始上面提到的那两个例子,验收的第一步往往是需要提交一些验收的物料,比如要上传一个视频,所以它有一个交互的过程在里面。

因此我们的人工验收的部分会涉及到数据展示与交互部分的大量的操作,所以我们的验收用例的整体结构,除了像验收用例名称等那些基础信息之外,它还需要有自动化配置与人工配置所结合起来,甚至说这两种可能是都会有存在的情况。

那比较具体的一些情况,比如说我们的真机自动化测试用例,它可能是需要配置一个自动化的颜色的组件,如加长一些自动化交易的规则,它就会形成一个真机自动化的用例。如果是一个人工的功能测试用例,那我可能需要去编排一些人工交互的界面,我会告诉你的验收步骤是什么,或者说给你一个入口链接,你照着去操作验收,然后你验收完之后,你可能要把你验收的这种视频截图,再把它给上传回来,所以还会有一些交互的这样一些空间去给验收人员去做一些交互。所以我们的验收用例是结合人工加自动化两部分,并且可以灵活选择你是人工的还是自动,或者是人工加自动化结合的这样一个情况。

那么当你有了验收用例之后,其实你还并不能直接去对某一个交付进行验收,还差了一层。比如我们针对出行小程序,列了很多的标准,把这些标准转化成一堆的演示的用例,但这些用例在真正执行层面并不是有一个人并行去执行的,它可能是有一些串接的这种顺序关系,或者说有不同的人去进行的。

比如说有些自动化用例,可以由系统自动化去执行,还有一些是质量同学负责这些质量相关用例。比如功能测试可能由质量同学去负责去验收。像一些视觉相关的,小程序的样式、视觉规范可能是由视觉相关同学去验收的。最后可能还有产品同学统一做一个产品层面的验收。

3.编排验收方案

所以不同的验收用例是需要有一个编排的过程,最终才会形成一个适用于我们业务的验收流程的这样一个验收方案,所以我们还有一层概念叫验收方案,它主要做的工作就是把我们之前的验收用例做一个编排。

比如说像这么多验收用例,我们经过编排之后,可以把它变成 4 个节点,我们可以先跑自动化,自动化跑完之后我们再由质量和视觉并行,之后再由产品去做最后的一个验收。

所以在验收方案这个层面,我们就可以实现验收用例的灵活编排和组装,以此来适配不同的业务,比如我们提到的成千上百种不同业务的这样一个验收的流程。

4.发起验收项目

那么当有了验收方案之后,实际上我们最后把这验收方案实例化,就形成了我们最终的验收的项目。所以可以得出,我们最后的产物其实就是验收的方案,我们把一个交付应用到验收方案上就会变成一个实际的验收项目。

举个例子,比如一个项目它会有一些具体的验收任务,那点进去执行就会有一些具体的执行的界面,由验收人员或者说自动化去完成,那这样一种验收的框架的话,我们就把它覆盖到我们整个生态,覆盖政企、教育、文体等很多行业,每周都有近万的验收项目是通过这套验收框架去完成验收的。

那在实际上应用层面的话,比如纯自动化的验收或者纯粹的人工验收,以及常用这种半自动化人工计较参数和自动化验收,或者说自动化产出一些验收物料和人工判断注册方式,都可以通过这种方式去实现,这就是我们应对验收的问题的验收框架。

二、生态质量检测

(一)生态质量检测的作用

什么是检测?其实刚才提到的我们在验收的过程中,会使用很多自动化的方式,那这个自动化其中有一块就是我们的自动化检测的技术。

检测是自动化去发现问题的手段,当然除了在验收这个环节之外,小程序通过验收进入到支付宝之后,因为小程序还会不断更新迭代,会产生各种各样的线上问题,所以我们的检测也可以用于事后去主动发现问题。

比如一个小程序上线之后,会出现各种各样的情况,像域名不存在、停止服务等等,这些问题在验收之后也会出现的,所以我们也可以通过自动化检测的手段去发现。

(二)支付宝生态质量检测现状

1.挑战

那么我们支付宝生态质量检测所面临的主要挑战就是数量的问题。因为刚才提到了每周万级
这样一个量级的小程序需要去检测,这对自动化来说也是一个非常大的挑战。我们常规的一些测试往往是会盯着几个我们自己小程序去做的,但现在不一样,我们负责的量级在几十万这个量级,因此我们的自动化检测的技术也会在量上面去做一些适配。

但除了量之外,还有就是我们的标准,除了大家一些常见的像什么黑白屏、页面异常之外,其实我们会有几十种不多种业务所定义的这种异常,因为它所有跟我们的验收标准去匹配的话,我们的标准有很多有几十种,所以我们在发现问题的方式上也需要根据业务产出几十种不同的发现问题的手段。

2.解决方案

我们的解决方案最核心还是会使用我们业界常用的真机自动化测试的手段,使用自动化引擎去驱动上千台的真机模拟器去执行自动化测试。

那么在测试执行的过程中怎么去测一个小程序,那就有操作路径这样一个问题,我们会提供像用例编写、遍历、智能动线等多种执行方式去执行测试的操作。

在测试完成之后怎么去判断有没有问题,我们可能需要去结合业务做一些业务异常的理解,我们这里会使用一些 AI 的算法去理解页面内容来识别业务相关的一些异常。

  • (1)真机自动化测试

首先会跟大家讲一下真机自动化测试的一个框架,它主要分为服务端和客户端两部分。

服务端首先就会有任务的调度和设备的调度,那我们现在每天大概会有 30 多万的质量检测的任务量会需要通过任务去调度,而我们的设备有三种主要的资源:真机、模拟器、虚影机。

这几种不同的资源需要通过我们的设备管理,去动态分配,包括结合我们的调度,把任务分配到不同的渲染引擎上去,所有这些有一个渲染引擎的决策和切换这样一个模块,去负责使用不同的执行成本的设备去执行任务。

而在客户端我们可以看到,虚拟机和真机是比较像的,所以我们会统一使用我们蚂蚁自研的叫 Totoro 的框架,主要作用就是驱动我们的真机设备去完成自动化的执行这个层面。

而我们的模拟器更多的其实就是一个前端的一个渲染,所以它驱动引擎是不一样的,它是用 JavaScript 驱动去实现的。

关于操作路径的问题,那我们在测试的过程中,除了遍历等方式,我们还会一些自动化的手段,比如说一个小程序到了一个页面上之后,我下一步应该做什么,会有一个决策的一个链路来实现,那这一块的话我们也会跟服务端有交互,会把当前页面传到服务端,让服务端去分析你下一步应该点什么,所以服务端会有一个业务链路预测的这样一个模块。

而在执行端我们把整个测试做完之后,会把这个执行的过程的截图、日志甚至录屏数据回传到服务端,然后用服务端去判定这一次测试有没有问题,发现哪些问题,那么从整体的量上来看,我们每天 30 万的这样一个任务量,稳定性能够达到 99% 以上。

那么提升稳定性的主要的方式,第一块就是我们的任务调度和设备分配,产生稳定性的主要的问题其实大部分还是在硬件或者说设备这个层面,所以我们在设备的管理这一块会结合调度,在任务分发前会先检测设备是否处于一个可用的状态,设备可用之后,我们才会把这个任务调度上去。

此外,我们在调度上面还有一些重试的逻辑,比如某一个模拟器跑任务失败了,那我们可能会用真机去再重试一次,如果真机重试失败了,我们可能会换台设备去重试,来提升我们任务的整体的稳定性。

另一个是我们的设备使用率,因为我们每天跑的任务量很大,那为了有效提升设备的资源,我们会很关注设备使用率这样一个指标。怎么去提升设备使用率,这块的话首先是在硬件层面我们的真机资源比较稀缺,那我们会去使用相对比较稳定的真机设备的类型,比如会使用安卓原生的系统为谷歌类型的这种系统的手机去跑真机测试,然后我们在运维层面我们的硬件设备都是蚂蚁自研的这样一套硬件的技术,以此提升整体设备的稳定性,从而提升设备使用效率。

  • (2)定义操作路径

那么我们使用真机自动化技术,去驱动众多设备执行测试,那到底测什么,我们提供了 3 种不同的操作路径来匹配不同的业务需求:

A.最常用的就是编写验收用例,它比较适用于像健康码、场所码等等这种动线比较简单的单一场景,那当然它也有缺点,就是我们需要有人去维护这个用例,所以这块是有比较大的人工成本在里面。

B.第二种就是遍历,对于一些没有固定动线的这种场景,我们通常会采用遍历的方式去测,比如这个小程序打开之后有很多的组件,那我们会一个一个的去遍历,当然遍历 1 层或者两层判断它有没有问题,我们会把遍历过程的数据记录下来,那么这个使用场景也比较广泛,主要针对的就是各种各样的我们没有精力去一个个编写动线用例的一种场景。

C.第三种是智能动线,也是我们目前在探索和实践的。以为遍历的缺点也很明显,它的耗时会非常长,没有目的,效率会比较低,因此我们在尝试把 AB 两种方式去结合起来,采用深度学习或者一些 AI 的算法去预测用户的行为,从而能够自动的生成一些动线。比如说,一个页面上有很多可点击的元素,我们会通过算法计算哪一些元素是用户比较常用的,我们会把算法推测出来的,这样一些链路自动生成动线,以此来节省操作路径的耗时,通过动线能够精准发现问题。

  • (3)业务异常理解

那么最后,在完成整个操作之后,怎么去判断有没有问题。除了常见的这种黑白屏、404 等之外,我们其实还自研了很多种业务异常的识别能力,这个会根据我们的业务去定制。

所以我们的检测会根据业务的需求去定制很多的检测能力,比如各种标题检测、聚合页检测、授权检测等等,这样的检测我们会不断打磨,最终我们会主要从两个层面去考虑:准确率和召回率。

目前,我们大概能达到准确率大于 85%、召回率大于 95% 这样一个水位,这就是我们检测技术的主要内容。

相关视频内容,可直接在 TesterHome 视频号进行观看

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/26256.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

计算机网络-应用层(应用层概述,网络应用模型(C/S模型,P2P模型),DNS域名协议)

文章目录1. 应用层概述2. 网络应用模型3. 域名系统(DNS)1. 应用层概述 应用层概述:应用层对应用程序的通信提供服务。 应用层协议定义: 应用进程交换的报文类型,请求还是响应各种报文类型的语法,如报文中…

分布式锁-简单入门

状态不是很好,记一下以前学过的分布式锁吧。 样例简介 不谈大概念,就是简单入门以及使用。 为什么要用分布式锁呢? 假设我需要一个定时操作,每天在某个点,我要处理一批数据,要先从数据库中查询出来&…

云计算-Hadoop-2.7.7 最小化集群的搭建(3台)

云计算-Hadoop-2.7.7 最小化集群的搭建(3台) 文章目录云计算-Hadoop-2.7.7 最小化集群的搭建(3台)一、环境依赖下载二、部署概要三、hadoop101模板机配置1. 更新 & 升级2. 安装好用的vim VimForCpp3. 安装必要依赖4. 关闭防火…

nginx配置https访问 生成ssl自签名证书,浏览器直接访问

问题 nginx配置自签名ssl证书,来支持https访问nginx,在浏览器中访问nginx时,提示有风险。而访问其他各大网站时,也是使用了https协议,为什么可以直接访问,而不提示有风险呢? 解疑 先从ssl证书…

MyBatis--动态SQL

Emp类 1.if标签 通过test属性中的表达式判断标签中的内容是否有效 (是否会拼接到SQL中) 接口 映射 测试 2.Where标签 where标签的三个作用 若where标签中有条件成立 , 会自动生成where关键字会自动将where标签中内容前多余的and去掉 , 但是其中内容后多余的and无法去掉若where标…

mysql explain和DESC性能分析

mysql explain和DESC 根据执行时间去只可以粗略的判断sql的性能,我们如果想去查看一条sql语句的性能还需要explain去查看sql的执行计划。 EXPLAIN 或者 DESC 命令获取 MySQL 如何执行 SELECT 语句的信息,包括在 SELECT 语句执行过程中表如何连接和连接的…

如何做好供应商绩效管理?

供应商绩效管理是一种商业行为,用于衡量、分析和管理供应商的绩效。供应商管理专业人员寻求削减成本,减轻风险并推动持续改进。企业可使用供应商管理系统来监测供应商的绩效水平。 供应商绩效管理最佳实践 所有企业都必须发展核心竞争力,有…

【Linux 网络编程 】

Linux 网络编程背景知识:主机字节序列和网络字节序列IP地址的转换API网络编程接口网络节序与主机节序转换函数IP地址转换函数数据读写TCP编程编程步骤:客户端链接服务端成功的条件多线程实现服务端并发多进程实现服务端并发注意:UDP编程编程步…

自动化测试基础简介(本质)

目录 前言 1.自动化基础 2.分层的自动化测试 2.1 单元自动化测试 2.2 接口自动化测试 2.3 UI自动化测试 3.适合自动化的项目 4.自动化测试模型 4.1线性测试 4.2模块化与类库 4.3数据驱动测试 4.4关键字驱动测试 5.POM设计模式 总结 前言 随着软件系统规模的日益…

应对Redis缓存污染问题,你应该知道这些内容

前言 我们在使用Redis做为缓存时,能加速我们对于热点数据的查询。但是如果缓存中有大量的数据不再热门了,从而占据着大量的内存空间,那么我们的Redis性能就会收到很大影响。该如何解决这个问题呢?本文给你答案。 什么是缓存污染…

kafka开发环境搭建

1 kafka开发环境 1.1 安装Java环境 1.1.1 下载linux下的安装包 登陆网址https://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html 下载完成后,Linux默认下载位置在当前目录下的Download或下载文件夹下,通过命令cd ~/…

轻松学习string类常用接口(附模拟实现)

目录 String的常用接口说明(最常用的) string类对象的容量操作 string类对象的访问及遍历操作 string类对象的修改操作 string类非成员函数 深浅拷贝 简介:Cstring 是C中的字符串。 字符串对象是一种特殊类型的容器,专门设计来操作的字符序列。 不像…

MySQL 全文检索的实现

微信搜「古时的风筝」,还有更多技术干货 这有朋友聊到他们的系统中要接入全文检索,这让我想起了很久以前为一个很古老的项目添加搜索功能的事儿。 一提到全文检索,我们首先就会想到搜索引擎。也就是用一个词、一段文本搜索出匹配的内容。一般…

Vue3中的组合Api与响应函数

文章目录1. 组合Api介绍setup2. 响应函数2.1 ref2.2 reactive2.3 toRef和toRefs2.4 readonly2.5 customRef1. 组合Api介绍 组合Api其实时用于解决功能、数据和业务逻辑分散的问题,使项目更益于模块化开发以及后期维护。 vue2.x — optionsApi 配置式Api — react类…

STM32 定时器定时计算

STM32 定时器定时计算STM32 定时器频率例子公式referenceSTM32 定时器频率 定时时间 定时器频率 / 倍频 /装载周期 htim1.Init.Prescaler 72-1;htim1.Init.CounterMode TIM_COUNTERMODE_UP;htim1.Init.Period 1*1000*1000;tim 72x10^6 / (72-1)/ 110001000 1us 根据定时…

RAC/RAC One Node 修改私网/心跳网卡名

cDAS RAC/RAC One Node一般采用ib ip作为私网/心跳ip,有些现场可能会有修改心跳/私网网卡的需求,一般修改网卡也会伴随修改心跳/私网ip的需求。若心跳/私网有高可用,可以一个个修改。 场景1:心跳网卡有高可用 原心跳网卡名 原心…

Vue中 引入使用 localforage 改进本地离线存储(突破5M限制)

1. 简介 说到本地存储数据,首先想到的是 localStorage,应该很多小伙伴都用过,使用很简单。然而,localStorage 却有下面一些缺点: 存储容量限制,大部分浏览器应该最多5M。我就遇到过localStorage存储字符然…

H264码流中SPS PPS详解

1 SPS和PPS从何处而来? 2 SPS和PPS中的每个参数起什么作用? 3 如何解析SDP中包含的H.264的SPS和PPS串? 1 客户端抓包 在做客户端视频解码时,一般都会使用Wireshark抓包工具对接收的H264码流进行分析,如下所示&…

Transform+ASM插桩系列(3)——Transform+ASM的实战

回顾 在上一章讲到创建完buildSrc之后,实现了项目的plugin之后,就可以在plugin注册我们的Transform。这期文章将正式进入重头戏,今天的学习内容有【认识Transform】、【认识AMS】、【插桩实战】 前言 插桩的技巧中,我们要知道 …

Python实现LDA和KNN人脸识别模型(LinearDiscriminantAnalysis和KNeighborsClassifier算法)项目实战

说明:这是一个机器学习实战项目(附带数据代码文档视频讲解),如需数据代码文档视频讲解可以直接到文章最后获取。 1.项目背景 人脸识别,是基于人的脸部特征信息进行身份识别的一种生物识别技术。用摄像机或摄像头采集含…