预见·软件测试技术成长的工具Test

移动 App 测试

2016-01-07  本文已影响2743人  厲铆兄

移动APP测试讲义

本篇讲义主要阐述APP的手工测试要点,并概括介绍主流的APP测试框架。

1. APP测试的准备

在进行APP测试之前,需要准备下列步骤。通过以下网站可以查找。

移动观象台:http://mi.talkingdata.com/terminals.html

Snap1.jpg Snap2.jpg
Snap3.jpg
Snap4.jpg

1.1 确定APP的设备

选定被测试的设备终端。

1.2 确定APP的版本

确定被测试的APP的版本号和操作系统类型

1.3 确定操作系统

确定运行被测试设备的操作系统

1.4 准备表格记录APP的设备和版本

测试工作开始前,需要确定App需要测试的操作系统版本和设备列表

编号 OS OS Version 分类 Model 制造商 屏幕尺寸 分辨率
001 iOS 7.1 iPhone 5s Apple 4
002 iOS 8.1 iPhone 6s Apple 4.7
003 iOS 8.0.2 iPhone 6 Apple 4.7
004 iOS 8.1.2 iPhone 6 Plus Apple 5.5
005 iOS 8.0.2 iPad Air 2 Apple 9.7
006 iOS 8.1.2 iTouch 5 Apple 4
007 Android 5.1 Phone One XL HTC 4.7 1280*720
008 Android 4.5 Phone PRO 5 Meizu 5.7 1920*1080
009 Android 4.2 Phone Galaxy S6 Samsung
010 Android 4.4.2 Phone Galaxy S5 Samsung
011 Android 4.4.2 Phone MX 4 Meizu
012 Android 4.4.4 Phone Nexus 5 Google
013 Android 4.4.4 Phone Mi 4 Xiaomi
014 Android 4.2.2 Tablet Galaxy Tab3 Samsung

2. APP的基本测试

2.1 “移动”测试App

由于现在3G和4G网络都已经非常普及,需要优先测试App在这两种网络环境下的表现。同时需要测试4G信号无法覆盖的时候,App切换到3G、2G的环境下进行测试甚至到无网络的环境下测试。当网络恢复的时候,App是否会自动切换回来,并且执行网络断开前用户的操作。

一般可以选择在地铁、公交、电梯、隧道灯代表性的场所进行测试。

一般可以选择在地铁、公交、电梯、隧道灯代表性的场所进行测试。

测试APP在网络异常的情况下,是否发生 ANRCrash

2.2 App的多任务和意外情况处理

2.3 测试App的手势操作

2.4 测试App的用户体验

2.5 测试App的消息显示和通知显示*

通知显示的方式:

测试要点

2.6 测试App能否及时显示和同步数据

Web端 + PC端 + APP端

2.7 测试App能否响应不同的设备用户界面

测试App是否适应用户界面,必须使用真实设备进行测试。比如测试HTC Sense用户界面底部的黑色导航栏,测试小米MIUI系统桌面的角标提醒功能,测试iOS的角标提醒,测试魅族Flyme的SmartBar操作等。

2.8 测试App中高内存使用的功能

2.9 测试App的流量和电量消耗

2.10 测试App的增量升级

2.11 测试App支持的文件格式

2.12 安装卸载测试

2.13 应用召唤

3. 易测EasyTest

易测是一款基于无线客户端研发场景的通用测试工具, 它通过在研发人员的自持机上提供各种辅助能力&标准化的专项测试服务来提升研发质量&效率。

易测:http://mqc.aliyun.com/download.htm?spm=0.0.0.0.LKnIoR

Snap6.jpg

4. ADB命令与Monkey工具

4.1 ADB 命令

adb:

adb 的全称为Android Debug Bridge,就是起到调试桥的作用。通过adb我们可以在Eclipse中方面通过DDMS来调试Android程序,说白了就是debug工具。adb的工作方式比较特殊,采用监听Socket TCP 5554等端口的方式让IDE和Qemu通讯,默认情况下adb会daemon相关的网络端口,所以当我们运行Eclipse或Android Studio时adb进程就会自动运行。

