测试的种类—Android应用测试指南(2)

发表于:2016-3-11 11:44

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:李江    来源:51Testing软件测试网原创

  (51Testing软件测试网获人民邮电出版社和作者授权连载本书部分章节。任何个人或单位未获得明确的书面许可,不得对本文内容复制、转载或进行镜像,否则将追究法律责任。)
  1.4.4  性能测试
  性能测试,是用重复的方式来探测部件中某些特点的性能。如果说,应用的某些地方对性能提升有要求,那么最好的衡量优化效果的办法,就是拿优化之前和优化之后给出的性能报告做对比。
  众所周知,一次考虑不周到的优化带来的后果总是弊大于利的,因此,为了避免优化后不仅没达到效果,反而把之前的功能影响到了,最好对应用的整体性能有个清晰的了解,明确升级之后对应用的影响。
  Android 2.2里面的Dalvik JIT编译器改变了一些Android开发中常使用的优化方案。迄今,在Android开发中,每一个性能优化升级都推荐有性能测试保证。
  1.4.5  系统测试
  系统测试是将部件组合起来作为一个整体来测试,检查部件之间的交互情况,软件和硬件都会涉及。通常,系统测试包括以下额外的测试类,比如:
  "  界面GUI测试;
  "  冒烟测试;
  "  性能测试;
  "  安装测试。
  1.5  Android测试框架
  Android提供了一个高级的测试框架,这个框架是Junit的一个扩展,在标准Junit的基础上插入了方便执行上述测试的插件。有的情况下,我们需要再装一些工具,而且集成这些工具大多情况下都很简单和直接。
  Android测试环境的关键特性包括以下这些:
  "  Android在Junit框架基础上扩展了访问系统对象的方法。
  "  通过模拟器框架可以测试应用和控制器。
  "  提供了常用的、不同版本的系统对象的模拟器。
  "  提供了执行单个用例、用例集的工具,无须模拟器。
  "  提供测试用例、工程的管理工具,在ADT的Eclipse插件中,用命令行来控制。
  1.5.1  模拟器
  模拟器框架是测试框架的基础。模拟器控制被测的应用,并且允许插入桩来模拟应用的某些部件的执行。比如,你可以在应用启动之前创建模拟的Context,应用程序将会用模拟的Context来执行。
  所有的应用程序跟周边环境的交互都可以通过上述方式来控制。你可以将应用程序封闭到一个十分严谨单一的条件下来得到预期的结果,强行设置某些方法的输出或者模拟ContentProvider中的常量、数据库、甚至文件系统的内容。
  一个标准的Android工程都会有相应的测试工程,这个测试通常以Test开头。在Test工程中,AndriodManifest.xml中定义了使用的机器。
  举个例子描述,假设你的工程配置文件如框1.5所示。
  框1.5  主工程的AndriodManifest.xml配置文件
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.aatg.sample"
android:versionCode="1"
android:versionName="1.0">
<application android:icon="@drawable/icon"
android:label="@string/app_name">
<activity android:name=".SampleActivity"
android:label="@string/app_name">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name=
"android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
<uses-sdk android:minSdkVersion="7" />
</manifest>
  在这个项目里,相关的测试工程配置文件AndriodManifest.xml如框1.6所示。
  框1.6  测试工程的AndriodManifest.xml配置文件
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.aatg.sample.test"
android:versionCode="1" android:versionName="1.0">
<application android:icon="@drawable/icon"
android:label="@string/app_name">
<uses-library android:name="android.test.runner" />
</application>
<uses-sdk android:minSdkVersion="7" />
<instrumentation
android:targetPackage="com.example.aatg.sample"
android:name="android.test.InstrumentationTestRunner"
android:label="Sample Tests" />
<uses-permission android:name="
android.permission.INJECT_EVENTS" />
</manifest>
  这里的模拟器包作为主项目包,带着.test后缀。
  定义模拟器的时候,会指定目标包和测试执行器,在这个情况下,默认的客户端执行器是android.test.InstrumentationTestRunner。
  另外,被测应用和测试工程一样,都是apk安装的Android程序。它们都在同一个进程中,因此,能访问相同的功能特性。
  当你执行一个测试应用程序的时候,行为管理器(http://developer.andriod.com/intl/de/
  reference/andriod/app/ActivityManager.html)利用模拟器框架来启动和控制测试执行器,然后测试执行器反过来利用模拟器工具来关闭主程序运行的实例,启动测试进程,最后在同一个进程中启动主程序。这种方式使得各种各样的测试应用可以直接在主应用中工作。
  1.5.2  测试对象
  在项目开发过程中,你的测试用例必须在不同的设备上执行。从操作简单、方便,到响应速度等方面考虑,都要求最后必须在具体设备上测试,并且是在所有类型的设备上测试。
  当然,有的测试用例会在本地JVM虚拟机上执行,有的用例在开发机上执行,有的在Dalvik或者活动虚拟机上执行,具体情况取决于测试用例的特点。
  上述执行用例的方式都有各自的优缺点,幸运的是,你可以自由决定如何来执行你的用例。
  仿真器是一个非常棒的执行平台,可能是最强大的,因为它可以让你修改测试过程中所有的参数、配置以及各种执行环境。测试最根本的目的是让你的程序能够正确处理所有场景,因此,最好在程序发布之前发现所有的问题。
  性能测试需要使用真机,因为模拟仿真设备多少跟真机会有不同的地方。只有用真机才能体会到用户的真实感受。渲染、滚屏、投掷以及其他场景都需要发布之前用真机测试一次。
  1.6  小结
  我们复习了软件测试中的主要概念以及Android测试中的特殊点。这些知识为我们开启探索软件测试的优点提供了必备条件。
  本章节主要讲述了以下内容:
  "  我们回顾了早期Android测试以及当前可选的测试框架。
  "  我们简短分析了测试背后的四个W:为什么测试(Why),测什么(What),如何测(How),何时测(When)。在如何测试上,我们后面会进行更加深入分析,假设你有固定参数输入,那么你将如何进行探索性测试呢?
  "  我们列举了项目中你需要的不同的、最通用的测试方法,描述了测试工具箱中的一些工具,并且用一个例子详细介绍了Junit单元测试如何做,方便大家理解。
  我们还从Android测试的角度分析了这些技术,提到了用模拟器来执行测试用例的方法。下面几章,我们将开始用实例来分析上面提到的技术、框架、工具使用的细节。
本文选自《Android应用测试指南》第一章,本站经人民邮电出版社和作者的授权。
版权声明:51Testing软件测试网获人民邮电出版社和作者授权连载本书部分章节。
任何个人或单位未获得明确的书面许可,不得对本文内容复制、转载或进行镜像,否则将追究法律责任。
相关文章:
试入门—Android应用测试指南(1)
33/3<123
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号