一种基于代码注入的移动端应用测试系统及方法技术方案

技术编号:13913552 阅读:40 留言:0更新日期:2016-10-27 09:46
本发明专利技术公开了一种基于代码注入的移动端应用测试系统及方法,包括进程劫持模块,全自动化测试模块;进程劫持模块对系统进程进行检测,如果进程存在则获取进程的唯一标识符,对进程进行劫持,如果劫持成功,注入用于获取进程信息的代码,用于实时检测和获取进程的运行信息,如果劫持失败则返回失败码,如果进程不存在返回进程不存在码;全自动化测试模块执行循环获取图形绘制过程中帧绘制时间的信息。本发明专利技术对应用运行过程中的图形运行流畅度进行自动化的测试和分析,提高了测试的效率,而且不需要修改应用的源代码,适用于屏幕尺寸多样的移动Android设备,极大地方便了自动化测试平台和开发者对应用进行测试。

【技术实现步骤摘要】

本专利技术属于软件测试
,涉及一类移动端应用软件测试方法及一个完整的软件测试系统,特别使用代码注入技术对应用运行的图形绘制的帧率及帧绘制时间信息进行自动化获取,可应用于移动端软件的自动测试、兼容性测试及游戏视频等软件的运行流畅情况的性能测试。
技术介绍
Android作为一个开放开源的平台,发展迅速,目前就应用数量和开发者人数及市场份额而言,Android已经取得了成功。据统计移动设备拥有多种屏幕尺寸和分辨率,其数量已超过百亿,而应用的数量也不计其数,它们能否在设备上运行流畅直接影响用户的体验。如果应用运行不流畅,出现屏幕撕裂、屏幕停滞甚至界面不响应现象,可能使得用户直接卸载该应用,降低开发者的收入。对应用运行流畅情况进行测试和分析非常重要。帧率及16-ms-per-frame基准用来评估和衡量应用运行流畅情况。由于帧率的直观和数值表示,自动化测试平台常常使用帧率来量化应用的流畅性能。通常,获取帧率有两种方式:一是亲自编写一个应用,在其嵌入统计图形渲染的代码来获取帧率信息;二是对应用的安装文件(apk文件)进行反编译,获取该应用的源代码,然后嵌入相关代码以获取。虽然两种方式都可以获取帧率信息,但都需要修改应用的源代码,而且只能获取本应用的运行帧率,而不能得到其他应用的。再者,目前Google及第三方提供了许多用于性能测试的工具,针对应用运行流畅情况的有Systrace,GPU呈现模式分析,GT和FPS Meter等。这些工具要么需要甚至修改应用的源码,要么无法获取和保留应用的帧率运行信息,如Systrace可以帮助开发者收集Android关键子系统(如SurfaceFlinger服务)的运行信息,包括将该应用的帧率渲染信息按行显示,并通过标记不同的颜色来区分处理一帧的时间有没有超过16ms等,从而帮助开发者更直观的分析系统瓶颈,改进应用的性能,但是它检测信息的同时,需要运行应用的源码。实际中为了防止应用代码被窃取开发者会对应用做加密处理,所以应用的源码是很难拿到的,需要获取应用源码的方法或工具就很难对应用进行测试分析。另外,由于Android系统版本和设备繁多及日益增长的应用数量,对应用进行自动测试不可避免,随而涌现了许多自动化测试平台,开发者可将应用安装文件(apk文件)上传到平台上进行应用性能进行测试和分析。为了获取应用运行流畅情况,自动化测试平台常常要求开发者上传应用之前按照流程嵌入相关的开发包及相应代码以便进行测试,手续繁琐,操作麻烦,不利于进行大规模自动化测试。
技术实现思路
本专利技术技术解决问题:克服现有技术中存在的上述问题,提出了一种基于代码注入的移动端应用测试的系统及方法,极大地提高了应用测试的效率,并提供了基于代码注入技术实现的系统方法。本专利技术技术解决方案:一种基于代码注入的移动端应用测试的系统及方法,包括:进程劫持模块、全自动化测试模块、链接库文件模块、文件传输模块、ShellExecute执行命令模块、Android底层库、Linux内核,其中进程劫持模块、全自动化测试模块位于顶层的应用层,链接库文件模块、文件传输模块、ShellExecute执行命令模块位于中间层,Android底层库、Linux内核位于底层:进程劫持模块,采用代码注入技术,在移动端设备运行过程中通过调用链接库文件模块的动态链接库对系统进程(SurfaceFlinger进程)进行获取,如果进程存在,获取进程的唯一标识符并执行进程劫持,如果劫持成功则注入静态链接库到该进程,同时通过文件传输模块将检测到的进程中应用图像运行的帧率信息进行获取,如果劫持失败返回失败码,如果进程不存在返回进程不存在码,它依赖于链接库文件模块和文件传输模块;全自动化测试模块,在不影响移动端应用运行情况下后台运行,通过ShellExecute执行命令模块的adb shell获取移动端屏幕图像帧绘制时间信息和Android底层库获取移动端设备信息,并调用文件传输模块对获取到的信息进行存储,以实现自动地获取应用运行过程中图像的帧绘制时间等详细信息,依赖于ShellExecute执行命令模块和文件传输模块。链接库文件模块,通过Java本地接口(Java Native Interface,JNI)将C/C++文件进行调用并使用本地开发包(Native Development Kit,NDK)将这些文件编译为多个平台(armeabi,armeabi-v7a,x86)下可执行的动态链接库和静态链接库;文件传输模块,使用Android库中的adb或http通信协议,传输数据到上层的进程劫持模块和全自动化测试模块,数据包括移动设备应用屏幕图像运行的帧率和图像的帧绘制时间信息及移动设备相关的信息;ShellExecute执行命令模块,对ShellExecute进行了封装,循环执行adb shell命令检测和获取应用运行过程中图像帧绘制时间信息,调用文件传输模块将信息写入文件并进行格式处理;Android底层库,底层依赖,包括OpenGL ES、SGL、Surface Manager,Android自带的基础库,为上层的链接库文件模块和文件传输模块提供基础的移动端操作接口;Linux内核,底层依赖,作为硬件和软件之间的抽象层,为中间层(链接库文件模块,文件传输模块和ShellExecute执行命令模块)提供了依赖支持,隐藏具体硬件细节提供Android的核心系统服务。进程劫持模块在移动端设备运行过程中将自动加载并执行链接库文件模块的静态链接库,对界面组合数据对移动端应用屏幕图像的图形交换接口进行重写并实时检测图像的帧率调用文件传输模块对其进行获取对负责图形界面呈现的帧缓冲区进行实时检测。所述进程劫持模块代码注入技术使用内存代码注入,直接将代码写入目标进程(是任何你想注入的进程,此处为系统进程—SurfaceFlinger进程),并启动链接库文件模块的远程线程注入功能注入静态链接库远程线程对应用的运行性能进行监控。进程劫持模块所述代码注入技术在不修改Android移动端应用的源码且不用重启Android系统的情况下可实时检测到应用运行过程中屏幕图像运行帧率及应用图像帧绘制时间信息数据进行自动化获取。所述进程劫持模块代码注入技术用于系统升级及加固,对应用自动化测试的同时不对系统及应用产生安全威胁行为。基于代码注入的移动端应用测试方法,其特征在实现步骤如下:步骤1、启动服务通过adb或者http协议获取设备运行平台及设备型号信息,同时执行步骤2和步骤5;步骤2、执行链接库文件模块中的动态链接库列出Android系统中所有进程并查询系统中是否存在用于呈现应用屏幕图形的系统进程,如果不存在返回进程不存在码;步骤3、获取进程的唯一标识符,对进程进行跟踪,获取进程执行信息,启动远程线程将相应平台下的链接库文件模块的静态链接库注入到该进程,如果劫持进程失败,返回失败码;步骤4、自动加载并调用重写的界面组合数据的图形交换接口,通过adb或http协议获取进程中移动端屏幕运行过程中的帧率;步骤5、创建线程循环调用adb协议获取应用运行过程中图像的帧绘制时间信息应用运行过程中帧绘制时间信息。本专利技术与现有技术相比的优点在于:本专利技术使用代码注入技术实现了移动端的测试,可应本文档来自技高网
...
一种<a href="http://www.xjishu.com/zhuanli/55/CN106055469.html" title="一种基于代码注入的移动端应用测试系统及方法原文来自X技术">基于代码注入的移动端应用测试系统及方法</a>