借助adb工具,我们可以管理设备或手机模拟器的状态。还可以进行很多手机操作,如安装软件、系统升级、运行shell命令等等。其实简而言说,adb就是连接Android手机与PC端的桥梁,可以让用户在电脑上对手机进行全面的操作

adb 在sdk的platform-tools目录中

Android SDK 下载网站 http://www.androiddevtools.cn/(非官方)

ADB 是连接 Windows 命令行(也可以是Linux或者Mac)到 Andriod手机(模拟器)的Android操作系统的 桥梁(调试桥)

ADB示意图.png

ADB的测试环境搭建:

Snap7.jpg

然后打开 Windows 命令窗口

cd C:\Users\Linty\AppData\Local\Android\android-sdk\platform-tools

ADB连接夜神模拟器示例:

ADB环境的搭建步骤(连接夜神模拟器):

  1. 打开Android模拟器(夜神模拟器)
    也可以打开Android手机(已经ROOT),在勾选“允许USB调试”的选项后,连接手机

  2. 解压缩 platform-tools_r22-windows.zip 到 C:\

  3. 打开 cmd

  4. 进入解压后的文件夹

    cd C:\platform-tools_r22-windows\platform-tools
    
  5. 连接夜神模拟器

    adb connect 127.0.0.1:62001
    

    连接成功后,提示 connected to 127.0.0.1:62001

  6. 进入 ADB Shell 模式

    adb shell
    

    成功后,进入ADB 的SHELL模式

    root@android:/ #
    

ADB的两种模式:

  1. adb连接前

显示当前运行的全部连接到当前电脑的设备,包括手机和模拟器等:

adb devices

连接指定的模拟器或设备

adb connect 127.0.0.1:62001 

断开指定的模拟器或设备

adb disconnect

启动ADB

adb start-server

关闭ADB

adb kill-server
  1. 进入 adb的shell环境

进入adb的shell环境

adb shell

查看包名

adb shell
root@android:/ # ls data/data

记录无线通讯日志

adb shell 
root@android:/ # logcat -b radio

删除系统应用

adb shell
root@android:/ # cd system/app
root@android:/ # rm xxxx.apk

退出adb的shell环境

root@android:/ # exit
  1. adb命令模式

安装应用程序

adb install -r C:\xxxxx.apk

获取设备中的文件

adb pull <remote> <local>
adb pull /addroid/lib/libwebcore.so c:\tmp

向设备中写入文件

adb push <local> <remote>
adb push C:\test.txt /tmp/test.txt 

卸载应用程序

adb shell
cd data/app
rm apk包
exit
adb uninstall apk包的主包名

获取管理员权限

adb root

获取设备的序列号

adb get-serialno

进入SQLite环境

adb shell
sqlite3

SQLite的基本操作,SQLite没有用户的概 念 。

Snap1.jpg

示例:安装TPshop的Android客户端

步骤如下:

  1. 用ADB连接上设备

    adb connect 127.0.0.1:62001
    
  2. 用ADB的方式安装APP

    adb install -r C:\tmp\soubaoShopMobile-debug.apk
    
  3. 安装成功,在ADB SHELL环境中 执行 Monkey(压力测试工具)

    # 进入 ADB SHELL 环境
    adb shell
    # 获取 TPSHOP 的APP的包名
    root@android:/ # ls data/data | gerp soubao
    com.soubao.tpshop
    # 执行 Monkey
    root@android:/ #                                                 monkey -p com.soubao.tpshop -v -v -v 5000 -throttle 5000 --pct-motion 80% > sdcard/monkey_tpshop.log
    

  4. 用ADB 获取日志到本地C盘的tmp目录中

    # 退出 ADB SHELL 环境
    root@android:/ # exit
    # 用 ADB PULL 获取文件
    adb pull sdcard/monkey_tpshop.log
    [100%] sdcard/monkey_tpshop.log
    

  5. 用ADB的方式卸载

    adb shell
    root@android:/ # ls data/data | grep soubao
    # 获取到 app的包名
    com.soubao.tpshop
    # 退出 adb shell
    root@android:/ # exit
    adb uninstall com.soubao.tpshop
    

4.2 Monkey 工具

