CN104834600B - 一种测试Android应用控件的方法 - Google Patents
一种测试Android应用控件的方法 Download PDFInfo
- Publication number
- CN104834600B CN104834600B CN201510209813.6A CN201510209813A CN104834600B CN 104834600 B CN104834600 B CN 104834600B CN 201510209813 A CN201510209813 A CN 201510209813A CN 104834600 B CN104834600 B CN 104834600B
- Authority
- CN
- China
- Prior art keywords
- control
- test
- file
- testing
- judged
- 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.)
- Active
Links
Landscapes
- Debugging And Monitoring (AREA)
- Test And Diagnosis Of Digital Computers (AREA)
Abstract
本发明公开了一种测试Android应用控件的方法,以使开发人员便于编写对于控件的测试用例,提升整个开发时间和测试水平。本发明通过分析配置文件,找出所有控件的名称、ID等等信息,通过对不同的控件赋予不同的测试权重以平衡测试的速度和覆盖率。通过python语言将不同的需要测试的控件从模板转换为测试代码,最后再导入工程进行单元测试。该方法帮助了传统的Android应用测试人员,减轻了他们的工作负担,大大提高了工作效率。
Description
技术领域
本发明涉及一种自动测试Android应用控件的方法,属于软件应用测试技术领域。
背景技术
Android一词的本义指“机器人”,同时也是Google于2007年11月5日宣布的基于Linux平台的开源手机操作***的名称,该平台由操作***、中间件、用户界面和应用软件组成。
Android应用的发展相当迅速。截止2014年七月,在Google Play上已经有超过130万个可下载应用,并有着远超500亿次的下载量。Android***的普及和应用如此突飞猛进的发展,由于Android应用发布周期短,无法得到充分的测试,造成了Android软件的质量普遍不高。因此,对Android应用的自动化分析和测试技术变得越来越重要。
Android应用的控件是Android***及软件的重要组成部分,他是应用和用户之间交互的接口。控件的稳定性和可靠性是把握用户的感受的关键。各个控件的显示效果以及他们之间的交互关系也是程序员最需要关注的内容之一。
Activity单元测试是快速检查Activity的状态和它与其他组件的交互的绝佳方法,这也是在与***其余部分隔绝的环境下进行的。单元测试通常测试尽可能小的代码单元,可能是一个方法,类,或者一个控件,它不依赖于***或网络资源。所以,单元测试不适合用来测试与***有复杂的UI交互事件的代码。
目前,Google提供了一个Android测试框架,它是Android开发环境的一个重要部分,可以用来测试应用的各个方面,从单元测试到框架测试。它是基于JUNIT3,可以使用普通的junit而不用调用Android测试api来进行测试。它的junit扩展提供了针对组件的测试用例类,这些类提供了mock对象和方法的辅助方法,进而控制组件生命周期。它的测试用例类包含在类似主程序包的测试包中,无需学习其他的技术和工具。并且,该框架有用于自动构建和运行测试的sdk,可以在eclipse adt中使用,其他ide中可以使用命令完成。它们可以读取源项目的信息自动完成测试类的创建。但是,创建测试类并不能直接对项目进行测试,还是需要测试人员一条一条人工编写测试用例,这也是一个非常乏味和痛苦的过程。
JUNIT框架还提供了自动事件流模拟工具monkeyrunner和monkey。这可以用来进行ui测试,可以向设备发送事件流(键盘、touch、手势)对程序进行压力测试,其中monkeyrunner需要编写Python程序调用api发送事件流,monkey通过adb的命令行发送。Monkeyrunner和monkey虽然在一定程度上可以自动进行模拟操作,但是也需要人工进行事先的设计,而且编写Python程序也是一件费时费力的事情,需要测试人员对这种脚本语言非常熟悉。这两种工具最大的局限性是只能对程序进行压力测试,即使用指定或随机的顺序操作设备,并不能对程序以及内部控件进行有效性、健壮性测试。
Python,是一种面向对象、解释型计算机程序设计语言,由Guido van Rossum于1989年底发明。Python语法简洁而清晰,具有丰富和强大的类库。常被昵称为胶水语言,它能够把其他语言制作的各种模块很轻松地联结在一起。常见的一种应用情形是,使用Python快速生成程序的原型,然后对其中有特别要求的部分,用更适合的语言改写,比如一些对性能要求特别高的部分使用C++重写。
发明内容
为了对需要测试的控件进行有强度的测试,并使开发人员便于编写对于控件的测试用例,缩减整个开发时间和提升测试水平,本发明提供了一种测试Android应用控件的方法,其主要原理是,分析应用的控件及控件之间的关系,根据用户剖面,基于不同的控件的使用频率不一样,为每一种控件设置权重,根据事先指定好的权重,给予每一个控件不同的测试样本,最后根据测试样本使用脚本自动化生成单元测试用例。
本发明方法具体包括如下步骤:
步骤1)扫描并分析activity_main.xml文件,筛选出测试需要的element的属性,并将该属性的名称与值写入文件,继续扫描直到document的结尾;
步骤2)给应用的各个控件添加测试权重:读取步骤1)生成的文件的一行的第一个关键词,根据控件预先设置的使用频率等级在该行的末尾添加权重值;
步骤3)给每一个控件生成单元测试用例代码:读取步骤2)生成的文件,将一行中的所有关键词作为参数传递给单元测试用例代码生成函数,根据权重值指定测试次数,使用预先设置的不同的变量来产生单元测试用例;
步骤4)将步骤3)生成的文件添加进测试工程中。
进一步,步骤1)的流程具体为:
步骤1.1)逐行扫描activity_main.xml文件;
步骤1.2)判断当前element是否为需要检测的控件element;
步骤1.2.1)判断为是,将该element的名称写入文件,继续扫描里面的内容;
步骤1.2.2)判断为否,直接跳转到所述element的结尾,扫描下一个element;
步骤1.3)扫描所述element的属性,判断当前属性是不是测试需要的属性;
步骤1.3.1)判断为是,将该属性的名称与值写入文件,继续扫描下一行并判断下一行是不是所述element的结尾;
步骤1.3.2)判断为否,继续扫描下一行并判断下一行是不是所述element的结尾;
步骤1.4)如果已经扫描到所述element的结尾,在文件中***一个换行符;
步骤1.5)判断是否已经到了document的结尾;
步骤1.5.1)判断为是,进行下一步测试工作;
步骤1.5.2)判断为否,跳转到步骤1.1),继续分析。
进一步,步骤2)中添加测试权重的具体步骤为:
步骤2.1)逐行扫描步骤1)生成的文件;
步骤2.1.1)如果该行控件名称为常用控件,在末尾添加1;
步骤2.1.2)如果该行控件名称为次常用控件,在末尾添加2;
步骤2.1.3)如果该行控件名称为不常用控件,在末尾添加3。
进一步,步骤3)中,单元测试用例代码生成函数根据不同的控件生成不同的测试用例代码;如果控件的权重为1或2或3,则函数会使用不同的变量生成3或2或1个对于同一个控件进行测试的测试用例代码,并将代码保存于以该应用名称命名的预先设置的模板class文件中。
本发明方法分析配置文件,找出所有控件的名称、ID等等信息,通过对不同的控件赋予不同的测试权重以平衡测试的速度和覆盖率,通过python语言将不同的需要测试的控件从模板转换为测试代码,最后再导入工程进行单元测试。对比现有技术,本发明使用语义分析的方法,将工程的配置文件中所有我们关心的控件的信息都保存下来,抽取控件信息迅速,准确;在生成测试用例代码之前,考虑用户剖面,在生成测试用例之前就制定好各个控件的使用频率,在频率高的控件上多增加测试用例数量,在使用频率低的控件上降低测试用例数量,以达到测试时间和测试能力的平衡;使用函数以及脚本将所获得的信息全部转换为我们需要的测试用例代码;本发明方法能够省去程序员手动编写测试用例所的大量时间和精力,尤其是在程序需要进行单元测试的情况下。该方法帮助了传统的Android应用测试人员,减轻了他们的工作负担,大大提高了工作效率。
附图说明
图1是获取工程的控件列表的流程图。
图2是给每一个控件添加权重的流程图。
图3是生成单元测试用例代码的过程图。
具体实施方式
下面结合附图和实施例对本发明作进一步详细说明。
本发明是一种基于Android软件单元测试框架的自动化测试方法,通过分析程序员已经写好的程序,分析其页面的控件元素。利用控件之间关系及使用频率制定测试用例,并由程序自动生成测试代码,终而实现自动化测试。本实施例的实现步骤具体为:
步骤1)获取这个工程的控件列表,如图1所示:
步骤1.1)读取activity_main.xml文件的下一行文本;
步骤1.2)判断当前element是不是我们关心的控件element;
步骤1.2.1)判断为是,将该element的名称以新行写入输出文件,继续扫描里面的内容,进行1.3)步;
步骤1.2.2)判断为否,直接向后匹配到该element的结尾,扫描下一个element,进行1.1)步;
步骤1.3)扫描这个element的属性,判断当前属性是不是测试需要的属性;
步骤1.3.1)判断为是,将该属性的名称与值写入文件;
步骤1.3.2)判断该行有没有到该element的结尾,为是则转入1.4)步;
步骤1.3.3)判断为否,转入步骤1.1)继续读取下一行文本;
步骤1.4)如果已经扫描到一个element的结尾,在输出文件中***一个换行符;
步骤1.5)判断是否已经到了这个document的结尾,判断为否,则转入步骤1.1;
步骤1.5.1)判断为是,则结束扫描,保存输出文件。
步骤2)给每一个控件添加测试权重,如图2所示;
步骤2.1)读入步骤1)所生成的文本文件;
步骤2.1.1)读取该文件一行的第一个关键词;
步骤2.1.2)判断该关键词的元素所指代的控件是不是常用控件;
步骤2.2)根据控件在事先制定好的使用频率等级在该行最后添加权重值;
步骤2.3)读取该文件的下一行,以此循环直到文件最后一行;
步骤3)根据步骤2)获得的文件依次生成测试用例代码,如图3所示;
步骤3.1)读取步骤2)生成的文本文件;
步骤3.2)将一行中的所有关键词作为参数传递给事先用python编写好的脚本函数里;
步骤3.2.1)该函数读入控件的名称、id、等等参数以及权重;
步骤3.2.2)以控件名称来制定调用事先编写好的测试用例模板;
步骤3.2.3)生成一段给该控件测试的测试用例代码;
步骤3.2.4)根据权重指定测试次数,使用事先制定好的不同的变量来产生测试用例;
步骤3.3)以此循环,直到所有的控件都已经生成好了代码;
步骤3.4)所有控件都已经编写好后程序输出一个完整的测试用例类文件;
步骤4)对工程进行单元测试;
步骤4.1)使用eclipse打开需要测试的android工程;
步骤4.2)新建一个测试工程,按照单元测试的方法做好准备;
步骤4.3)将步骤3)生成的类文件导入测试工程;
步骤4.4)执行单元测试。
本发明不限于上述实施例,一切采用等同替换或等效替换形成的技术方案均属于本发明要求保护的范围。
Claims (1)
1.一种测试Android应用控件的方法,其特征在于,包括如下步骤:
步骤1)扫描并分析activity_main.xml文件,筛选出测试需要的element的属性,并将该属性的名称与值写入文件,继续扫描直到document的结尾,包括:
步骤1.1)逐行扫描activity_main.xml文件;
步骤1.2)判断当前element是否为需要检测的控件element;
步骤1.2.1)判断为是,将该element的名称写入文件,继续扫描里面的内容;
步骤1.2.2)判断为否,直接跳转到所述element的结尾,扫描下一个element;
步骤1.3)扫描所述element的属性,判断当前属性是不是测试需要的属性;
步骤1.3.1)判断为是,将该属性的名称与值写入文件,继续扫描下一行并判断下一行是不是所述element的结尾;
步骤1.3.2)判断为否,继续扫描下一行并判断下一行是不是所述element的结尾;
步骤1.4)如果已经扫描到所述element的结尾,在文件中***一个换行符;
步骤1.5)判断是否已经到了document的结尾;
步骤1.5.1)判断为是,进行下一步测试工作;
步骤1.5.2)判断为否,跳转到步骤1.1),继续分析;
步骤2)给应用的各个控件添加测试权重:读取步骤1)生成的文件的一行的第一个关键词,根据控件预先设置的使用频率等级在该行的末尾添加权重值,添加测试权重的具体步骤包括:
步骤2.1)逐行扫描步骤1)生成的文件;
步骤2.1.1)如果该行控件名称为常用控件,在末尾添加1;
步骤2.1.2)如果该行控件名称为次常用控件,在末尾添加2;
步骤2.1.3)如果该行控件名称为不常用控件,在末尾添加3;
步骤3)给每一个控件生成单元测试用例代码:读取步骤2)生成的文件,将一行中的所有关键词作为参数传递给单元测试用例代码生成函数,根据权重值指定测试次数,使用预先设置的不同的变量来产生单元测试用例,单元测试用例代码生成函数根据不同的控件生成不同的测试用例代码;如果控件的权重为1或2或3,则函数会使用不同的变量生成3或2或1个对于同一个控件进行测试的测试用例代码,并将代码保存于以应用名称命名的预先设置的模板文件中;
步骤4)将步骤3)生成的文件添加进测试工程中。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201510209813.6A CN104834600B (zh) | 2015-04-28 | 2015-04-28 | 一种测试Android应用控件的方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201510209813.6A CN104834600B (zh) | 2015-04-28 | 2015-04-28 | 一种测试Android应用控件的方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN104834600A CN104834600A (zh) | 2015-08-12 |
CN104834600B true CN104834600B (zh) | 2018-06-22 |
Family
ID=53812505
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201510209813.6A Active CN104834600B (zh) | 2015-04-28 | 2015-04-28 | 一种测试Android应用控件的方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN104834600B (zh) |
Families Citing this family (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105468529B (zh) * | 2015-12-15 | 2018-07-24 | 北京奇虎科技有限公司 | 一种安卓应用ui控件精准遍历方法和装置 |
CN107402877B (zh) * | 2016-05-19 | 2020-08-18 | 福建天晴数码有限公司 | 基于Android端的APP测试方法及*** |
CN108614769B (zh) * | 2018-03-19 | 2022-02-08 | 南京邮电大学盐城大数据研究院有限公司 | 一种面向Appium的Java测试代码质量评判方法 |
CN108470002B (zh) * | 2018-03-19 | 2022-05-03 | 南京邮电大学 | 一种面向Selenium IDE的XML测试脚本质量评判方法 |
CN108415843B (zh) * | 2018-03-21 | 2021-08-27 | 南京邮电大学盐城大数据研究院有限公司 | 一种面向Selenium Remote Control的Java测试代码质量评判方法 |
CN109117372A (zh) * | 2018-08-14 | 2019-01-01 | 平安壹钱包电子商务有限公司 | 测试代码生成方法、装置、计算机设备和存储介质 |
CN112256553A (zh) * | 2019-07-22 | 2021-01-22 | 百度(中国)有限公司 | 一种应用软件测试方法、装置及电子设备 |
CN111679977B (zh) * | 2020-05-29 | 2024-02-27 | 杭州趣链科技有限公司 | 一种基于Jest的React项目单元测试方法、设备及存储介质 |
CN112100080B (zh) * | 2020-11-03 | 2021-02-26 | 广州市玄武无线科技股份有限公司 | 控件测试方法、装置、终端设备和计算机可读存储介质 |
CN112463613B (zh) * | 2020-12-01 | 2023-09-15 | 广州朗国电子科技股份有限公司 | 一种基于adb的测试驱动***、方法及存储介质 |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101655817A (zh) * | 2009-09-24 | 2010-02-24 | 成都市华为赛门铁克科技有限公司 | 图形用户界面测试方法及测试装置 |
CN103049369A (zh) * | 2011-10-14 | 2013-04-17 | 阿里巴巴集团控股有限公司 | 一种自动化测试方法及*** |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
GB0625577D0 (en) * | 2006-12-21 | 2007-01-31 | Ibm | Method and system for graphical user interface testing |
-
2015
- 2015-04-28 CN CN201510209813.6A patent/CN104834600B/zh active Active
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101655817A (zh) * | 2009-09-24 | 2010-02-24 | 成都市华为赛门铁克科技有限公司 | 图形用户界面测试方法及测试装置 |
CN103049369A (zh) * | 2011-10-14 | 2013-04-17 | 阿里巴巴集团控股有限公司 | 一种自动化测试方法及*** |
Non-Patent Citations (1)
Title |
---|
一种改进的GUI测试框架DART;辛敏杰等;《计算机工程》;20090430;第35卷(第7期);第55-58页 * |
Also Published As
Publication number | Publication date |
---|---|
CN104834600A (zh) | 2015-08-12 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN104834600B (zh) | 一种测试Android应用控件的方法 | |
Linares-Vásquez et al. | Mining android app usages for generating actionable gui-based execution scenarios | |
Amalfitano et al. | A gui crawling-based technique for android mobile application testing | |
Sakti et al. | Instance generator and problem representation to improve object oriented code coverage | |
US7895575B2 (en) | Apparatus and method for generating test driver | |
CN101046767B (zh) | 用于自动测试基于图形的编程工具的方法和*** | |
US8903691B2 (en) | Linking graphical user interface testing tools and human performance modeling to enable usability assessment | |
CN105378658B (zh) | 自动源代码生成 | |
CN102667730A (zh) | 设计时调试 | |
Monier et al. | Evaluation of automated web testing tools | |
Briand | A critical analysis of empirical research in software testing | |
CN103425574A (zh) | 一种测试应用程序的方法及装置 | |
CN105389262A (zh) | 一种针对界面测试生成测试建议的方法和装置 | |
US7272753B2 (en) | Methods and apparatus for translating application tests for execution with simulation software tools | |
CN103455672B (zh) | 一种fpga仿真测试用例自动化回归方法 | |
Paiva et al. | Towards the integration of visual and formal models for GUI testing | |
Bünder et al. | A model-driven approach for behavior-driven GUI testing | |
CN104536880A (zh) | 基于符号执行的gui程序测试用例扩增方法 | |
Oliveira | pytest Quick Start Guide: Write better Python code with simple and maintainable tests | |
Lemieux | Mining temporal properties of data invariants | |
Xiao et al. | Advances on improving automation in developer testing | |
Bünder et al. | Towards behavior-driven graphical user interface testing | |
Ibrahim et al. | Finite State Machine-Model Based Testing on Website Application | |
Paulovsky et al. | High-coverage testing of navigation models in android applications | |
Marzoughi et al. | Modeling an e-government portal of tourism industry using two level factorial design |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
EXSB | Decision made by sipo to initiate substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |