移动端去代码化用例生成实践——3倍效能提升
如果无法正常显示,请先停止浏览器的去广告插件。
1.
2.
3.
4. 1 背景
2 核心特性
3 具体实现和收益
4 未来计划和展望
5. 01 背景
6. 手卫移动端自动化测试的闭环建设
无人值守,自动拉取
测试包
和插件进行测试
崩溃监控
包大小趋势
CI稳定性
市场渠道监控
静态代码扫描
打包
在线生成报告
功能验证
发布
测试
GDPR扫描
性能对比
监控
杀毒监控
直通发布系统
放量监控
兼容性
数据文件验证
自动化用例
商业化监控
换包
7. 日常编写自动化用例的痛点
测试产品多,类型多
迭代快
支持多产品多类型
灵活通用
大量重复代码 复用性强
用例通过率低 高通过率
调试费时费力
不方便维护
现实痛点
快速调试
方便维护
想要的
8. 02 核心特性
9. 支持哪些类型测试
文本用例
弹窗监控,授权
功能验证
性能
兼容
压测
稳定性
H5
线程
10. 如何执行测试
11. 用例文本化的优势
所见即所得
无需编程
快速复制
化繁为简
用例多产品共用
95% 的场景文本用例
便捷引入文本用例:
runLine(rootpath + "/testCases.txt")
5% 的复杂场景常规用例
12. 文本化用例和常规用例对比
支持
转换
进退手机清理5次性能|fsa=1|sta=1|med=isFindEnterSJQL|per=true|t=uih.
TrashClean|gttc=放心清理,首次时间,60|btt=uih. TAB1 |rts=5| t=uih.
TrashClean |wft=放心清理,10|back=1|erts=true|w=5|per=false
支
持
13. 丰富的结果产物
14. 03 具体实现和收益
15. 文本自动化框架构成
16. 文本用例实现思路
操作进行封装
经验适配封装
驾驶舱
我们
性能获取封装
时间类封装
验证类封装
弹窗监控封装
定义KEY,
VALUE
17. 开发对照表设计
fsa 强制停止待测应用几次
sta 启动待测应用几次
cla 清空待测应用几次
st3apps 随机启动3方应用的个数
……
rts 后面步骤循环运行对应次数
erts 内循环结束位置
ocr 是否使用AIOCR
ocrlds ocr识别前是否需要逆时针旋转90度
per是否抓取性能数据
et 如果当前界面有这个值结束本条用例
t 当前界面找到值并点击值
tc 当前界面找到包含值并点击包含值
ft 滑动找到值并点击值
ftc 滑动找到包含值并点击包含值
ift 当前界面如果存在值点击值
iftc 当前界面如果包含值点击值
iftm 匹配多个并点击
ipt 支持中文输入
w 等待时间
p 点击屏幕的相对位置
lp 长按坐标点
dr 滑动
back 模拟点击back按键次数
home 模拟点击home按键次数
unl 解锁手机
vdo 执行录屏
lds 横屏模式
vts 竖屏模式
perm 格式:perm=弹窗跳转按钮文字,软件名称
clw 关闭弹窗监控
des 点击描述
desc 点击包含描述
fdes 查找并点击描述
fdesc 查找并点击包含描述
ifdes 如果存在值点击
ifdesc 如果包含值点
uih 使用 “uih.”开头 + 全局变量
med 使用系统包装好的方法
rid 点击resourceId
frid 查找并点击resourceId
ifrid 如果存在resourceId值点击
wrid 等待resourceId值出现
wfridm 等待resourceId出现正则
btrid 有resourceId值的界面
ridm 正则方式配置并点击
gtt 获取出现文本时间
gttc 获取出现包含文本时间
gtdes 获取出现描述时间
gtdesc 获取出现包含描述时间
gtrid 获取出现resourceId时间
sgt 开始计时
egt 结束计时
asp 直接打log输出通过
asf 直接打log输出通过
ast 验证文本存在
astc 验证文本包含存在
asdes 验证描述存在
asdesc 验证包含描述存在
asrid 验证resourceId存在
astm 匹配正则验证存
18. 自动化文本测试框架之解释器架构设计
19. 相似产品复用用例解决方案
■ 常量配置类伪代码:
if (packageName.equals("com.qatest.demo.demo1"))
{ //全能清理管家
TrashClean = “手机清理”; ……
}else if(packageName.equals(“com.qatest.demo.demo2”))
{ //WiFi闪连
TrashClean = "深度清理"; ……
} ……
■ 功能入口类经验适配:
20. 经验设计引入
解决稳定性和通过率低的痛点,使用并封装上百个经验适配的方法。
21. 文本自动化测试框架与产品的通信设计
通信机制逻辑图
22. 文本自动化测试框架与产品的通信设计
文本自动化支持通过发送广播与产品进行通信,从而实现控制。
cmd=am broadcast -a com.qatest.demo.demoplugin --es key retry
主程序或者plugin中定义和注册对应的广播监听伪代码:
23. 文本用例的AndroidR适配
Android R(SDK=30)系统执行 UiAutomator1.0异常
INSTRUMENTATION_STATUS: stream=
Test results for WatcherResultPrinter=Test run aborted due to unexpected exception: Failed resolution of: Landroid/test/RepetitiveTest;
java.lang.NoClassDefFoundError: Failed resolution of: Landroid/test/RepetitiveTest;
at com.android.uiautomator.testrunner.UiAutomatorTestRunner$WatcherResultPrinter.startTest(UiAutomatorTestRunner.java:297)
at junit.framework.TestResult.startTest(TestResult.java:168)
at junit.framework.TestResult.run(TestResult.java:119)
at junit.framework.TestCase.run(TestCase.java:129)
at com.android.uiautomator.testrunner.UiAutomatorTestRunner.start(UiAutomatorTestRunner.java:160)
at com.android.uiautomator.testrunner.UiAutomatorTestRunner.run(UiAutomatorTestRunner.java:96)
at com.android.commands.uiautomator.RunTestCommand.run(RunTestCommand.java:91)
at com.android.commands.uiautomator.Launcher.main(Launcher.java:83)
at com.android.internal.os.RuntimeInit.nativeFinishInit(Native Method)
at com.android.internal.os.RuntimeInit.main(RuntimeInit.java:396)
Caused by: java.lang.ClassNotFoundException: android.test.RepetitiveTest
... 10 more
24. 文本用例的AndroidR适配
▶ 问题剖析:
使用多台AndroidR 手机均有此现象,说明是系统支持问题,需要适配。
▶ 解决方案:
追踪uiautomator1.0,通过谷歌官方文档,确认谷歌删除了对应类(内心是崩溃的!!)
Ui2.0 权限问题在我们多产品兼容测试中处理比较麻烦,因此有适配AndroidR的强需求。
追查发现抛异常时程序已经初始化了uiautomator1.0测试环境,通过在Android R运行时,反射注册测试服
务并管理用例来实现适配。
√最终方案:接入 360开测 AndroidR 外部反射注册适配方案。
25. 文本用例的AI识别
针对 H5 页面UI无法识别的问题,引入业界领先的 AI 文字识别技术
360智汇云
百度OCR
26. 文本自动化框架跳转指定模块设计
▶ 需求:
测试执行稳定性测试时,想只测试某一个功能或者模块。
▶ 问题剖析:
目前文本自动化测试框架,稳定性测试低版本使用monkey(<5.0),高版本使用Fastboot,Maxim遍历,
并随机命中策略。但是monkey测试不支持指定Activity,Fastboot,Maxim等跳转配置复杂效果不理想。
▶ 解决方案:
√文本测试框架push配置文件
√修改测试主程序代码,debug包中,非首次,根据配置文件跳转到指定功能模块。
27. 文本自动化框架跳转指定模块设计
普通app和replugin产品启动流程分析
Launcher
手卫主程
Replugin App icon
Activity坑位1
①启动插件Activity1
②分配坑位
App信息
PluginContainer
③关联
Activity坑位2
App icon
⑥获取插件信息
PluginDexClassLoader
attachApplication()
⑦加载插件
onCreate
④启动手卫Activity2
启动App Activity
⑤启动插件Activity1
PluginContainer
⑧准备启动插件
替换位置
onStart
插件Activity1
onResume
Android System
ZygoteInit.main(){
…
BootClassLoader()
PathClassLoader()
...
}
ZygoteInit.main(){
…
BootClassLoader()
RepluginClassLoader()
...
}
Android System
加载应用
Replugin App
App
attachApplication()
onStart
onCreate
拦截位置
onResume
DexClassLoader
28. 文本自动化框架跳转指定模块设计
修改Replugin产品代码,在 onCreate 中进行跳转。同时设置首次不跳转,防止未授权时功能异常。
实现通过配置文件跳转到任意插件和内部Activity。
DEMO插件配置:demoplugin|com.qihoo360.mobilesafe.opti.demo.DemoMainActivity
29. 文本自动化落地与收益
落地情况
✔目前接入产品20+,功
能验证,性能测试,主程
与插件兼容性测试,耗时
测试,压测,覆盖安装,
H5测试等
收益
提升3倍 效率6倍 提升30%
开发人员 开发效率 用例通过率
无需代码,脚
本开发维护由
测开推广到全
员 无开发环境限
制,避开繁琐
的if else,自然
语言式开发模
式 所有执行方法
都经过精心适
配和持续维护
30. 04 未来计划和展望
31. 未来计划和展望
智能用例编辑器
IOS 自动化文本改造
接入OpenCV支持图
片元素
可以语音生成用例
32. 360技术
THANKS
360质量效能