PS:是不是被这样大高大上标题给吸引进来了,这是一个标题党,它可能不是大家真正意思理解的 AI 吧,就功能不是很复杂,但很实际也贴近业务~ AI 自动化指的是通过自动化收集数据给出需要的数据放到自动化平台进行 UI 自动化测试

想法由来:

是刚好有一次在跟跟开发讨论,说没有方式可以解决,每次验证一个 Bug 的 UI 页面 Bug,都要造数据,恢复到原来的页面,还要点击进去,有什么什么办法,可以直接通过之前测试的数据,直接进入到这个页面,马上验证;开发说,有啊,他们刚好做了一个协议跳转,通过 adb shell am broadcast -a intent.action.debug -n apk 包名/.receiver.GameCenterReceiver --es payload + routers 页面数据,进行跳转,实验了下,贼好用;

协议控制跳转原理:

当控制器之间需要交互跳转时, 只需要将对应的 URL 地址发送到 Router 里, Router 根据其注册的 URL 来寻址到对方信息, 然后负责实例化对象, 并传参, 进行跳转等工作, 各个控制器之间不需要相互依赖对方, 完美解决不同模块之间耦合!

App 内部跳转除了, 频繁的控制器之间切换外, 还有比如跳转到 H5, 或者跳转到 WebView 等;
App 外跳转则包含 Scheme 启动, 3D Touch, UniversalLink, 点击通知等都会触发;
这些包含跳转, 页面切换的我们均可以统一使用 Router 来进行有效的管理, 使 App 变得更加动态化, 模块之间耦合度更低;
支持 H5 跳转
外部 Scheme 启动 App
UniversalLink
3D Touch Shortcut
支持后台动态下发 RouterMap 配置
(PS:上面百度的,其实我就很简单,能为测试我所用,能满足我要求就好,就不会太在意原理)

开发相关一套通用协议,通过安卓广播的方式调用 json 数据进行跳转,原始命令:adb shell am broadcast -a intent.action.debug -n apk 包名/.receiver.GameCenterReceiver --es payload+ 页面数据,页面数据 json 数据为:

AI 自动化设计思路:

通过跟开发了解以后,然后让开发设计一个开关,可以在测试过程中,把相关操作轨迹数据存储到指定的文件夹,并约定如果进行自动化跳转,要给出 log 进行判断;
然后通过开发了一个安卓 app 把测试数据上传到制定的服务器,进行数据排序,也就是热点,知道测试工程师在测试过程中常点击的数据页面有哪些,然后自动化平台就可以通过选择 AI 自动化,上传 apk,然后要执行的前 100 条进行遍历测试还是跳转测试,最终结果通过 crash,anr 和图片进行确认是否有问题;大概原理图就这样

这个技术带来的哪些好处:
1.快速的页面 UI 跳转,特别是通过 scrcpy 可以快速验证复杂的数据,在不同的页面,UI 展示;
2.Bug 验证,不仅是 UI,通过在 bug 的数据,开发可以快速定位到页面;
3.自动化用例介绍了,直接跳转到制定页面,直接断言或者查找有没有这个 ui 或者这个数据,就成功,提高自动化的效率;
4.可以有序的进行遍历测试,通过自己测试的轨迹,对自己的操作的页面,进行有序的遍历测试;
5.常规功能的回归测试,接口测试,AI 自动化方式,保证用户常用功能不出问题;

以上,整体来讲,技术没有很高大尚,就简单数据驱动自动化测试吧,但就是落地了,瞎整了一个月,执行效果还不错。存在的缺陷就是我们操作的轨迹毕竟是重复的,希望能通过算法,让这些操作具有 “逻辑性”。

具体的设计,原理,带来的好处,工具实际操作,功能演示,有兴趣的可以点击以下链接进行了解;

AI 自动化就这样被实现了(一)

AI 自动化就这样被实现了 (二)

AI 自动化就这样被实现了 (三)

AI 自动化就这样被实现了 (四)


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