CN111176981A - Android应用网络相关行为测试方法 - Google Patents
Android应用网络相关行为测试方法 Download PDFInfo
- Publication number
- CN111176981A CN111176981A CN201911268850.9A CN201911268850A CN111176981A CN 111176981 A CN111176981 A CN 111176981A CN 201911268850 A CN201911268850 A CN 201911268850A CN 111176981 A CN111176981 A CN 111176981A
- Authority
- CN
- China
- Prior art keywords
- network
- android application
- application
- data
- code
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/36—Preventing errors by testing or debugging software
- G06F11/362—Software debugging
- G06F11/3644—Software debugging by instrumenting at runtime
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/36—Preventing errors by testing or debugging software
- G06F11/3664—Environments for testing or debugging software
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Computer Hardware Design (AREA)
- Quality & Reliability (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Debugging And Monitoring (AREA)
Abstract
本发明公开了一种Android应用网络相关行为测试方法,以Android应用的apk文件为输入,以测试出的应用与网络相关的错误作为输出,本发明基于模糊测试的思想,首先对待测Android应用进行静态分析,来定位Android应用中网络APIs调用的位置和网络数据使用相关的代码切片;之后,在定位到的网络APIs调用位置处,对待测Android应用进行代码插桩,来向网络响应注入模拟的网络数据;最后,自动化的运行插桩后的Android应用,应用自动运行过程中会触发网络请求,并执行插桩代码来验证应用是否能正确处理不同的响应数据。本发明能全面、高效地测试Android应用与网络相关的行为。
Description
技术领域
本发明属于程序分析与测试领域,具体涉及一种Android应用网络相关行为测试方法。
背景技术
Android系统由于其开放性和通用性,已成为目前最流行的嵌入式操作系统,相应的Android应用数量也随之爆发。而随着移动网络和无线网络的飞速发展,越来越多的Android应用都需要连接网络,主要有两个目的:一、使用网络功能与应用自身服务器进行交互;二、访问、下载、上传互联网资源。如果不联网,应用无法更新数据,用户之间也无法进行交流和资源共享。然而,由于网络的多样性(例如2G/3G/4G/5G,WIFI)和不稳定性,应用经常由于网络的问题而崩溃,影响了应用的正常使用。一项研究报告指出,20%的应用崩溃是由于网络调用造成的,其中主要原因是应用未正确的处理网络调用返回的未期望数据(脏数据)或空数据。因此,测试人员应重视应用网络调用及其相关行为的测试。
目前,Android应用与网络相关的行为测试的难度体现在两个方面:其一,网络环境太复杂。一方面,目前手机上可使用的网络类型有多种,主要有2G/3G/4G/5G、WIFI,而且在这几种网络类型中还可进行自由的切换;另一方面,网络环境具有不稳定性,例如,弱网和无网环境。如此复杂的外部网络环境很难进行模拟。其二,Android应用网络功能的实现具有多样性,这主要体现在Android应用开发中存在多种网络调用API和网络框架供开发者选择,不同的网络功能可能使用不同的实现方式,这无形中增加了网络行为测试的难度。
尽管有很多研究工作提出了针对Android应用的测试方法,但它们大多是用于测试应用的GUI,很少有专门用于测试与网络相关的行为的方法。当使用这些GUI测试方法来测试应用时,很多的网络相关的行为都无法有效和高效地探索。经调研发现,大部分开发者通过手动方式来对网络相关行为进行测试,或者借助于一些硬/软件模拟器来模拟不同的网络环境和网络异常(例如,增加网络延迟,限制网络带宽),以检查应用在这些情况下是否出现错误。尽管这种做法可能会发现一些与网络相关的错误,但是代价昂贵且耗时。
发明内容
本发明的目的在于提供一种Android应用网络相关行为测试方法,用于高效、全面地测试Android应用与网络相关的行为。
实现本发明目的的技术解决方案为:一种Android应用网络相关行为测试方法,以Android应用的apk文件为输入,以测试出的与网络相关的错误作为输出,具体步骤如下:
步骤1,使用soot将待测Android应用的apk文件转换为jimple文件,基于jimple文件得到Android应用代码中网络APIs的调用位置;
步骤2,对待测Android应用进行代码插桩,自动截取网络响应数据并根据模拟规则生成模拟数据,最后注入到网络响应中,得到插桩后的apk文件;
步骤3,使用基于组件分类的广度优先探索算法自动化运行插桩后的Android应用,应用自动运行过程中触发网络请求,并执行插桩代码来验证应用是否能正确处理不同的响应数据,输出测试结果。
本发明与现有技术相比,其显著优点:(1)本发明不需模拟各种网络环境,直接基于模糊测试思想,将网络环境对应用造成的影响(异常网络返回数据)注入到Android应用中,方法简单实用;(2)测试过程自动化,能全面高效地测试应用网络相关行为。
附图说明
图1是本发明提供的Android应用网络相关行为测试方法的流程图。
图2是常用的Android网络APIs示例图。
图3是jimple形式的Android网络APIs使用代码示例图。
图4是解析到的网络数据示例图。
图5是模拟的网络数据示例图。
图6是Wikipedia应用主界面组件分类示例图。
图7是记录的应用崩溃日志示例图。
具体实施方式
本发明公开了一种高效的Android应用网络相关行为测试方法,以Android应用的apk文件为输入,以测试出的应用与网络相关的错误作为输出。其整体流程如图1所示,具体方法如下:
步骤1,使用soot将待测Android应用的apk文件转换为jimple文件,基于jimple文件来得到Android应用代码中网络APIs的调用位置,具体步骤如下:
步骤1-1,使用soot来解析apk文件,并转换为jimple文件;
步骤1-2,遍历所有jimple文件,搜索所有存在网络APIs调用的语句,记录下每条调用语句的所在的类和方法;
步骤2,对待测Android应用进行代码插桩,实现自动截取网络响应数据并根据模拟规则生成模拟数据,最后注入到网络响应中的功能,得到插桩后的apk文件,具体步骤如下:
步骤2-1,使用soot提供的代码插桩功能,在所有的网络APIs调用语句的代码位置处,插桩逻辑代码来实现获取到网络响应对象并进行解析,得到网络数据的功能;
步骤2-2,根据制定的模拟规则,插桩逻辑代码来实现对网络数据和网络状态码进行类型模拟的功能,最终生成几组模拟数据。具体模拟规则包括:
(1)NULL:原始数据替换为null,来测试Android应用是否能正确处理响应数据为null的情况;
(2)EMPTY:原始数据替换为空值(长度为0),来测试Android应用是否能正确处理响应数据长度为0的情况;
(3)DEL:针对key-value形式(json、xml)的原始数据,随机删除部分字段,来测试Android应用是否能正确处理数据格式错误的情况;
(4)VALUE_NULL:针对key-value形式(json、xml)的原始数据,将value值设为null,来测试Android应用是否能正确处理响应数据字段值为null的情况;
(5)VALUE_BOUND:原始数据中基本数据类型(Integer,Float和Long)的数据设置为对应的边界值,来测试Android应用是否能正确处理边界值的情况;
(6)VALUE_RAND:原始数据设置为相同长度相同类型的随机值,来测试Android应用是否能正确处理相同类型的不同数据的情况;
(7)CODE404:设置响应状态码为404,并设置相应的客户端错误信息,来测试Android应用是否能正确处理状态码为404的情况;
(8)CODE503:设置响应状态码为503,并设置相应的服务端错误信息,来测试Android应用是否能正确处理状态码为503的情况;
步骤2-3,插桩逻辑代码来实现将模拟数据注入到原网络响应中的功能;
步骤2-4:重新打包生成插桩后的apk文件;
步骤3,使用基于组件分类的广度优先探索算法来自动化的探索插桩后的Android应用,应用自动运行过程中会触发网络请求,并执行插桩代码来验证应用是否能正确处理不同的响应数据,输出测试结果。具体步骤如下:
步骤3-1,使用ADB命令将插桩后的Android应用安装到模拟器;
步骤3-2,在自动化测试框架Robotium下,启动应用,并使用基于组件分类的广度优先探索算法来自动化的探索应用;算法步骤如下:
(1)创建两个队列OA和EA,OA记录新发现的活动,EA记录被遍历过的活动,并将主活动添加到OA中;所述活动为Android应用界面;
(2)从OA中取出一个活动A,如果EA中包含A,进行(3),否则打开活动A,根据组件分类策略对A上所有组件进行分类和遍历点击,遍历过程中打开的新活动添加到OA中,遍历结束将活动A添加到EA中;组件分类策略主要将每个活动的所有组件分为以下四类:
Pop-up组件:点击该组件,能打开一个新的窗口;根据点击组件前后是否打开新窗口划分,打开即为Pop-up组件;对应的遍历方法是反复触发弹窗来遍历弹窗上的所有的新组件;
tab bar组件:存在多个tab组件,每个tab组件对应一个界面布局;根据组件类名划分,组件类名为TabWidget的是tab bar组件;对应的遍历方式是在每个tab组件点击后,重新遍历一次当前界面的组件;
view group组件:包含多个子组件;根据组件属性划分,组件属性ItemCount大于1的为view group组件;
normal组件:除去上述三种组件,剩余均为normal组件,遍历点击;
(3)如果OA不为空,返回(2);否则,探索结束;
步骤3-3,当应用探索过程中出现崩溃,记录下崩溃日志,并回到步骤3-2,重启应用,继续探索。当应用探索结束,输出所有的崩溃日志。
下面结合实施例和附图对本发明进行详细说明。
实施例
本发明为一种Android应用网络相关行为测试方法,基于模糊测试思想,通过向应用插桩模拟的网络数据,来测试应用网络相关的行为是否出现错误。具体测试流程如图1所示:首先,对待测apk文件进行静态分析,来定位Android应用中网络APIs调用的位置;之后,在定位到的网络APIs调用位置处,对待测Android应用进行代码插桩,来向网络响应注入模拟的网络数据;最后,自动化的运行插桩后的Android应用,应用自动运行过程中会触发网络请求,并执行插桩代码来验证应用是否能正确处理不同的响应数据。
结合实例,该方法具体包括:
步骤1,对于待测的Android应用,获取代码中网络APIs的调用位置,具体步骤如下:
步骤1-1,使用soot将Android应用的apk文件转换为jimple文件;
步骤1-2,遍历所有jimple文件,搜索所有存在网络APIs调用的语句,其中网络APIs的种类如图2所示。在图3中第67行调用了其中一种网络API,则记录下这条调用语句所在的方法名和类名。搜索完成后,将得到应用代码中所有的网络APIs的调用位置;
步骤2,在所有的网络APIs调用语句的代码位置处,对待测Android应用进行代码插桩,具体步骤如下:
步骤2-1,插桩逻辑代码来实现获取到网络响应对象并进行解析,得到网络数据的功能;
步骤2-2,根据制定的模拟规则和解析到的网络数据,生成几组模拟数据;当解析到的一条网络数据如图4所示时,根据模拟规则生成的模拟数据如图5所示;
步骤2-3,插桩逻辑代码来实现将模拟数据注入到原网络响应中的功能;
步骤2-4:重新打包生成插桩后的apk文件;
步骤3,使用基于组件分类的广度优先探索算法来自动化的探索插桩后的Android应用,来触发应用的网络请求并验证应用是否能正确处理不同的响应数据,输出测试结果,具体步骤如下:
步骤3-1,使用ADB命令adb install xxx.apk将插桩后的Android应用安装到模拟器;
步骤3-2,在自动化测试框架Robotium下,启动应用,并使用基于组件分类的广度优先探索算法来自动化的探索应用。如图6所示,组件分类策略主要将Wikipedia应用主界面组件分为四类:标签“1”为Pop-up组件,标签“2”为tab bar组件,标签“3”为view group组件,标签“4”为normal组件;
步骤3-3,当应用探索过程中出现崩溃,记录下崩溃日志,如图7所示。并回到步骤3-2,重启应用,继续探索。当应用探索结束,输出所有的崩溃日志。
Claims (5)
1.一种Android应用网络相关行为测试方法,以Android应用的apk文件为输入,以测试出的与网络相关的错误为输出结果,其特征在于,具体步骤如下:
步骤1,使用soot将待测Android应用的apk文件转换为jimple文件,基于jimple文件得到Android应用代码中网络APIs的调用位置;
步骤2,对待测Android应用进行代码插桩,自动截取网络响应数据并根据模拟规则生成模拟数据,最后注入到网络响应中,得到插桩后的apk文件;
步骤3,使用基于组件分类的广度优先探索算法自动化运行插桩后的Android应用,应用自动运行过程中触发网络请求,并执行插桩代码来验证应用是否能正确处理不同的响应数据,输出测试结果。
2.根据权利要求1所述的Android应用网络相关行为测试方法,其特征在于:步骤1中所述使用soot将待测Android应用的apk文件转换为jimple文件,基于jimple文件来得到Android应用代码中网络APIs的调用位置,具体步骤如下:
步骤1-1,使用soot来解析apk文件,并转换为jimple文件,得到的jimple文件是Android应用源码的中间表示形式;
步骤1-2,遍历所有jimple文件,搜索所有存在网络APIs调用的语句,记录下每条调用语句的代码位置。
3.根据权利要求1所述的Android应用网络相关行为测试方法,其特征在于,步骤2中所述对待测Android应用进行代码插桩,实现自动截取网络响应数据并根据模拟规则生成模拟数据,最后注入到网络响应中的功能,得到插桩后的apk文件,具体包括以下步骤:
步骤2-1,使用soot提供的代码插桩功能,在所有的网络APIs调用语句的代码位置处,插桩逻辑代码获取到网络响应对象并进行解析,得到网络数据;
步骤2-2,根据制定的模拟规则,插桩逻辑代码对网络数据和网络状态码进行类型模拟,最终生成几组模拟数据;具体模拟规则包括:
(1)NULL:原始数据替换为null,来测试Android应用是否能正确处理响应数据为null的情况;
(2)EMPTY:原始数据替换为空值,来测试Android应用是否能正确处理响应数据长度为0的情况;
(3)DEL:针对key-value形式的原始数据,随机删除部分字段,来测试Android应用是否能正确处理数据格式错误的情况,所述key-value形式包括json、xml;
(4)VALUE_NULL:针对key-value形式的原始数据,将value值设为null,来测试Android应用是否能正确处理响应数据字段值为null的情况;
(5)VALUE_BOUND:原始数据中基本数据类型的数据设置为对应的边界值,来测试Android应用是否能正确处理边界值的情况;
(6)VALUE_RAND:原始数据设置为相同长度相同类型的随机值,来测试Android应用是否能正确处理相同类型的不同数据的情况;
(7)CODE404:设置响应状态码为404,并设置相应的客户端错误信息,来测试Android应用是否能正确处理状态码为404的情况;
(8)CODE503:设置响应状态码为503,并设置相应的服务端错误信息,来测试Android应用是否能正确处理状态码为503的情况;
步骤2-3,插桩逻辑代码将模拟数据注入到原网络响应中;
步骤2-4:重新打包生成插桩后的apk文件。
4.根据权利要求1所述的Android应用网络相关行为测试方法,其特征在于:步骤3中所述使用基于组件分类的广度优先探索算法来自动化的探索插桩后的Android应用,应用自动运行过程中会触发网络请求,并执行插桩代码来验证应用是否能正确处理不同的响应数据,输出测试结果,具体步骤如下:
步骤3-1,使用ADB命令将插桩后的Android应用安装到模拟器;
步骤3-2,在自动化测试框架Robotium下,启动应用,并使用基于组件分类的广度优先探索算法来遍历应用的所有界面和界面上的所有组件,算法步骤如下:
(1)创建两个队列OA和EA,OA记录新发现的活动,EA记录被遍历过的活动,并将主活动添加到OA中;所述活动为Android应用界面;
(2)从OA中取出一个活动A,如果EA中包含A,执行步骤(3),否则打开活动A,根据组件分类策略对A上所有组件进行分类和遍历点击,遍历过程中打开的新活动添加到OA中,遍历结束将活动A添加到EA中;组件分类策略主要将每个活动的所有组件分为以下四类:
Pop-up组件:点击该组件,能打开一个新的窗口;对应的遍历方法是反复触发弹窗来遍历弹窗上的所有的新组件;
tab bar组件:存在多个tab组件,每个tab组件对应一个界面布局;对应的遍历方式是在每个tab组件点击后,重新遍历一次当前界面的组件;
view group组件:包含多个子组件;
normal组件:除去上述三种组件,剩余均为normal组件,遍历点击;
(3)如果OA不为空,返回步骤(2);否则,探索结束;
步骤3-3,当应用探索过程中出现崩溃,记录下崩溃日志,并回到步骤3-2,继续探索;当应用探索结束,输出所有的崩溃日志。
5.根据权利要求4所述的Android应用网络相关行为测试方法,其特征在于:所述viewgroup组件包含多个子组件,子组件也是view group组件,包含其他子组件。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201911268850.9A CN111176981B (zh) | 2019-12-11 | 2019-12-11 | Android应用网络相关行为测试方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201911268850.9A CN111176981B (zh) | 2019-12-11 | 2019-12-11 | Android应用网络相关行为测试方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN111176981A true CN111176981A (zh) | 2020-05-19 |
CN111176981B CN111176981B (zh) | 2022-10-21 |
Family
ID=70657201
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201911268850.9A Active CN111176981B (zh) | 2019-12-11 | 2019-12-11 | Android应用网络相关行为测试方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN111176981B (zh) |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112698881A (zh) * | 2020-12-26 | 2021-04-23 | 南京理工大学 | Android图片加载行为缺陷动态检测方法 |
CN113127345A (zh) * | 2021-04-06 | 2021-07-16 | 北京字跳网络技术有限公司 | 应用测试方法、装置、电子设备及存储介质 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104834859A (zh) * | 2015-04-24 | 2015-08-12 | 南京邮电大学 | 一种Android应用中恶意行为的动态检测方法 |
CN105451258A (zh) * | 2014-09-26 | 2016-03-30 | 优视科技有限公司 | 一种测试处理方法及装置 |
CN109582556A (zh) * | 2017-09-29 | 2019-04-05 | 阿里巴巴集团控股有限公司 | 一种应用程序在移动终端运行情况的测试方法、装置和系统 |
-
2019
- 2019-12-11 CN CN201911268850.9A patent/CN111176981B/zh active Active
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105451258A (zh) * | 2014-09-26 | 2016-03-30 | 优视科技有限公司 | 一种测试处理方法及装置 |
CN104834859A (zh) * | 2015-04-24 | 2015-08-12 | 南京邮电大学 | 一种Android应用中恶意行为的动态检测方法 |
CN109582556A (zh) * | 2017-09-29 | 2019-04-05 | 阿里巴巴集团控股有限公司 | 一种应用程序在移动终端运行情况的测试方法、装置和系统 |
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112698881A (zh) * | 2020-12-26 | 2021-04-23 | 南京理工大学 | Android图片加载行为缺陷动态检测方法 |
CN112698881B (zh) * | 2020-12-26 | 2022-09-06 | 南京理工大学 | Android图片加载行为缺陷动态检测方法 |
CN113127345A (zh) * | 2021-04-06 | 2021-07-16 | 北京字跳网络技术有限公司 | 应用测试方法、装置、电子设备及存储介质 |
CN113127345B (zh) * | 2021-04-06 | 2023-07-14 | 北京字跳网络技术有限公司 | 应用测试方法、装置、电子设备及存储介质 |
Also Published As
Publication number | Publication date |
---|---|
CN111176981B (zh) | 2022-10-21 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US10684940B1 (en) | Microservice failure modeling and testing | |
Xie et al. | Using a pilot study to derive a GUI model for automated testing | |
Yuan et al. | Generating event sequence-based test cases using GUI runtime state feedback | |
CN105094783B (zh) | 安卓应用稳定性测试的方法及装置 | |
Marchetto et al. | State-based testing of Ajax web applications | |
CN102402481B (zh) | 异步程序代码的模糊测试 | |
US9535823B2 (en) | Method and apparatus for detecting software bugs | |
US9098635B2 (en) | Method and system for testing and analyzing user interfaces | |
Marchetto et al. | Reajax: a reverse engineering tool for ajax web applications | |
Amalfitano et al. | Rich internet application testing using execution trace data | |
CN105740144B (zh) | 一种Android移动终端的自动化测试方法及系统 | |
Marchetto et al. | A case study-based comparison of web testing techniques applied to AJAX web applications | |
US10509719B2 (en) | Automatic regression identification | |
Mariani et al. | Automatic testing of GUI‐based applications | |
KR101565840B1 (ko) | 서버에 자동화 테스트를 제공하는 방법 및 시스템 | |
CN111176981B (zh) | Android应用网络相关行为测试方法 | |
CN107015841B (zh) | 一种程序编译的预处理方法及程序编译设备 | |
US11436133B2 (en) | Comparable user interface object identifications | |
Panigrahi et al. | An approach to prioritize the regression test cases of object-oriented programs | |
US20180232299A1 (en) | Composing future tests | |
Azim et al. | Dynamic slicing for android | |
Li et al. | ADAutomation: An activity diagram based automated GUI testing framework for smartphone applications | |
Zhou et al. | Automated model-based performance testing for PaaS cloud services | |
DeMott | The evolving art of fuzzing | |
Bae et al. | On the relative strengths of model-based and dynamic event extraction-based GUI testing techniques: An empirical study |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |