Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >【 Android 场景化性能测试专栏】方向与框架篇

【 Android 场景化性能测试专栏】方向与框架篇

原创
作者头像
腾讯移动品质中心TMQ
修改于 2017-10-25 08:06:06
修改于 2017-10-25 08:06:06
1.5K0
举报

作者:陈帅 团队:腾讯移动品质中心TMQ

一、简述

性能测试,在通信设备测试界,是一个非常成熟的领域,IETF组织在这个范畴制定了诸多RFC以规范测试行为。但在笔者接触移动测试领域的四年里,性能测试仿佛是一个可有可无的专项。性能问题,在各个项目中,总是停留在“用户报障-> 开发关注 -> 测试复现”。

显然,性能问题,如果也能最大限度的按照“测试发现 -> 问题定位-> 开发修改”的正常流程来走,对产品质量是有非常大贡献的。下文的介绍,目标就在于此:测试过程中,测试工程师识别更多的产品关键场景,通过场景化、工程化、自动化的测试手段,发现更多的性能问题,使得性能BUG收敛于产品发布前。

二、目标与战法

尝试概括下性能测试:通过自动化的测试工具模拟多种正常、峰值以及异常负载条件来对系统的各项性能指标进行测试。成功的性能测试,会具备以下几个特点:

(1)提供给开发的信息具有精准性(必备);

(2)测试方法高效,测试数据稳定可靠(必备);

(3)使用的分析方法具有高可信度(必备);

(4)测试熟练使用工具帮助开发定位性能问题(可选)。

提供给开发的信息具有精准性。

如果测试或用户告诉开发同学:

“你们这个版本性能很差!”

“我们APP用着用着手机就开始发烫了,你搞定一下!”

开发同学内心肯定是迷茫的。

如果测试将自己的措辞换成:“我们APP资讯页面,观看视频过程耗电量高,这个版本比上个版本jiffs高了30%。”这样开发团队可以根据模块指定跟进人,知道具体的路径,知道耗电量的优化目标(这个版本多出的这30%),那问题的推进必然会更加顺利。

测试方法高效,测试数据稳定可靠。

在设计本框架前,团队执行性能测试,包括长板性能测试(亮屏后台耗电及内存)、手工驱动的场景性能测试、基于页面驱动的流畅度测试。

(1)长板性能,场景过于单一,基本只校验了管家后台进程无任何操作下的性能表现;

(2)相比于UI自动化驱动,手工测试无法保证收集到大样本数据(让人反复做一个操作30分钟,这种任务毫无疑问是对员工的摧残);

(3)页面驱动的流畅度测试,经常出现两次对同一版本的测试得出截然不同的测试结果,测试数据不稳定,难以向开发证明其代码有问题。后文介绍流畅度测试时再详述优劣。

使用的分析方法具有高可信度。

传统的分析方案中,往往简单地采用均值来评估性能项。笔者认为,合理的选用评估算法,也能让你的测试报告更有说服力。一个存在少量毛刺的数据序列,如下图,由于毛刺偏离严重,将严重拉低平均值。多一个毛刺,少一个毛刺,均值都会有很大不一样,在样本量较少时,往往会出现两次测试获得的性能数据差异大的问题。(流畅度数据具体如何解决将在后续流畅度篇中详述)。

图一流畅度样本

测试熟练使用工具帮助开发定位性能问题。

测试左移一点,多做一点,开发就可以少花一点精力在缩小问题访问上。在功能测试中,一个BUG从偶然复现到找到必现路径,会让开发减少大量定位问题时间。同样,在性能测试中,如果测试能指明哪个线程是功率消耗大户,哪个对象是内存泄漏祸首,那么开发也能更加迅速地修复问题。同时,测试在定位过程中,不仅仅提升了自身能力,也建立起了自己的技术形象。

三、性能测试框架设计

如下图,本次设计的性能测试框架,包含有数据收集、数据分析、UI自动化、驱动框架四个模块,各自独立解耦。这样设计能够降低用例接入成本,可扩展性好。

图二框架设计原理图

四、数据收集方案

我们需要通过一种或多种数据,直接反应一项性能的好坏。所以如何收集数据样本?收集那些数据样本,是性能测试框架必备的一个模块。

五、UI驱动方案

移动客户端的性能测试,主要是模拟用户操作来创造类用户使用场景,获取使用过程中的CPU、mem、流畅度等数据,以衡量该使用场景下,被测应用的性能指标。

本框架的UI自动化框架,选择了python 版的uiautomator(GitHub开源代码)。主要有如下几点原因:

1、数据收集模块需要使用adb工具,做adb输出结果处理、文本分析,python在这方面有较大优势,代码量低;

2、Xiaocong封装的开源python版uiautomator,非常轻量级,功能全面,直接使用开源项目,能够节省非常多的框架开发时间。

六、驱动框架介绍

在本框架中,测试人员能够用如下的命令行直接驱动一个或多个用例的执行,所以设计了类testng逻辑的方案。

Python startTest.py -t 3 -c SwitchTabTest

Python startTest.py -t 3 -m SwitchTabTest,swipeDownTest

如下图,CaseExecutor类用来驱动和组织各个用例的suite_up(),set_up(),test(),tear_donw(),suite_down()等方法。

图三类junit的驱动部分

而用例中包含的这些方法,主要作用是:

(1)suite_up() : 用于执行初始化环境;

(2)set_up() : 主要用于拉起相应的性能数据收集线程、使用UI自动化初始化应用到被测场景,如闪屏滑动,进入主页等;

(3)test() : UI自动化执行场景的关键逻辑,如:测试“连续播放不同视频”场景的内存泄漏。则用例需要在test()方法中,使用uiautomator实现循环点击不同视频播放的逻辑;

(4)tear_down() : 该方法主要用于通知数据收集线程停止数据收集,进行数据归档

(5)suite_down() : 该方法将清空环境,将所有数据汇总到报告中,并使用数据分析算法得到可以直接用于报告的内容。

图四执行逻辑

如图四,UI自动化在test()中执行相应场景时,性能数据收集线程会持续收集性能数据。

注明:上述的五个步骤并不需要在每个case中实现,对应同一专项,除了test(),其他四个方法,都具有相同的逻辑,抽象到父类中实现即可,这样可以做到同一个专项下的不同场景用例,只需要写一个test方法。

七、数据分析方案

拿到数据后,想要最大化数据的价值。合理合适的数据分析方案显得尤为重要。笔者一开始做性能测试,所能想到的也就是拿到一大堆样本数据,取平均值,再做对比分析。

本框架试图提供除了平均值外,提供其他更为丰富的数据来评估各类性能指标。包括:

中位数:以它在所有标志值中所处的位置确定的全体单位标志值的代表值,不受分布数列的极大或极小值影响,从而在一定程度上提高了中位数对分布数列的代表性。中位数用于评估网络延迟样本,效果明显优于平均值。原因在于,如大部分延迟在20ms时,其中有几个异常样本值2000ms以上,它们会严重拉高均值,导致均值不能完全代表该延迟数据序列。

方差与标准差:结合均值来评估数据序列,可以评估到数据序列的离散程度。

分布图或分布表:分布图或分布表也能比较好的评估一个数据序列的好坏,用它来做流畅度、网络带宽、网络延迟等性能评估,能够比较直观、详细地给出对比结果。

图五流畅度优化效果示意

曲线图:内存性能的评估,最优解莫过于占用曲线+ 平均值了。

图六占用内存曲线

平均值:最传统的均值,依然是一柄利器。

极大值、极小值。

八、必要的说明

框架使用了开源代码:

https://github.com/xiaocong/uiautomator

https://testerhome.com/topics/6938

以上对具体代码的介绍比较少,后续几篇继续阐述下具体逻辑是怎么实现的。

