移动端去代码化用例生成实践——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质量效能

Accueil - Wiki
Copyright © 2011-2024 iteam. Current version is 2.137.1. UTC+08:00, 2024-11-18 05:41
浙ICP备14020137号-1 $Carte des visiteurs$