文主要介绍一个基于 uiautomator2 封装的一个 Python 库 android-catcher ,该库的功能主要有对 Android 设备进行 UI 自动化测试 和 采集手机性能数据 ,适用于如列表滑动、录制视频等各种测试场景下 CPU、内存、帧率 等信息的捕获,方便后续分析。

安装

安装 Python

自动化测试的脚本是用 Python 3 写的,要运行脚本需要先安装 Python 3 环境

安装 android-catcher 依赖

打开脚本目录执行以下命令,安装依赖

pip install -r requirements.txt

Usage

uiautomator2 的使用方式

安装完 uiautomator2 之后,一般只需要执行以下命令对设备进行初始化,在设备上安装 uiautomator2 服务

python -m uiautomator2 init

出现以下提示则表示安装成功

更多的 uiautomator2 的使用方式可参考:https://github.com/openatx/uiautomator2

脚本文件说明

这个脚本库根目录下主要的文件有

  • info.py :手机性能信息采集的脚本,其中定义了父类 Info,已实现的子类有 CPUInfo(CPU信息)、MemInfo(内存信息)、FPSInfo(帧率信息)、NetInfo(网络流量信息) ,使用者可以从 Info 派生子类来实现自己的采集需求
  • task.py :测试场景的脚本,其中定义了父类 Task,因为没有固定的测试场景,因此使用者需要从 Task 派生子类并重写 Task#execute 方法来自定义的测试场景,自定义方式可参考:https://github.com/openatx/uiautomator2
  • info_task.py :测试场景和采集信息灵活结合的脚本,使用者不需要用到
  • utils.py :工具方法脚本
  • _main_.py :任务运行的入口脚本,当没有具体的测试场景,只是想采集指定时间段的信息,直接运行该脚本

参数说明

  • -s:必选参数,指定设备号,可通过 adb devices 获取
  • -a:必选参数,要测试进程的 applicationId
  • -f:可选参数,采样间隔,单位为秒,不建议设置太短,最好是大于 0.1s,默认是 1s
  • -d:可选参数,采样持续时间,默认为10s
  • -i:可选参数,需要采集的信息,可以设置多个,目前可选的有四个,分别为 cpu、mem、fps、net ,用 "," 隔开,如 -i cpu,mem,fps,net
  • -o:可选参数,采集到的信息的输出目录,如 "." 表示当前脚本所在的目录,默认为 "."

生成文件说明

采集到的信息根据信息类型分别存放在指定输出目录的 cpu_stats、mem_stats、fps_stats、net_stats 四个子目录下,文件名为 信息类型_设备号_applicationId_版本号_测试场景名_时间戳 ,如 cpu_d3c2edaa_video.like_RecordVideo_1.9.9_1524122928.csv.csv ,实际效果大致如下图

输出文件为 csv 文件,直接打开和用 Excel 打开的效果分别如下图

另外可以为测试的每个阶段添加一个节点说明

task.period = "idle"

生成类似如下的图

无自定义测试场景的使用方式

适用于没有具体测试场景,在脚本运行之后一段时间内都处于采集状态的情况,持续时间可以通过配置参数指定,过程中使用者可以随意操作手机。通过命令行直接运行 _main_.py 脚本文件,并指定相关参数 比方说我要采集 applicationId 为 video.like 这个应用 10s 内的 cpu 信息和内存信息,采样间隔为 200ms,输出目录为当前目录,那么可以在脚本所在的目录执行以下命令

python _main_.py -s 设备号-a video.like -f 0.2 -d 10 -i mem,cpu -o .

脚本运行结束之后可以在根目录下看到如下图所示的文件生成

注:要带 -d 参数,指定采集的持续时间,否则脚本默认运行 10s,并且无需 -t 参数,默认测试场景名为 Random

自定义测试场景的使用方式

自定义测试场景不能直接调用 _main_.py 脚本,需要创建新的脚本,继承 task.py#Task 并重写 Task#execute 方法,在 Task#execute 中实现自定义测试场景的逻辑,如下图所示:

这里创建了名为 start_app.py 的脚本,运行命令:

python start_app.py -s 设备号-a 进程名 -f 0.1 -i cpu,mem -o .

就可以启动对应的 APP,并采集 CPU 信息和内存信息,采样间隔为 100ms,输出到当前目录。注意这里没有了 -d 参数,因为采集的持续时间以测试任务的持续时间的持续时间为准,设置的参数一定要按照说明来,否则不能采集到数据 如果想采集自定义的信息,可以继承 info.py#Info 并重写 Info#get_start_info 和 Info#get_end_info 方法,可参考已实现的四种信息采集的写法,最后通过 Task#add_info 方法添加。

自定义好测试场景之后,调用 _main_#main 方法,传入测试场景实例,测试场景的名称会作为输出文件命名的一部分,这里最好取能准确表达测试场景的名称,如某个 APP 录制视频测试场景的名称为 RecordVideo 采集到的信息可通过 Excel 制成图表,以下是完整录制视频这个测试场景的 CPU 占比和内存的变化

通过图表可以直观分析应用不同版本和不同场景下的性能状况

跟大家推荐一个学习资料分享群:747981058,里面大牛已经为我们整理好了许多的学习资料,有自动化,接口,性能等等的学习资料!人生是一个逆水行舟的过程,不进则退,咱们一起加油吧!