Monkey测试是Android平台自动化测试的一种手段,通过Monkey程序模拟用户触摸屏幕、滑动Trackball、按键等操作来对设备上的程序进行压力测试,检测程序多久的时间会发生异常。

顾名思义,Monkey就是猴子, Monkey测试,就像一只猴子, 在电脑面前,乱敲键盘在测试。 猴子什么都不懂, 只知道乱敲,通过Monkey程序模拟用户触摸屏幕、滑动Trackball、 按键等操作来对设备上的程序进行压力测试,检测程序多久的时间会发生异常

Monkey 主要用于Android 的压力测试 自动的一个压力测试小工具, 主要目的就是为了测试app 是否会Crash.

  1. Monkey程序由Android系统自带,使用Java语言写成,在Android文件系统中的存放路径是:/system/framework/monkey.jar
  2. Monkey.jar程序是由一个名为“monkey”的Shell脚本来启动执行,shell脚本在Android文件系统中的存放路径是:/system/bin/monkey

可以在命令行中输入

这样就可以通过在CMD窗口中执行: adb shell monkey {+命令参数}来进行Monkey测试了。

0.00255359997618565.png

查看Monkey命令帮助

adb shell monkey –help
类别 选项 说明
常规 --help 列出简单的用法。
-v 命令行的每一个 -v 将增加反馈信息的级别。 Level 0( 缺省值 ) 除启动提示、测试完成和最终结果之外,提供较少信息。 Level 1 提供较为详细的测试信息,如逐个发送到 ActivITy 的事件。 Level 2提供更加详细的设置信息,如测试中被选中的或未被选中的Activity 。
事件 -s <seed> 伪随机数生成器的seed 值。如果用相同的 seed 值再次运行 Monkey ,它将生成相同的事件序列。
--throttle <milliseconds> 在事件之间插入固定延迟。通过这个选项可以减缓 Monkey 的执行速度。如果不指定该选项, Monkey 将不会被延迟,事件将尽可能快地被产成。
--pct-touch <percent> 调整触摸事件的百分比(触摸事件是一个down-up事件,它发生在屏幕上的某单一位置)。
--pct-motion <percent> 调整动作事件的百分比(动作事件由屏幕上某处的一个down事件、一系列的伪随机事件和一个up事件组成)。
--pct-trackball <percent> 调整轨迹事件的百分比(轨迹事件由一个或几个随机的移动组成,有时还伴随有点击)。
--pct-nav <percent> 调整“基本”导航事件的百分比(导航事件由来自方向输入设备的up/down/left/right组成)。
--pct-majornav <percent> 调整“主要”导航事件的百分比(这些导航事件通常引发图形界面中的动作,如:5-way键盘的中间按键、回退按键、菜单按键)
--pct-syskeys <percent> 调整“系统”按键事件的百分比(这些按键通常被保留,由系统使用,如Home、Back、Start Call、End Call及音量控制键)。
--pct-appswitch <percent> 调整启动Activity的百分比。在随机间隔里,Monkey将执行一个startActivity()调用,作为最大程度覆盖包中全部Activity的一种方法。
--pct-anyevent <percent> 调整其它类型事件的百分比。它包罗了所有其它类型的事件,如:按键、其它不常用的设备按钮、等等。
约束限制 -p <allowed-package-name> 如果用此参数指定了一个或几个包,Monkey将只允许系统启动这些包里的Activity。如果你的应用程序还需要访问其它包里的Activity(如选择取一个联系人),那些包也需要在此同时指定。如果不指定任何包,Monkey将允许系统启动全部包里的Activity。要指定多个包,需要使用多个 -p选项,每个-p选项只能用于一个包。
-c <main-category> 如果用此参数指定了一个或几个类别,Monkey将只允许系统启动被这些类别中的某个类别列出的Activity。如果不指定任何类别,Monkey将选择下列类别中列出的Activity:Intent.CATEGORY_LAUNCHER或Intent.CATEGORY_MONKEY。要指定多个类别,需要使用多个-c选项,每个-c选 项只能用于一个类别。
调试 --dbg-no-events 设置此选项,Monkey将执行初始启动,进入到一个测试Activity,然后不会再进一步生成事件。为了得到最佳结果,把它与-v、一个或几个包约束、以及一个保持Monkey运行30秒或更长时间的非零值联合起来,从而提供一个环境,可以监视应用程序所调用的包之间的转换。
--hprof 设置此选项,将在Monkey事件序列之前和之后立即生成profiling报告。这将会在data/misc中生成大文件(~5Mb),所以要小心使用它。
--ignore-crashes 通常,当应用程序崩溃或发生任何失控异常时,Monkey将停止运行。如果设置此选项,Monkey将继续向系统发送事件,直到计数完成。
--ignore-timeouts 通常,当应用程序发生任何超时错误(如“Application Not Responding”对话框)时,Monkey将停止运行。如果设置此选项,Monkey将继续向系统发送事件,直到计数完成。
--ignore-security-exceptions 通常,当应用程序发生许可错误(如启动一个需要某些许可的Activity)时,Monkey将停止运行。如果设置了此选项,Monkey将继续向系统发送事件,直到计数完成。
--kill-process-after-error 通常,当Monkey由于一个错误而停止时,出错的应用程序将继续处于运行状态。当设置了此选项时,将会通知系统停止发生错误的进程。注意,正常的(成功的)结束,并没有停止启动的进程,设备只是在结束事件之后,简单地保持在最后的状态。
--monitor-native-crashes 监视并报告Android系统中本地代码的崩溃事件。如果设置了--kill-process-after-error,系统将停止运行。
--wait-dbg 停止执行中的Monkey,直到有调试器和它相连接。

实际使用的时候 Monkey的 -p -v -throttle --pct-motion 使用比较多

adb shell
ls data/data
monkey -p im.tower.android -v -v -v 5000 -throttle 500 --pct-motion 80% > sdcard\monkey.log

使用monkey进行Tower的压力测试,使用级别2,操作5000个随机命令,并且每个命令延迟5秒钟,滑动的命令占80%。

正常情况, 如果Monkey测试顺利执行完成, 在log的最后, 会打印出当前执行事件的次数和所花费的时间;

// Monkey finished 代表执行完成\

异常情况

Monkey 测试出现错误后,一般的分析步骤
看Monkey的日志 (注意第一个swith以及异常信息等)

  1. 程序无响应的问题: 在日志中搜索 “ANR”
  2. 崩溃问题:在日志中搜索 “Exception” (如果出现空指针, NullPointerException) 肯定是有bug

Monkey 执行中断, 在log最后也能看到当前执行次数

5. 安全测试

主要的测试内容:

  1. 易测安全扫描:上传APP到易测平台,由阿里云扫描并发报告。
  2. 权限的测试:
    1. 检查APP申请的权限,列出所有权限
    2. 对所有的权限进行场景描述
  3. 消息的控制:
    1. 显示消息的形式
    2. 显示消息的时机(锁屏是否显示)

6. APP移动测试框架

随着移动互联网的发展,移动测试技术越来越成熟,很多优秀的开源测试框架涌现出来。作为一个移动测试工程师,我们不仅要夯实自己的技术能力,也要学会从开源框架吸取经验。俗话说,站在巨人的肩膀上,我们会看得更远。移动端的测试框架主要分为自动化测试框架,性能测试框架,稳定性测试框架和安全测试框架这几种类型。下面我们分这几个类型介绍10个最常用的移动端测试框架。

6.1 自动化测试框架

官方网站:http://appium.io/
Github下载地址:https://github.com/appium/appium
说到移动端的自动化框架,最有名的当属Appium。Appium是一个开源的跨平台移动端UI自动化测试框架,它支持native,hybrid和web app的测试。目前有超过100个贡献者在github上维护和优化Appium的源代码。关于Appium的中文资料也非常多,比较齐全的是乙醇的博客,总结了11篇博文介绍Appium的用法,可以访问http://www.cnblogs.com/nbkhic/tag/appium/ 来查看。另外在testerhome上也有专门针对Appium的讨论社区,在上面你可以跟各种行业大牛沟通和交流。https://testerhome.com/topics/node23

