首页 / 资讯中心 / 文章详情

基于Python的Monkey自动化测试监控工具:支持日志采集与设备性能监控

基于Python的Monkey自动化测试监控工具:支持日志采集与设备性能监控 ★ FEATURED ARTICLE
-脚本.zip 所包含的 -- 项目方面, 它是一个对移动应用质量保障体系有着全面覆盖作用的综合性自动化测试与性能监测解决方案, 这个方案的核心技术基础依托于官方所提供的工具, 同时在功能方面进行深度的二次开发以及强化增强, 其实现手段是通过使用的编程语言来完成的。它是 SDK 里面自带的那个压力测试工具, 它会去朝那个正在搞的目标设备或者是模拟器扔过去一堆乱糟糟的乱七八糟的用户操作事件, 这些东西呢包括点击, 滑动, 按键, 还有触摸动作, 甚至包括系统级别的广播消息, 这么干呢就是为了去模仿真实的那些用户在不讲道理的高强度下面进行的完全没有规律的操作行为, 然后呢就能以最快的速度把那个应用里存在的毛病给揪出来, 这些毛病可能是在稳定性上出的问题, 可能是直接导致崩溃的情况, 还可能是ANR无响应这种现象, 再或者就是内存泄漏啊资源争抢什么的潜在缺点。但是呢, 原生这个玩意儿确实存在着特别明显的让人头疼的局限性, 它只能把那些比较基础的东西给你输出来, 比如说event log还有crash和ANR这样的日志, 它根本就没有办法去实时采集设备在运行的时候那些特别关键的能体现性能好坏的指标数据, 同时它还缺乏对测试整个过程的一种管控能力, 也说不清楚整个测试过程的情况, 更没有那种可以追溯的手段来支持工作, 另外它也没能够实现那种一轮接着一轮、连接着好几台设备、覆盖各种不同场景的大型批量任务调度, 更别提把收集到的结果放在一起进行聚合分析的操作了, 而后面提到的这个东西, 正是为了能够弥补上面所说的那些短板和问题, 从而精心设计并做出来的一个属于工程化实践方面的产物。这个项目主要是用 3.x 来搞开发的, 因为它能把在系统脚本编写、进程管理、文本解析、数据结构处理以及跨平台兼容性方面的天然优势全都给用起来, 最后就搭出了一套完整的东西, 这个成套的东西就是一个闭环流程, 具体来说呢, 就是先是自动化执行一下, 再去跟 ADB 设备通信, 然后去采集多维度的性能数据, 接着对日志进行结构化的解析工作, 最后再把测试报告给生成出来。它的基础层面高度地去依赖那个叫作 Debug 也就是后面括号里写的 ADB 这样的协议, 然后呢, 通过那个相关的模块去调用 adb 这个命令行接口, 以此来达到对已经到的设备有一个精准的识别, 同时也能做状态检测, 还能控制进程的开头和停止, 以及实时地抓取日志信息, 再加上去轮询那些系统服务的信息, 像是比如某些特定的名字被隐藏了或者说原文里有空白的这些服务, 还包括获取 top 这种进程快照之类的功能。特别是在性能监控这个维度上面, 这个项目不仅是对被测应用里面属于它自己的那部分记忆体占用情况, 比如说PSS、RSS、Heap、Heap这些, 做到了每分钟或者每秒都能采样一次, 而且呢, 还把这个整台机子的记忆体使用的那个走势也给集成了进去, 还有那个CPU占用的比率, 再就是网络流量, 这里具体是指接收了多少字节和发送了多少字节, 还有数据包的个数的变化, 这个是可以按照应用或者是UID这样的维度来进行拆分的, 还包括了电池温度的变化情况以及电量的变化, 甚至还包含了GPU渲染帧率这个指标, 当然这里需要注意的是, 如果要测量GPU渲染帧率的话, 是需要去配合一些其他的东西一起使用的。所有采集的数据都是以时间戳作为索引的, 并且是被结构化处理并存储成逗号分隔值文件的格式或者是对象表示法的格式。这一做法主要是为了便于后续把数据导入到相关的程序里, 也就是那个加号和后面跟着的字所代表的意思的文件或者说是系统, 或者是由自己研发出来的可视化平台当中, 从而进行动态图表的展示工作以及实现针对异常阈值的自动告警功能。在日志采集这个方面里, 它把这个传统的用-v -v -v这种输出搞出来的纯文本日志给打破了, 它实现了对日志的一些分级过滤操作, 比如按TAG来分, 还有按PID和UID来分, 同时也做了关键词的高亮匹配工作, 例如看到FATAL或者ANR in就会高亮, 它还自动提取并归类了崩溃堆栈, 最后还把这些内容和事件日志在时间轴上对准起来了。再进一层, 它能够支持将 的 seed 值、事件计数、运行时长、崩溃次数、ANR 次数这些元数据, 与性能快照做关联。这样能形成一个具备因果分析能力的测试证据链。打个比方说。比如在某一次测试里。出现了 OOM 异常的时候。系统自动往回找。把前 60 秒内的内存增长曲线找出来。把 GC 频次找出来。再把 Top 内存占用进程列表找出来。以此来辅助开发者精准定位泄漏源头。此外, 项目也内置了灵活的配置机制,用户可以使用yaml文件或ini文件格式来进行设置。该机制支持自定义参数, 具体包括两个连字符加pct-touch这样的格式, 以及其他类似格式的参数。同时还提供了设备白名单与黑名单的管理方式。可以设定采样间隔的时长。具备超时熔断的策略以应对异常情况。包含失败重试的逻辑来处理错误。以及提供邮件通知和钉钉通知等功能来通报结果。这些都是常见的企业级运维能力的内容。从软件工程这个角度去看的话, 它具有良好的模块化架构这一特性。具体表现为: main.py 作为总控入口, 它的职责是负责流程编排另外某一个 .py 文件封装启动与生命周期管理再有一个 .py 文件抽象 ADB 通用操作还有一个 .py 文件实现各类数据采集器插件化此外, 某个 .py 提供正则规则引擎与日志语义解析器最后, 最后一个 .py 负责生成测试报告, 这份测试报告的格式是 HTML 或者 PDF, 内容包含统计图表、TOP 问题清单以及性能基线对比。整个项目是遵循了那个 PEP8 这种规范来的, 还配备了详细的 md 格式文档, 里面包含了环境部署说明, 这个说明里有依赖包的 txt 文件, 还有 ADB 的环境变量配置指引, 也有设备 USB 调试与授权说明, 同时也具备典型的使用示例, 这些示例覆盖了单设备单轮测试、多设备并发压测、夜间无人值守巡检等情况, 最后还兼容了 Linux 和 macOS 多平台运行。它不仅仅是工程师用来提升回归测试效率并且降低人工检查成本的好工具, 还是流水线里面持续集成和持续交付环节要实现质量关卡的重要组成部分, 这样就能够顺利地和持续集成集成在一起, 实现在每次代码合并以后自动地去触发压力测试, 同时把性能变差的情况也纳入到质量控制里面去。总的结论就是, 这个工具在当前的自动化测试范围里, 它把经典的管理办法和现在的工程技术做法还有系统级别的性能查看理念进行了非常深刻的结合, 这种结合是一种比较领先的方式, 它是需要来建造那些可靠性很高、速度很快的手机软件的时候, 一定不能缺少的基础技术手段。
阅读完成 · 觉得有帮助?
咨询建站