搜索微信公众号:腾讯移动品质中心TMQ,获取更多测试干货!

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Android 性能测试之方向与框架篇
陈帅
2017/09/30
1.9K0
Android 性能测试之方向与框架篇
【Android场景化性能测试专栏】CPU耗电性能篇
本文主要介绍了如何通过Android源码和Linux命令,获取和分析APP的CPU、内存、网络等方面的性能数据,并通过可视化的方式展示出来。同时,本文还提供了相关的性能数据收集和分析的方法和工具,可以帮助开发人员更好地定位和解决APP的性能问题。
腾讯移动品质中心TMQ
2017/10/27
1.9K0
【Android场景化性能测试专栏】CPU耗电性能篇
Android 性能测试之 CPU 耗电性能篇
本文主要介绍了如何通过Android源码和Linux命令去获取Android设备上的CPU耗电信息。同时,也介绍了一种基于Android NDK的adb命令行工具,用于获取Android设备上的CPU信息,包括CPU使用率、CPU温度、CPU频率、CPU核心数量,以及每个线程的详细信息。通过这些信息,可以更好地了解和优化Android应用的性能,包括CPU耗电问题。
陈帅
2017/09/30
3.7K0
Android 性能测试之 CPU 耗电性能篇
【Android场景化性能测试】UI流畅度篇
本文主要讲述了如何通过UI自动化测试工具对移动App进行流畅度测试,包括测试前的准备、测试步骤、数据收集和报告输出等方面。同时,文章还提供了一些案例和具体的测试方法,以帮助读者更好地理解如何对移动应用进行流畅度测试。
腾讯移动品质中心TMQ
2017/10/31
3.6K1
【Android场景化性能测试】UI流畅度篇
【 Android 场景化性能测试】启动速度篇
本文主要介绍了如何通过抓包工具分析Android启动速度数据,包括使用Charles、Wireshark、Fiddler等工具,以及如何利用这些工具收集、分析数据,最后通过表格的形式直观地展示数据。
腾讯移动品质中心TMQ
2017/11/01
2.2K0
【 Android 场景化性能测试】启动速度篇
Android 性能测试之内存性能及内存泄漏篇
陈帅
2017/09/27
2.8K0
Android 性能测试之内存性能及内存泄漏篇
腾讯TMQ在线沙龙回顾|场景化性能测试方案
场景化性能测试方案 活动时间:2017年12月06日QQ视频分享 活动介绍:TMQ在线沙龙第三十五期分享 本次分享的主题是 场景化性能测试方案 101位测试小伙伴报名参加活动 想知道活动分享了啥吗 请往下看吧! 嘉宾 陈帅,腾讯WiFi管家专项技术测试。目前主要负责WiFi管家业务测试,测试工具开发等,在UI自动化、性能测试、工具开发等领域有一定实战经验。 分享主题 1、为什么要做APP的性能测试; 2、怎么样对各类性能数据进行数据收集和量化评估; 3、性能问题定位的简单举例; 4、系统性性能测试工
腾讯移动品质中心TMQ
2018/02/08
1K0
腾讯TMQ在线沙龙回顾|场景化性能测试方案
原生 APP 的性能测试
关于原生 APP 的性能测试,这是确保应用程序在用户设备上运行流畅、响应迅速且资源消耗合理的重要环节。性能测试的目的是识别和解决潜在的瓶颈,提升用户体验。
数字孪生开发者
2025/04/27
2300
原生 APP 的性能测试
性能测试之k6篇
背景 项目的目标是为客户交付一个ToC的APP,其后端是基于RESTful的微服务架构,同时后端还采用了Protobuf协议来提高传输效率。在最终上线之前,我们需要执行性能测试以确定系统在正常和预期峰值负载条件下的表现,从而识别应用程序的最大运行容量以及存在的瓶颈,并针对性能问题进行优化以提升用户体验。 性能测试是一个较为复杂的任务,包括确定性能测试目标,工具选择,脚本开发,CI集成,结果分析,性能调优等过程,需要QA,Dev,Devops协力合作。本文将对这一系列过程进行详细描述。 为什么选择k6 在得知
ThoughtWorks
2022/05/20
1.8K0
性能测试之k6篇
【 Android 场景化性能测试】内存性能及内存泄漏篇
本文介绍了Android App如何实现场景化性能测试,通过具体实践案例,讲解了如何利用Dart语言和AppScan TraceView工具进行代码分析和数据采集,并利用这些数据来定位解决内存泄漏问题。同时,也介绍了如何通过MAT来分析内存泄漏。
腾讯移动品质中心TMQ
2017/10/30
1.9K0
【 Android 场景化性能测试】内存性能及内存泄漏篇
性能测试--3、性能测试过程
在性能测试项目中大部分的时间花费在获取需求、验证需求以及实现需求上,只有这样才能为性能测试打下坚实的基础。其余的时间则用于录制事务脚本、执行性能测试和分析测试结果。
叨叨软件测试
2020/04/14
4.5K0
性能测试
随着5G时代的到来,以及万物互联时代的到来,云应用和云服务会越来越多,数据量会指数级增长。尤其是2020年全球疫情的时代意义,会导致各行各业开始上云。从而会催生出极具个性化的各类产品的诞生。
派大星在吗
2021/12/05
4.2K0
基于 Jmeter 生态的智能化性能测试平台
在 IT 架构转型过程中,由于从主机到开放平台、从集中式到分布式的转变,对质量保障工作提出了更高的要求。过去的项目测试中,人工操作占比较高,导致在测试广度、测试深度、测试效能上都无法满足转型后的质量守护需求。
DevOps时代
2023/08/22
5440
基于 Jmeter 生态的智能化性能测试平台
探秘APP性能三角区
APP要做性能测试,什么样的数据能反应应用的性能情况,如何评估应用的性能状态? 不知道该如何入手?一起来分析下如何给APP做性能测试。 性能测试三角:性能指标、测试场景、测试工具。 首先要思考选哪些指标来评估性能:内存、cpu、电量还是什么?接着,选择你需要测试的场景,测试场景描述了你需要在何种场景下取性能数据,要测试APP何种功能等等。最后,根据你的指标和场景选择适合你的测试工具。 下面就从这三方面来具体分析。 一、性能指标 常见的性能指标有:内存、CPU、电量、流量、速度/耗时。这里从2个角度分析:
腾讯移动品质中心TMQ
2018/02/05
1K0
探秘APP性能三角区
混合APP的性能测试
混合APP的性能测试是确保应用能够提供流畅、响应迅速用户体验的关键环节。由于混合APP的特性(通常基于Web技术封装在原生容器中,或使用跨平台框架),其性能测试需要考虑多个方面。以下是一些关于混合APP性能测试的重要方面。
数字孪生开发者
2025/04/02
2590
混合APP的性能测试
原生APP的性能测试和优化
原生APP的性能测试和优化是确保用户拥有流畅、快速且响应灵敏体验的关键环节。一个性能不佳的应用可能会导致用户流失、差评以及对品牌的负面影响。以下是原生APP性能测试和优化的详细步骤和注意事项。
数字孪生开发者
2025/04/07
1970
原生APP的性能测试和优化
浅谈自动化测试
软件测试作为软件生命周期中不可缺少的组成部分,对提高软件质量起着重要作用。随着软件测试的发展,自动化测试技术也得到了很大提高。
2020labs小助手
2020/02/17
1.2K0
APP性能测试—PerfDog
PerfDog是一个移动全平台Android/iOS性能测试、分析工具。可以快速定位分析性能问题。手机无需ROOT/越狱,手机硬件、游戏及应用APP也无需做任何修改,极简化即插即用。
清风穆云
2021/08/09
4.3K0
APP性能测试—PerfDog
走进社区客户端测试 | 得物技术
1.2 客户端技术栈移动端应用可以分为三大类:Web 应用(Web App)、原生应用(NativeApp)、混合应用(Hybrid App)。
得物技术
2023/04/25
1.1K0
走进社区客户端测试 | 得物技术
移动端主流性能测试工具,你都知道多少?
Instrument是Apple官方提供的一个强大的内置在xcode中的性能调试工具集。其中,Activity Monitor(活动监视器):监控进程级别的CPU,内存,磁盘,网络使用情况,可以得到应用程序在手机运行时总占用的内存大小;Core Animation(图形性能):这个模块显示程序显卡性能、CPU使用情况以及页面刷新帧率;Network:用链接工具分析程序如何使用TCP/IP和UDP/IP链接;Energy Log:耗电量监控。Instrument主要用于在调试过程中随时发现问题,及时优化,但是这个工具只能供有应用源码的程序员使用,无法测量用户真实使用场景下的性能。
用户6367961
2022/06/08
1.8K0
移动端主流性能测试工具,你都知道多少?
相关推荐
Android 性能测试之方向与框架篇
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档