实验四—分析与测试实验

【Back】


实验对象


静态分析以及单元测试的对象为开源App的源码,这里是要求为实验三开发后的源码的分析,以及单元测试的编写需要覆盖更新后的功能,但是Appium测试脚本的编写主要针对的实验对象是:原始的开源Apk


实验⽬的


本次实验主要是为了掌握基本的程序分析方法和测试方法。从静态分析、⽩盒测试、⿊盒测试三个⽅面出发,将实验设置为以下三个部分:

实验所需⼯工具


  1. Android Studio
  2. Appium

实验评分标准


  1. 完成实验所需工具的安装使用,可得基础分 30 分。
  2. 完成静态分析,并报告当前代码存在问题,可得10分。如果对所报告问题进⾏改进可适当可额外加 20分。
  3. 针对移动应用的某些模块编写单元测试用例(所测试方法不能重复),至少 2个,可得 5 分,普通模式下运行单元测试模块的测试用例,覆盖度模式下(RunWithCoverage)运行单元测试模块的测试用例,可运行自己写的单元测试用例,也可以运行原app自带的单元测试用例,不少于10个,可得15分。
  4. 针对app的某些功能场景编写GUI测试测试脚本(所测试功能不能重复),至少 5 个,可得45分。

实验工具的安装说明


Appium的安装(推荐安装Appium客户端)

https://github.com/appium/appium-desktop/releases/tag/v1.21.0-1下载1.21或以下的客户端即可,注意一定要1.21版本以下! 下⾯以Windows为例讲解Appium的配置及使用⽅法,Mac的Appium的配置与使用方法见《Appium自动化测试框架的配置安装与使用》 下载完成后双击运行Appium,启动页面如下:

image-20210915232347601

点击Edit Configurations按钮进行相应环境变量配置,主要是Android SDK路径及Java路径。

Android SDK的位置一般在:C:\Users\xxxxx\AppData\Local\Android\Sdk

Java路径为Java的安装路径:下图仅供参考

image-20210915233014850

完成路路径配置后,点击save and restart按钮重启appium。再次在重启⻚页⾯面,点击start server 即可启动appium。

image-20210915233040413

可以看到,当前appium的监听端⼝口为0.0.0.0:4723。此时appium已经成功启动。

本次使⽤用GUI测试脚本使⽤用Python3编写,Python环境配置过程如下:

Python下载地址:https://www.python.org/downloads/请勿下载python2.7版本! 下载完成安装后配置相应环境变量量即可。

对于Mac⽤用户,推荐使⽤用brew进⾏安装可避免与系统已有python版本冲突。

完成python环境配置后,使⽤用pip命令进⾏行行appium依赖添加,pip命令如下:

如果发现⽆无法使用pip,请先进⾏行行pip的安装,安装⽅方法如下:

参考⽹网址:https://pip.pypa.io/en/stable/installing/

⾸先下载get-pip.py⽂文件,下载方式如下:

下载完成后,在get-pip.py⽂文件所在⽬目录下,运⾏如下命令安装pip:

完成pip安装后重新执⾏行行appium依赖安装命令即可。

静态分析

Android Studio已经集成静态分析工具Lint。只需点击Analyze->Inspect Code即可。

image-20210922161656947

在配置⻚面,你可以根据⾃己的需求更改配置,选择分析整个文件还是某一模块。当然你也可以直接点击ok进⾏行行代码分析。

image-20210922161742901

运行完成后,分析结果报告如下:

image-20210922161818162

报告结果中基本项的含义:

Correctness :不够完美的编码,⽐如硬编码、使⽤用过时 API 等

Performance: 对性能有影响的编码,⽐如:静态引用,循环引用等

Internationalization: 国际化,直接使⽤用汉字,没有使⽤资源引用等

Security: 不安全的编码,比如在 WebView 中允许使⽤JavaScriptInterface 等

Usability: 可用的,有更好的替换的,比如排版、图标格式建议.png格式 等

Accessibility: 辅助选项,⽐如ImageView的contentDescription,往往建议在属性中定义等

你可以从该报告结果中看到程序代码中存在的缺陷,及相应的推荐改进⽅方案。据此,你可以对程序代码进⾏行行完善。

如果你想了解更更多关于Lint的知识,可以参考:https://developer.android.com/studio/write/lint

Android单元测试

单元测试用例:

运⾏测试,在Android Studio中可以看到测试通过:

image-20210922162334276

如果将上述代码改为Assert.assertEquals(result, 4);,则测试失败:

image-20210922162359181

GUI测试

1. 界⾯控件信息获取方法

Appium提供了获取当前⻚面中控件信息的功能。 ⾸先按上述Appium启动步骤,启动Appium。然后点击下图红框中按钮。

image-20210922162535605

在配置界⾯,填写配置信息,即填写Desired Capabilites:

image-20210922162607004

基本Desired Capabilites配置如下:

填写好相应配置后,点击start session即可,查看应⽤当前页⾯控件信息。

image-20210922163631743

在左侧点击相应控件即可在右侧看到该控件的相应信息。

如果进入新的⻚面,只需点击上图红框中按钮即可刷新⻚面进而获得新的⻚面的控件信息。

2.测试脚本编写

以下给出⼀个简单的测试脚本:

完成测试脚本的编写后,启动appium,再执行测试脚本即可对应用进⾏测试。 编写时需要严格按照《规范文档》,不然会影响实验五!

实验报告提交说明

1. 任务一、安装、熟悉并使⽤实验所需⼯工具

a. 报告中请提交⾄少一张使用Appium获取控件信息功能获取应用⻚⾯控件的使用截图。图⽚类似下图:

image-20210922164403071

b. 至少3张Appium其他功能探索的截图。

注意:

截图中应⽤必须是你⾃⼰所分配的APP

2. 任务二、静态分析

以表格形式提交静态分析结果,表格格式类似下表:

类别数目
Correctness2
Bug2

如果你对静态分析结果进⾏了改进,请列出你所改进前后代码。如果更改代码较多,列出部分即可( 3 条以上,附加得分)。

3. 任务三、单元测试

以表格形式列出你所编写单元测试基本信息,表格格式类似下表(所测试方法(需要至少包含可以覆盖实验三更新的方法)不得少于10个,特殊情况向助教反映):

所测试方法所测试⽅法功能描述测试⽤例数⽬Pass测试用例数⽬Fail测试用例数⽬测试覆盖度
MainActivity.onCreate()加法32110%

至少提交一张Pass测试⽤例的运⾏结果截图及一张Fail测试⽤例的运⾏结果截图。

4. 任务四、GUI测试

以表格形式列出你所编写测试脚本基本信息,表格格式类似下表(功能场景测试不得少于5个,需要覆盖实验三更新的功能,要求:在原始的Apk上可以运行,但是在更新后的Apk上无法运行,例如原始Apk的重命名功能,我的测试脚本可以测试原始Apk的这个功能,但是我的测试脚本不能测试更新了重命名功能之后的App)测试脚本需要按照《规范文档》进行编写,不然会影响实验5:

测试场景测试该场景的测试⽤例数目测试该场景的测试用例代码⾏行数
文件浏览功能230
文件删除  
文件重命名  
设置  

提交测试脚本(.py)文件。

5. 实验提交

实验提交示例:实验报告与测试脚本
实验截止时间:2021年12月5日23:59

image-20211128201228785