【技术保护点】
一种基于代码注入的移动端应用测试系统,其特征在于:包括进程劫持模块、全自动化测试模块、链接库文件模块、文件传输模块、ShellExecute执行命令模块、Android底层库、Linux内核;其中进程劫持模块、全自动化测试模块位于顶层的应用层,链接库文件模块、文件传输模块、ShellExecute执行命令模块位于中间层,Android底层库、Linux内核位于底层;进程劫持模块,采用代码注入技术,通过调用链接库文件模块的动态链接库对Android的系统进程进行获取,如果进程存在,获取该进程的唯一标识符并执行进程劫持,如果劫持成功则注入链接库文件模块的静态链接库到该进程,静态链接库文件将自动执行实时地检测并获取进程中应用图像运行的帧率信息,并调用文件传输模块将帧率信息数据传输并保存到指定目录的文件中,同时通过文件传输模块将检测到的进程中应用图像运行的帧率信息进行获取,如果劫持失败返回失败码,如果进程不存在返回进程不存在码,静态链接库将不被注入系统进程中,也不会调用文件传输模块获取应用运行信息;全自动化测试模块,在不影响移动端应用运行情况下后台运行,通过ShellExecute执行命令模块的adb shell获取移动端屏幕图像帧绘制时间信息和移动端设备相关的信息,并调用文件传输模块对获取到的信息进行存储;链接库文件模块,通过Java本地接口将C/C++文件进行调用,并使用本地开发包将这些文件编译为多个平台下可执行的动态链接库和静态链接库;文件传输模块,使用Android库中的adb或http通信协议,传输数据到上层的进程劫持模块和全自动化测试模块,数据包括移动设备应用屏幕图像运行的帧率信息和图像的帧绘制时间信息及移动设备相关的信息;ShellExecute执行命令模块,对ShellExecute进行了封装,循环执行adb shell命令检测和获取应用运行过程中图像帧绘制时间信息,调用文件传输模块将图像帧绘制时间信息写入文件,并进行格式处理;Android底层库,底层依赖,包括Android自带的基础库,为上层的链接库文件模块和文件传输模块提供基础的移动端操作接口;Linux内核,底层依赖,作为移动端Android设备硬件和Android系统及应用软件之间的抽象层,为中间层,即链接库文件模块,文件传输模块和ShellExecute执行命令模块提供了依赖支持,隐藏具体硬件细节提供Android的核心系统服务。...

【技术特征摘要】
1.一种基于代码注入的移动端应用测试系统,其特征在于:包括进程劫持模块、全自动化测试模块、链接库文件模块、文件传输模块、ShellExecute执行命令模块、Android底层库、Linux内核;其中进程劫持模块、全自动化测试模块位于顶层的应用层,链接库文件模块、文件传输模块、ShellExecute执行命令模块位于中间层,Android底层库、Linux内核位于底层;进程劫持模块,采用代码注入技术,通过调用链接库文件模块的动态链接库对Android的系统进程进行获取,如果进程存在,获取该进程的唯一标识符并执行进程劫持,如果劫持成功则注入链接库文件模块的静态链接库到该进程,静态链接库文件将自动执行实时地检测并获取进程中应用图像运行的帧率信息,并调用文件传输模块将帧率信息数据传输并保存到指定目录的文件中,同时通过文件传输模块将检测到的进程中应用图像运行的帧率信息进行获取,如果劫持失败返回失败码,如果进程不存在返回进程不存在码,静态链接库将不被注入系统进程中,也不会调用文件传输模块获取应用运行信息;全自动化测试模块,在不影响移动端应用运行情况下后台运行,通过ShellExecute执行命令模块的adb shell获取移动端屏幕图像帧绘制时间信息和移动端设备相关的信息,并调用文件传输模块对获取到的信息进行存储;链接库文件模块,通过Java本地接口将C/C++文件进行调用,并使用本地开发包将这些文件编译为多个平台下可执行的动态链接库和静态链接库;文件传输模块,使用Android库中的adb或http通信协议,传输数据到上层的进程劫持模块和全自动化测试模块,数据包括移动设备应用屏幕图像运行的帧率信息和图像的帧绘制时间信息及移动设备相关的信息;ShellExecute执行命令模块,对ShellExecute进行了封装,循环执行adb shell命令检测和获取应用运行过程中图像帧绘制时间信息,调用文件传输模块将图像帧绘制时间信息写入文件,并进行格式处理;Android底层库,底层依...

【专利技术属性】
技术研发人员:黄甜张震宇
申请(专利权)人:中国科学院软件研究所
类型:发明
国别省市:北京;11

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1