• 这要区分内部测试还是外部数据抓取,外部数据收集走埋点上报,内部测试就简单了,设备端后台挂个监控持续跑数据就是了。脱机方案最简单就是 shell 后台脚本,权限是 shell 或 root 权限,设备端 adbd 不重启进程就在。

    比如我自己设计的 shell 设备端监控 (https://testerhome.com/topics/20187) ,shell 脚本加个后台执行(&)就完事了,还可以配合自动化测试分 case 场景分别监控。

    性能测试这事一定要 “聚焦”,目的是为了解决问题,最怕无目的的取数据监控,占了开销又没落地到优化。这个又分两个维度:
    1、监控:建议在指定位置加埋点,样本量分析,结合具体的 case,在特定行为触发时上报数据,这块重点是采样点和采样频率控制。
    2、筛出问题推动解决:找个合适的方案配合自动化 case 或手工测试做数据抓取和分析

    对于 android 上的 app,后台查杀是常事,不是 rom 整体测试,监控时长配合进程存活时间做埋点应该是比较合适的监控方式,至于各家的埋点上报和后台数据统计报告都是各做各的,原理一致,方案和形式不一样。

  • 还有就是监控上整合在一起了,fps 这个就没单独维护

  • 数据对不对要看窗口名是否对,这里的窗口名不是 activity 名,是 SurfaceFlinger 的 framebuffer 名。
    adb shell dumpsys SurfaceFlinger 中最后一部分 Allocated buffers: 下面有对应名字。因为安卓 8.0 之后有分屏,后面有 #0 编号区分

  • 这个不影响,可以注释掉,最初只是为了用 mac 地址对应下测试结果和手机。

  • 技术是改善效率降低人力投入的基础,再有就是 TDD,能不能驱动开发解决问题并让衔接分析的环节更高效

  • 评估压测为主,可以拦住随机压测中的严重问题,概率性问题补充 bug 数量跟进解决进度。当初我的方案拦过必现死机问题,连 MTBF 压测都没出。最后研发定位发现是研发新改动的判定分支有一个 if 分支是有问题的。

    评估性专项,固定时长,固定压测范围的压测,多台设备增加样本量,至少两台吧。最后通过 bug 数量和发生频次评估稳定性,算是常规 ROM 测试中 MTBF 的补充

  • 也不用,就是 monkey 测试中不改音量。15 年我是用这个方法解决的,做的 shell 管理 monkey 执行过程的随机压测方案,不过之前也被我弃了。安卓端新设计了基于 Hierarchy 信息解析的随机遍历方案在持续完善。
    (https://testerhome.com/topics/3553)
    (https://testerhome.com/topics/3685)

  • 调小音量,monkey 事件比例去除 --pct-syskeys 0

  • 用 minitouch 吧,可以模拟:
    echo "d 0 P0x P0y 50\nc\nd 1 P1x P1y 50\nc\nd 2 P2x P2y 50\nc\nm 0 P0x2 P0y2 50\nc\nm 1 P1x2 P1y2 50\nc\nm 2 P2x2 P2y2 50\nc\nu 0\nc\nu 1\nc\nu 2\nc\n"|/data/local/tmp/minitouch -i
    P0x P0y 移动到 P0x2 P0y2
    P1x P1y 移动到 P1x2 P1y2
    P2x P2y 移动到 P2x2 P2y2

    实际坐标需要调一下

  • uiautomator,或 shell+uiautomator dump 的 xml 解析都可以实现

  • 我是 07 年测手游(功能机时代开始),12 年测新事物安卓电视,13 年底转自动化,14 年承担性能专项建设,16 年主导用户体验相关专项测试建设,18 年去负责了 TNT 专项测试建设,今年年后这又开始建设服务机器人专项。还没想到之后会怎样。

    可有一点:新领域都是缺解决问题的人的,有能力的人不要耗在成熟领域待下去,解决新事物,新领域测试方案能力的人,终归是少数。在 0 到 1 的测试建设中,会有很多机会主导建设过程,产生独立归属的价值产出。

  • 我就是在 30 岁时转的方向,手工测试、带个组继续手工测试干了 6 年,决心转测试开发突破瓶颈。项目中实际尝试自动化解决实际问题,同时多积累不同层面的知识。机会来了独立承担 ROM 性能专项从 0 到 1 建设,做出成果就在其他同事那贴了 “标签”。之后猎头和内推机就不断找上门。转方向后这又 5 年过去了,到现在还是在做一些 0 到 1 的专项建设,积累解决问题能力。

    测试大行业讲确实年龄线很尴尬,但从做事角度讲,能比别人更有效率做事,更独立承担复杂任务才是能力。核心竞争力还是经验积累下的解决问题能力,简历上能体现出对应经验亮点很关键。
    测试圈子不大,核心研发圈子也不大,但人员流动大。如何让前同事有相关工作岗位时直接联系自己是关键,关键就是项目合作中,其他同事对自己帖的 “标签” 起的作用。

  • 没影响,当初写的时候是为了取了下网卡的 mac 来标识设备用的,由于权限和芯片区别会使节点读取受限制。

  • 写个 shell,手机端后台脚本运行,断开数据线等待跑完。
    判定 ui 可以用 uiautomator dump 的 xml 解析,<node 前加换行,awk 用"间隔取对应信息。
    操作可以用 input 或 minitouch,minitouch 在 shell 下使用方式:echo "d 0 $x $y 50\nc\nu 0\nc\n"|/data/local/tmp/minitouch,x、y 坐标默认竖屏,需要根据旋转方向转换下。

  • 遍历压测方案替换掉 monkey,让测试覆盖范围可控。至于方案吗,有些改善版的 monkey 或 ui 遍历,再有也可以自己设计遍历逻辑。

  • 价值产出就是通过测试方案、测试决策,自动化脚本方案设计,提高人效降低人力成本,扩展自动化支持的能力,参与质量流程把控,让测试的 “声音” 影响项目上线把控。

  • 我经历的大多是专项测试需求从 0 到 1 的建设,之后 1 到 2 的维护逐步扩展团队支持。

  • 设计测试方案实际解决效率、新领域测试等需求,单项目落地,案例介绍内部推广,收敛项目测试需求到统一 web 入口,网页交互提供测试服务支持。

  • 不跑 monkey,设计按设定时间循环遍历,配合监控脚本获取 cpu、内存等完整监控数据,log 等。最后汇总分析

  • 一是你窗口配置宽度不够被自动换行了,二是你没看懂原理,窗口名是要配参的,要实际查到要监控的窗口名再测。

  • 最简单的测试设备连接路由器,路由器断外网。

  • [种草] 安卓流畅度测试 at 2019年01月09日

    可以先把需要用的数据一次性收齐,定义好存储方式和格式,呈现方式和把控线可陆续加。也可以用 highcharts 一类的框架做交互图。有几个点得想清楚解决办法,收数据的形式,如果是后台进程得做防后台查杀;收数据间隔,避免影响结果;引导优化落地点在哪,最终产出毕竟不应仅仅是评价,还要落地到和研发优化的对接。

  • [种草] 安卓流畅度测试 at 2019年01月09日

    看统计数据和 dumpsys gfxinfo 包名 framestats 的统计信息很像,看个平均值还可以。具体要落地到优化点有些不够,需要分维度抓优化方向。顺时卡顿,平均帧率提升,低配手机 SurfaceFlinger 的绘制效率,用户体验层面优化目标。

  • 严格的需求管理和代码审查是必要的。之前工作中听过一个真实的事情,之前同事的同学做过的一个事。他在项目代码中的一个正常逻辑不可能执行到的判定逻辑写了行:“如果看到这行内容就说明你见鬼了”。之后很久也没什么事,偶然一天半夜雷雨跳闸重启,显示屏跳出了这行文本,结果把保安吓得不轻。

    开发人员头脑一热写的无厘头彩蛋还是得代码提交审查来控制。还有一类之前见过的就是往 debug 版本 app 中加开发人员名单/合照的菜单,见过三次。

  • 哎,是多说了些,其实无非是压了很久的看法,一次性小爆发了下。

    只是对测试行业的浮躁氛围有很多看法,虽然自己也改变不了什么,表达下自己的看法和谈谈自己的经验总结。能做的只是管好自己,也就是和自己手下的人沟通这些看法,看是否有共识。再有就是和同样有实际解决问题想法的人去聊解决方案的设计。

    其实测试技术成长,很大原因是自己逼迫自己去思考,去尝试解决,去扩展知识面带来的。给自己设定要解决的问题,持续尝试不同方案去提高效率和实用性。去主动在项目中依据测试结果传递自己的分析判定,并去推动高风险问题的及时解决。去尝试和研发人员在逻辑实现层面的对等沟通,并主动提供 bug 疑似问题点的思路,哪怕是判断错了,沟通中也可以从研发牛人那得到正确的回复,这都是一步步的积累。带团队就迫使自己多承担些,想想如何控制团队资源的产出成果的关系,毕竟同样的成果低于管理人员的预期资源使用量,可以积累良好评价和信任度。

    在面试一些人的时候及私下沟通时,听到过很多声音,几个典型的问题,我是一直在问自己和反思这些问题

    1、工作几年了,我要级别提高,我要涨薪。
    问题是:你要这些是凭什么?
    引申出的问题是:为了要到这些我要有哪些积累呢?

    2、手工测试没意思,我要做自动化,我要学编程。
    问题是:转自动化要凭借什么呢?对比下已经在自动化的人及懂编程语言的应届毕业生,竞争力在哪呢?

    3、工作环境不好,没人做测试技术,没人教自动化测试。
    问题是:作为个打工的,只是指着用人单位及其他同事教怎么干活?为了提高自己的测试技术能力,自己能做什么呢?

    4、现在的测试没什么技术含量,就是点点点,干了几年也没技术提高。
    问题是:就算是点点点,你能比别人快速发现严重问题?
    你能比别人发现更多的问题?
    你能自己决定哪些必须测、哪些要优先测、哪些可以不测试?
    你能基于有限的测试结果判断是否能发布?
    能把对测试结果的风险情况清晰的传递给项目组?
    引申出的问题:为了能做到这些,日常工作中要有意识的关注和总结哪些信息呢?

    等等,大量吐槽声音后带来的问题思考

    主要是在测试行业内这么久,体会很深的是:
    1、有想法踏实做事的人相对很少,听安排做执行的人居多。
    2、有责任担当的人少,怕担风险、担责任安排全覆盖测试耗测试资源的人多。
    3、以自己作为出发点思考解决问题办法的少,从其他人和工作环境找原因的多。

    分享下我自己在测试工作经历中的做法,我是这么去思考问题和持续积累的,换工作时有些可说的。

    1、做手工测试时:我会记住严重 bug 的复现逻辑,有条件情况下会和研发沟通 bug 产生的原因及解决的方式(逻辑层面的,不是代码细节),这些就成为了之后测试时优先测试范围决策的依据。也能看到哪些开发人员不靠谱,严重 bug 多,粗心引起的小 bug 多。哪些研发 bug 少且能主动自测。这样系统测试时,根据开发人员的历史情况也能决策哪些模块要重点关注。

    招人面试手工测试人员时,只要是有几年工作经验的人,我都会问道:工作中你遇到过的严重 bug,举个例子说下。
    可很少有人快速的把一个 bug 的完整信息及解决方式,很兴奋的说清楚。反而是要想很久去找个 bug 应付下回答。我接触过的手工测试的牛人,都是可以津津乐道的把严重的 bug 以及最终的解决方式讲清楚。

    2、带组做执行测试时:拿到版本后,我会用一小时,自己过一遍重点的部分,之后才安排测试工作及有选择的安排重点测试。当别的组在催着加班完成所有测试时,我会通过经验和对用户场景重要性的判断,将不重要的部分在之后的迭代中安排周期性增量覆盖测试,从而减少加班。决定转型自动化后,手工执行效率低,重复操作多的,不靠别人,自己设计自动化方案尝试降低人力需求。

    3、到后来的带基础体验团队,可以让自己通过经验及对用户使用场景的分析,控制测试范围和节奏,减少加班。当然自己要承担少测部分的漏测风险。使自己的团队是加班需求最少的。当然逼着自己去实现专项自动化比例是重要的条件。

    说这么多,主要是建议想想这个问题:
    做为测试工作从业者,自己的竞争力在哪。面对一年年的应届毕业生,一批批大公司出来的人员,一年年的过去,自己相对于他们的优势在哪?怎么能让自己的工作很难被替代。

    这个问题我目前的想法是:要让自己积累的解决问题套路在工作中持续可复用;要想办法让同样的工作自己比别人的做法省资源出成果;要让自己在项目中展示自己工作成果的价值,得到其他人的认可;要让自己能在工作中担住更多的责任,能扛住的需求和责任多了,与项目中其他部门的沟通也就越有话语权,因为历史成果积累了信任度。