Android 自动化测试及性能数据采集的 Python 脚本的更多相关文章

  1. <只看这个就够了。。。>Android自动化测试及性能优化

    Android自动化测试及性能优化 分类: Android Java Tools2012-12-09 23:31 4300人阅读 评论(0) 收藏 举报 软件自动化测试对于程序员来说能够确保软件开发的 ...

  2. android删除无用资源文件的python脚本

    随着android项目的进行,如果没有及时删除无用的资源时安装包会越来越大,是时候整理一下废弃资源缩小压缩包了,少年! 其实判断一个资源(drawable,layout)是否没有被使用很简单,文件名( ...

  3. 项目上使用的每月1日自动导出Zabbix性能数据的python脚本

    基于zabbix-manager python2.7 #!/usr/bin/env python # -*- coding: utf-8 -*- # __author__ = "life&q ...

  4. Android自动化测试 - MonkeyRunner(三) 随手练习测试脚本

    #coding=utf-8 import os import time #import MonkeyRunner three module from com.android.monkeyrunner ...

  5. 阿里云收集服务器性能指标的python脚本

    #!/usr/bin/python ######################################### # Function: sample linux performance ind ...

  6. Android 常用的性能分析工具详解:GPU呈现模式, TraceView, Systrace, HirearchyViewer(转)

    此篇将重点介绍几种常用的Android性能分析工具: 一.Logcat 日志 选取Tag=ActivityManager,可以粗略地知道界面Displaying的时间消耗.当我们打开一个Activit ...

  7. 解放双手——Android自动化测试

    解放程序猿宝贵的右手(或者是左手) http://blog.csdn.net/eclipsexys/article/details/45622813 --Android自动化测试技巧 Google大神 ...

  8. Android自动化测试之MonkeyRunner录制和回放脚本

    Android自动化测试之MonkeyRunner录制和回放脚本(十一) 分类: 自动化测试 Android自动化 2013-02-22 10:57 7346人阅读 评论(2) 收藏 举报 andro ...

  9. 十二、导出python脚本

    一.为什么要导出? 导出成多语言脚本,方便二次开发 使用其他语言的test runner 使用自己最熟悉的语言做接口自动化测试 二.导出成python脚本 演示 导出成python的requesy脚本 ...

随机推荐

  1. selenium以及浏览器驱动下载安装

    1.下载selenium压缩包 http://pypi.python.org/pypi/selenium 下载后压缩在python文件下的lib>site-package文件夹下 2.进入sel ...

  2. Python 学习笔记(十五)Python类拓展(二)方法

    方法 绑定方法和非绑定方法 绑定方法和非绑定方法在创建时没有任何区别,同一方法,既可以为绑定方法,也可以为非绑定方法,一切不同都只在调用时的手法上有所区别. 绑定方法即该方法绑定类的一个实例上,必须将 ...

  3. 网页静态化解决方案-Freemarker

    1.1    技术简介与使用 1.1.1     简介 为什么使用: 1.  减轻数据库的访问压力,静态化比较适合大规模且相对变化不太频繁的数据: 2.  有利于SEO(搜索引擎优化); 纯的HTML ...

  4. iOS 利用KeyChain+ IDFV + BundleID 来作为UUID,保证传给服务端的UUID唯一

    查了相关资料,发现只有KeyChain + IDFV可以保证UUID唯一,参考以下代码 , UICKeyChainStore + (NSString*)identifierForVender{ UIC ...

  5. node引入bootstrap npm报错

    今天node引入bootstrap npm报错 但是页面正常显示   最后发现bootstrap.min.js.map没有放在文件里  虽然不用页面中引入    另外也发现了怎么看这种错误了

  6. C++程序设计入门(上) string类的基本用法

    string类中的函数 1. 构造 2. 追加 3. 赋值 4. 位置与清除 5. 长度与容量 6. 比较 7. 子串 8. 搜索 9. 运算符 追加字符串 string s1("Welc ...

  7. sublime Text3安装 markdownediting 报错 解决记录

    看了一下官方文档,也是醉了,都怪自己的无知. 在安装时候不要打开.md的文件,因为你里面有可能有一些语法错误,所以会导致报错. 解决方法关闭其他文件,在重新安装! 官方解释: 参考文档:Trouble ...

  8. 什么是ajax和json,说说他们的优缺点

    ajax异步传输的js和xml.实现页面无刷新状态更新页面和异步提交 所谓异步,简单解释就是:向服务器发送请求的时候,我们不必等待结果,而是同时做其他的事情,等到有了结果后它自己会根据设定进行后续操作 ...

  9. 基于 HTML5 Canvas 的 3D 渲染引擎构建生产管控系统

    前言 大家好,老郑我又回来了.这一期为大家带来一个非常好玩的 demo,我们制作一套自己的 3D 管道控制系统,运用了( http://www.hightopo.com )HT 的 Graph3dVi ...

  10. xftp

    SFTP.FTP 文件传输软件. 所有通过该软件的网络流量都是加密的. 1.点击新建 2.新建一个链接 3.点击确定,保存,然后点击该链接 4.链接服务器成功后,如下图右侧,可以增删改查文件.左侧文件 ...