官方网站:http://baiduqa.github.io/Cafe/
Github下载地址:https://github.com/BaiduQA/Cafe
Cafe,是一款来自百度QA部门的Android平台自动化测试框架,框架覆盖了Android自动化测试的各种需求,致力于实现跨进程测试、快速测试、深度测试,解决了Android自动化测试中的诸多难题,比如业界一直没有解决的跨进程测试问题。主要亮点有:基于hook录制体系,遍历测试,跨app测试,pc agent设计,使用android 漏洞提权。

Github下载地址:https://github.com/taobao-chenxu/athrun-framework
Athrun 无线测试框架是淘宝自动化测试团队开发的UI自动化测试框架,支持Android和iOS移动App的UI自动化测试。Athrun以Mobile自动化为基础,以PC2Mobile为切入点,是淘宝Mobile测试日常工作必备的平台。目前Athrun支持:Android上的自动化测试,包括自动化测试框架,持续集成体系。覆盖率工具和自动录制回放工具,也在试用完善中。iOS上的自动化测试,包括注入式自动化框架AppFramework,和基于录制的非注入式自动化框架Athrun_IOS,还有持续集成体系。目前两个框架在淘宝测试内都有用户群,都还在不断使用和演进过程中。AppFramework将会支持socket通信方式。

6.2 性能测试框架

1)网易Emmagee
Github下载地址:https://github.com/NetEase/Emmagee
Wiki: https://github.com/NetEase/Emmagee/wiki
Issues: https://github.com/NetEase/Emmagee/issues
FAQ: https://github.com/NetEase/Emmagee/wiki/FAQ
Emmagee是一个实用的手工Android端性能测试工具,它可以实时监控Android App的CPU,内存,网络流量,电量等。如果手机Root的话,还可以监控top activity及堆信息。此外,它还能根据用户需要设置收集数据的时间间隔。最终以csv文件的方式将报告保存在本地。

2)腾讯APT
Github下载地址:https://github.com/stormzhang/APT
Tencent APT Mirror, APT是一个Android平台高效性能测试组件,提供丰富实用的功能,适用于开发自测、定位性能瓶颈;测试人员完成性能基准测试、竞品对比测试。APT是一个eclipse插件,可以实时监控Android手机上多个应用的CPU、内存数据曲线,并保存数据;另外还支持自动获取内存快照、PMAP文件分析等,方便开发人员自测或者测试人员完成性能测试,快速发现产品问题。

6.3 稳定性测试框架

1)CrashMonkey4IOS
Github下载地址:https://github.com/vigossjjj/CrashMonkey4IOS
CrashMonkey4IOS是一个iOS稳定性测试工具。它主要支持以下功能:

2)CrashMonkey4Android
Github下载地址:https://github.com/DoctorQ/CrashMonkey4Android
CrashMonkey4Android,是一个依靠Cts框架,对原生Monkey进行改造后的产物,拥有以下新增功能:

3)ui-auto-monkey
Github下载地址:https://github.com/jonathanpenn/ui-auto-monkey
UI AutoMonkey是一个简单的面向iOS应用程序的压力测试插件框架。 你可以通过它向你的应用程序连续发出一系列随机的点击,滑动,旋转屏幕,锁屏,解锁等事件。同时它会通过instrument对你的App的性能状况进行实时监控。当应用程序发生crash,它会收集相关的crash日志并存储在本地。

6.4 安全测试框架

1)Mobile-Security-Framework-MobSF
Github下载地址:https://github.com/penghaibo203/Mobile-Security-Framework-MobSF
Mobile Security Framework (移动安全框架) 是一款智能、一体化的开源移动应用(Android/iOS)自动渗透测试框架,它能进行静态、动态的分析。

该框架支持二进制文件(APK & IPA)和源码压缩包。该框架的另一个特点是其可扩展性,你可以轻松制定自定义规则。测试结束后程序会生成一份清晰的报告。我们会进一步拓展次框架以支持Tizen、WindowsPhone等平台。

2)AndroBugs_Framework
官方网站:http://www.androbugs.com/
Github下载地址:https://github.com/jackcn2004/AndroBugs_Framework
AndroBugs框架是一款高效的Android漏洞扫描器,可以帮助开发人员或渗透测试人员在Android应用程序查找潜在的安全漏洞。它是基于Python语言开发的,无需安装,配置相关环境即可使用。

上一篇下一篇

猜你喜欢

热点阅读