专栏文章 基于 Bert 迁移学习点击未知弹框

opentest-oper@360.cn · 2019年05月24日 · 最后由 不二 回复于 2020年06月30日 · 4960 次阅读
本帖已被设为精华帖!

背景

在兼容性测试中,对于一个 app 进行兼容性测试,包括安装,冷启动,热启动,卸载四个步骤,在这四个步骤都正确的情况下,才确定 app 兼容这款手机。
在国内,Android 手机的型号,品牌有很多,各个品牌厂商封装代码不同,给兼容性测试带来了很大的影响,尤其在 Android6.0 以后,Android 为了用户安全引入权限弹框,Android8.0 以后 oppo,vivo 等手机需要用户输入账户,密码才可以安装,为确保兼容性测试的正确执行,需要引入一种辅助处理机制,点窗助手。该 sdk 是基于 google 的 uiautomator 开发的,所以只适用于 Android 系统。

方案

点窗助手主要包括三个部分:云端配置服务、基于 BERT 模型的点击推荐服务、android 端点击服务。

云端配置服务

可以添加弹框配置信息的 web 服务,方便运维工程师添加、删除或者合并一些弹框点击配置信息。弹框配置服务示意图如下图所示,可以给不同品牌的手机根据适用场景配置不同的弹框点击信息,大部分采用组件名正则匹配方式点击,少部分利用坐标点击的方式。
如图:某 apk 安装时的弹框

配置如图

基于 BERT 模型的点击推荐服务

由于 apk 和手机品牌种类繁多,应用弹框也很多样化,无法将所有弹框的点击方法都事先配好。因此,将预训练好的 BERT 中文模型迁移到我们的方案中,搭建了基于 BERT 模型的点击推荐服务。整个服务的框架图如下图所示,BertServer 利用 bert_as_service 项目 (https://github.com/hanxiao/bert-as-serviceBertClientPool,维护多个 BertClient,用于并发编码弹框文本。) 实现的,并在项目的基础上实现了

基于 BERT 模型的点击推荐服务主要分为三个部分:

1.从云端配置服务中获取已配置弹框数据作为样本集,利用 BERT 中文预训练模型对已有配置信息进行向量化。
2.对 android 端发来的弹框点击推荐请求进行数据解析,并根据请求 id 去缓存中匹配,匹配成功,将缓存中结果返回给 android 终端,匹配失败,将请求加入任务队列中,等待 Worker 处理。
3.BertClientPool 分配 BertClient 对任务中弹框文本向量化,计算弹框上每个文本向量和相同品牌型号下已有弹框配置向量集的距离,再根据距离对弹框文本排序,将排序后的弹框文本列表加入缓存中返回给 android 端。

Android 端点击服务

android 端每隔 5s 请求一次云端配置信息,将对应品牌和型号的配置信息存储到本地,利用 uiautomator 监听 OnAccessibilityEventListener 事件回调,判断手机当前的界面是否弹窗,如果出现弹窗界面,利用本地配置信息对弹框做相应的操作,若本地配置信息中没有对该弹窗界面给出指定操作。Android 端将弹窗界面上的所有控件文本拿到,将少于 10 个字的弹框文本(一般情况可点击的弹框文本字数不多)包装后发送给弹框点击推荐服务,弹框点击服务收到请求后将弹框文本按照可能被点击的优先顺序返给 android 端,android 端收到 response 后按照返回的弹框文本列表依次点击直到弹框消失。

效果展示

下图是本方法在我们开测平台 (http://opentest.360.cn/phonerenter) 执行兼容性测试任务时的过程图展示,红色是通过云端配置点击的,紫色是弹框点击推荐服务推荐的。


如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
共收到 11 条回复 时间 点赞

新思路,值得学习!

鼓励这种探索精神,以及分享的行为

simple 将本帖设为了精华贴 05月26日 23:41

智能化测试的探索 赞

simple 回复

开测从 testerhome 学习到了很多新知识,也会及时跟大家同步自身的进展。从开源来,到开源去的思想。

好厉害,mark 下,有时间来学习

mark 一下

虽然权限框确实挺多,但是可以枚举的,用深度学习来做的话,样本数据可能不够,达不到想要精度。况且深度学习技术成本也挺高的,不是很有必要。能想到的是,可以达到未卜先知的能力,就是如果发现新的权限框场景未在配置中,可以采用深度学习的智能判断方式。

考虑开放你们的项目吗?想参考下安卓监控屏幕信息这块的内容

12楼 已删除
需要 登录 后方可回复, 如果你还没有账号请点击这里 注册