Android测试框架介绍

Android之UiAutomator测试框架源码分析(第一篇:简要介绍与学习计划) 便可建立在本地 JVM 上运行的 JUnit 测试,或建立在设备上运行的插桩测试。当然,您也可以通过集成测试框架来扩展测试能力,例如集成Mockito可以在本地单元测试中测试 Android API 调用, 集成Espresso或UI Automator可以在插桩测试中测试用户交互。您可以使用Espresso 测试记录器自动生成 Espresso 测试。 本页提供了一些关于如何向... 阅读详情

 

本文主要介绍 android测试框架的特性, 包含测试的结构、 用来创建测试的api、 用来运行测试和查看结果的工具。
本文不免有硬翻译sdk之嫌,只是用来对android的测试框架做个大致介绍,具体的示例代码正在整理,下月blog记录下

一、测试框架特性
android测试框架作为android开发环境的一个重要部分,可以用来测试应用的各个方面,从单元测试到框架测试。这个测试框架拥有如下特性:
1、 基于junit:android的测试套件是基于JUnit 3的(所以不完全兼容JUnit 4),因而你可以使用普通的junit而不调用android的测试api来进行测试,当然我们推荐使用android的测试api更高效全面的进行测试。
2、 组件的测试:android的junit扩展提供了针对组件的测试用例类,这些类提供了mock对象和方法的辅助方法,进而控制组件生命周期。
3、 测试工程同应用工程类似:测试用例类包含在类似主程序包的测试包中,所以无需学习其他的技术和工具。
4、 自动创建测试工程:用于自动构建和运行测试的sdk工具在eclipse adt中可用,其他ide中可以使用命令完成。它们可以读取源项目的信息自动完成测试类的创建。
5、 自动事件流模拟工具 monkeyrunner和 monkey:可以用来进行ui测试,都可以向设备发送事件流(键盘、touch、手势)对程序进行压力测试,其中monkeyrunner需要编写python程序调用api发送事件流,monkey通过adb的命令行发送。更详细的可以见七的介绍。


二、测试框架结构
下面为测试框架的结构图:
android测试框架
通过上图我们发现了以下几点
a. 测试package和应用package运行在同一个进程中,通过InstrumentationTestRunner进行交互。而一般情况下应用是运行在自己独立的dalvik进程中,而测试package和应用package为两个工程,它们如何运行在同一个进程中的呢?InstrumentationTestRunner的作用呢?这些稍后我们都将解释。
b. 测试工具以及monkey和monkeyrunner都运行在进程之外。并且也是通过InstrumentationTestRunner进行交互。
c. 测试package由test case classed和mock objects组成。

三、android 测试用例结构
android 测试用例结构同Junit差不多,比较显著的差别就是测试用例会单独放在一个工程中进行管理,并且可以通过自动化的方式(ide插件或者命令行)建立好测试工程。可以参考:

四、用于测试的api
4.1 Junit
JUnit3 的api可以在android中使用。android的 AndroidTestCase 也是继承自JUnit的 TestCase。其他像assert也类似

4.2 Instrumentation
instrumentation是android系统一系列控制函数和钩子的集合。这些钩子使得android控件独立于其正常的生命周期以及系统如何加载程序。说的俗点,就是android自己给自己开的后门。。

a. 显式控制系统组件生命周期。通常情况下,组件的生命周期是由系统控制的,例如大家熟悉的activity生命周期的相应函数onCreate、onResume、onStop等函数都是由系统自行调用,并且android应用框架并没有提供权限让用户直接调用,但是在instrumentation中却可以调用。

b. 测试和程序运行在同一进程中。android应用的组件(除content providers等外)都运行在同一个dalvik进程中,并且无法让应用同另外一个应用运行在同一个进程中。但是instrumentation能让测试程序和相应应用运行在同一进程中,这样就可以方便的进行组件生命周期控制和数据访问。现在我们知道了上面结构图中的第一个疑问。

4.3 测试用例类
4.3.1  AndroidTestCase 继承自TestCase,功能类似JUnit的TestCase,含有经典的setUp和tearDown函数。同时提供了测试权限以及通过解除类引用防止内存泄漏的方法。

4.3.2 Component-specific test cases 面向组件的测试用例。包括Activity Testing,Content Provider Testing、Service Testing。并没有单独提供BroadCastReceiver,因为它可以通过传递intent进行测试。

4.3.3 ApplicationTestCase
使用 ApplicationTestCase测试应用对象的setUp和tearDown。这些对象维护着应用的全局状态。这些测试用例可以校验manifest文件中的application元素的配置。

4.3.4 InstrumentationTestCase
如果想在测试用例中使用instrumentation方法,必须使用 InstrumentationTestCase 或其子类,比如Activity的测试用例就继承自InstrumentationTestCase,并且扩展了其他在Activity测试中实用的功能。

4.4  Assertion classes
同Junit测试一样,android测试中也可以使用assert展示测试结果。除了Junit的assert类可用外,android测试api还提供了MoreAsserts和ViewAsserts。其中
MoreAsserts提供了更强大的assert功能,比如正则表达式的比较、顺序比较、更丰富对象的equal判断等。
ViewAsserts提供了Views即UI的几何和对齐测试。如位置、对其、views包含判断。

4.5 Mock object classes
依赖注入可以方便测试,android提供了类,用于mock  Context、ContentProvider、ContentResolver、Service等系统对象,有些还提供intent对象的mock。 你可以使用这些mocks将某个测试点独立出来或是方便测试的依赖注入。这些类可以在android.test和android.test.mock的包中找到。
android提供了两类mock对象的类
a.Simple mock object classes
这些类提供了一个简单的mock策略,他们废止了对应的系统对象,如果调用相应系统对象就会抛出异常。通过重写方法达到mock依赖的目的。包括 MockApplication ,  MockContext ,  MockContentProvider ,  MockCursor ,  MockDialogInterface ,  MockPackageManager , and  MockResources。
b.Resolver mock objects
通过提供独立的解析器将数据提供商和测试分离,可以自己增加数据并经行解析以满足需要。见 MockContentResolver  

4.6 上下文测试
android提供了两个上下文测试类
这个类允许你在不影响设备真实展现的数据情况下测试应用的数据操作。提供了独立的context、文件、目录和数据库操作可以在测试中使用。 
这个类快速为数据操作提供了独立的数据,并且保持了其他context操作正常的功能

五、 测试执行
test runner是用来执行测试用例的,可以加载测试类、set ups、runs和销毁每个测试用例。
为了执行测试,需要在manifest文件中指定test runner.
InstrumentationTestRunner支持所有类型的测试,可以运行所有的测试用例。可以在manifest文件的instrumentation节点中指定其或其子类。InstrumentationTestRunner代码在公共类库android.test.runner中, 而没有包含在android代码中。所以为了使用它,需要在uses-library节点中声明。这些都不需要手动完成,通过ide或是命令行创建工程已经自动完成。这里解决了上面结构图中始终通过InstrumentationTestRunner交互的原因。
系统加载和启动test包之后会kill原来的应用进程,重启实例,然后将控制权交给InstrumentationTestRunner。

六、 查看测试结果
android测试结果会返回给启动它的工具,可以查看运行的测试用例名和方法名以及具体出错的行。对于eclipse会在junit新的面板中展现,对于命令行在标准输出中展示

七、 monkey and monkeyrunner
sdk提供了两个函数级的应用测试工具
a.  UI/Application Exerciser Monkey经常叫做monkey。通过adb运行的一个命令行工具,通过向设备发送表示keystrokes、touches或者gestures  的事件流, 对系统或具体应用进行压力测试,并且能自动报告遇到的错误。用法示例如下:
adb shell monkey -p your.package.name -v 500

b.  monkeyrunner  提供了用于编写python 程序的api和执行环境,通过自己编写的程序可以在android代码外可以控制android设备,比如安装、运行应用程序和测试包,向程序发送事件流,页面截图并保存。

monkeyrunner工具不同于monkey(UI/Application Exerciser Monkey)。 monkey是运行在adb的命令行工具,用来产生用户和系统的事件流,可随机性很大;而monkeyrunner 通过api发送特定的命令和事件,一般需要自己编写python程序调用api完成。

VS2022 中 std::mutex 静态初始化陷阱:一次诡异崩溃的排查记录 VS2022中使用std::mutex时遇到的静态初始化陷阱问题。该问题源于VS2022 17.4版本为std::mutex添加constexpr支持后,全局静态初始化可能导致系统资源未就绪时锁失效或崩溃。文章分析了问题现象、影响范围,并提供了解决方案。最后给出了排查清单和核心建议 阅读详情

相关推荐

无刷直流电机矢量控制(四):基于滑模观测器的无传感器控制

无刷直流电机矢量控制,采用转速、电流双环控制,电流环dq解耦,d轴采用id=0控制,q轴采用转速外环。采用滑模观测器(SMO),根据电压电流信息进行电机位置角度动态估算,模型可直接运行,转速和角度跟踪精度较高。 本文整理了该方法的基本原理,介绍了在MATLAB/Simulink中的建模和仿真过程,最后附上完整的模型文件。 一、基本原理 滑模观测器(下文简称SMO)是基于滑模变结构控制方法的一种状态观测器。其针对无刷直流电机转子位置估算的实现过程如下。 假设采用矢量控...

Forster-C的博客 6865

AndroidTestCase来进行android 单元测试简介

1 通过AndroidTestCase 实现的大致步骤: 添加自己的test case code, 让它们继承自AndroidTestCase. 定义自己的testSuite类,用来管理test cases. 定义自己的testRunner,用来执行测试. 2 这种方法所涉及到的android的类以及接口:Android Test Case classes需要从AndroidTestCase类派生

Linda的自动化测试之旅 1万+

学习Fidder主要掌握的技术——流量篡改

本文介绍了Fiddler工具的三种常用调试方法:1)本地映射-通过保存修改JSON响应文件实现接口数据模拟;2)Composer接口调试-通过修改请求参数快速测试接口异常处理;3)断点调试-在请求/响应过程中拦截并修改数据。这三种方法分别适用于前端开发、接口测试和健壮性验证等场景,能够有效提高调试效率。操作步骤包括保存响应、修改数据、配置规则等关键环节,并提供了详细的界面操作指引。

2301_79022773的博客 353

Android测试框架及例子

从图3-2中可以看到,基本所有的测试用例都是通过InstrumenationTestRunner执行的,而各个测试类型被设计来执行特定的测试,在本章中,主要讲解ActivityInstrumentationTestCase2的用法,其他的类型将放在后续章节里讲解。ActivityInstrumentationTestCase2这个类型是用来针对单个活动执行功能测试。它通过Instrumentati

WHACKW的专栏 818

5090D显卡安装LLaMA-Factory避坑指南:PyTorch与CUDA版本兼容性问题解决

本文是针对5090D显卡安装LLaMA-Factory时遇到的PyTorch与CUDA版本兼容性问题的详细解决指南。文章深入剖析了因GPU架构代际差异导致的“no kernel image”报错根源,并提供了从环境诊断、安装匹配的PyTorch Nightly版本,到最终集成验证的完整路径,帮助用户确保LLaMA-Factory在5090D上稳定运行。

Apple的专栏 868

Drugbank XML文件解析

DrugBank Release Version 5.1.13 | DrugBank Online点击download下载XML文件,也可以使用COMMAND命令下载。(下载文件需要先注册一个账号文件,就可以下载了)下载好压缩文件,并解压会得到如下两个文件:full database.xml就是我们所需要的XML文件,完整的XML很大,大约为1.6G因为原始的文件非常大,直接查看XML文件是有困难的,所以我们使用一下命令来查看该文件的前一百行 得到如下输出 对于前三行 第一行:表示XML 版本为 1.0

qtjbzs的博客 584

android 单元测试 assert,android单元测试AndroidTestCase

在实际开发中,开发android软件的过程需要不断的进行测试。而是用Junit测试框架,则是正规android开发的必用技术,在Junit中可以得到组件,可以模拟发送事件和检测程序处理的正确性。第一步:首先在AndroidManifest.xml中加入下面红色代码(把单元测试库引进到此项目中):android:icon="@drawable/ic_launcher"android:label="@...

weixin_42300956的博客 433

从SPICE到电磁场:非线性器件在CST场路协同仿真中的建模艺术

本文深入探讨了非线性器件在CST场路协同仿真中的建模技术,重点分析了SPICE模型与电磁场仿真的集成方法。通过对比线电流模型和面电流模型的优缺点,结合实际案例展示了二极管阵列在电磁散射调控中的应用,为工程师提供了优化仿真精度与效率的实用技巧。

pandas7gardener的博客 198

Android Espresso 测试框架介绍

原文链接 : Introduction to Android Espresso原文作者 : Veaceslav Grec译文出自 : 开发技术前线 www.devtf.cn译者 : zhengxiaopeng校对者: chaossss状态 : 完成 Espresso 是一个提供了简单 API 的用于 android app UI 测试的测试框架。最新的 2.0 版本发布后已经可以在 Andr

Raleigh 1058

2篇1章1节:数据的基本概念以及 R 中的数据结构、向量与矩阵的创建及运算

本文详细介绍了R语言中常见的数据结构的向量和矩阵。通过掌握这些数据结构的基本概念和操作技巧,可以更高效地处理和分析数据。

MD Code 1243

《网络安全自学教程》- Windows基线检查加固

Windows安全配置,基线检查标准,基线加固方式

wangyuxiang946的博客 1万+

安卓开发实现自动化测试遇到的问题解决

目前安卓开发进入了项目的空窗期,项目的迭代速度变慢,需要我们开发人员进行代码的优化和重构。在安卓开发中,开发人员和测试人员的配合默契程度直接会导致产品上线是否合格、是否会出现严重的项目崩溃、是否会出现产品功能的缺失,这些都和开发人员开发的时候,是否有跟测试人员沟通测试的边际和测试人员设计的测试用例是否存在功能缺失等问题。总之一句话,测试是否过关直接可以影响用户对产品的使用。线上产品出现问题,首先背...

阿甘正传 2660

进阶01:Labview与OPC UA设备通信

LabVIEW通过OPC UA实现高效设备通信方案 本文介绍了使用LabVIEW与OPC UA设备通信的完整实施方案。OPC UA协议具有跨平台兼容、高安全性和高效数据交换等优势。实施步骤包括:1)安装NI OPC UA工具包;2)搭建模拟测试环境,使用OPC UA Simulation Server创建测试变量;3)编写LabVIEW程序,实现连接服务器、事件订阅、数据读写等功能。重点展示了通过用户事件实现设备主动触发的机制,当模拟变量值改变时自动触发LabVIEW事件处理。该方案验证了OPC UA在工业

weixin_38637405的博客 1400

Android之UiAutomator测试框架源码分析(第三篇:UiDevice功能介绍)

(注意:本文基于UI Automator测试框架版本为2.2.0) UiDevice位于androidx.test.uiautomator包,使用UI Automator测试框架,可以说一定离不开UiDevice对象的使用,为什么说离不开UiDevice对象的使用?这是因为UiDevice提供的很多功能必须要在ui自动化测试中使用。UiDevice对象本身表示一个Android设备,因为Android系统在各种设备上都能运行,所以这个设备具体指的可以是一个手机、一个手表、一个电视、一个手环等等! ..

王员外的博客 2795

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

android开发测试框架,Android 开发 谷歌UI测试框架(Espresso)

Android 开发 谷歌UI测试框架(Espresso)核心 API 小巧、可预测、易于学习并且依然保持对定制的开放。Espresso 测试清晰的描述异常、交互和断言,而没有样板内容、自定义基础设施或凌乱的实现细节的干扰。Espresso 测试运行非常快!它会在应用 UI 处于静止时对其进行操作和断言,而使你远离了等待、同步、睡眠以及后台轮)。配置测试环境在应用的 build.gradle 文件...

weixin_29969209的博客 192

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

探索高效安卓质量保证工具:Android_QA

探索高效安卓质量保证工具:Android_QA 在快速发展的移动应用市场中,保证应用程序的质量和稳定性是开发者的重要任务。Android_QA 是一个开源的自动化测试框架,旨在帮助安卓开发者更高效地进行质量保证工作。本文将深入介绍该项目的核心特性、技术实现及应用场景。 项目简介 Android_QA 由 Omooo 开发并维护,它是一个全面的测试解决方案,包含了UI测试、性能测试、安全测试等多个方...

gitblog_00018的博客 467

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

安卓中的单元测试

单元测试在安卓开发里,普遍被开发者所忽略。今天就讲讲这块吧! 单元测试用的好,开发的效率其实会提高很多。 在计算机编程中,单元测试(英语:Unit Testing)又称为模块测试, 是针对程序模块(软件设计的最小单位)来进行正确性检验的测试工作。程序单元是应用的最小可测试部件。在过程化编程中,一个单元就是单个程序、函数、过程等;对于面向对象编程,最小单元就是方法,包括基类(超类)、抽象类、或者派生...

weixin_45347152的博客 249

Android之UiAutomator测试框架源码分析(第十五篇:查找控件功能的集中介绍)

UI Automator框架、提供N种定位元素控件的方式, 第一、UiDevice的findObject(UiSeletor) 第二、UiDevice的findObject(BySelector) 第三、UiObejct2的findObject(BySelector) 第四、UiObject 第五、UiCollection 第六、UiScrollable ...

王员外的博客 987

安卓之测试框架优劣分析

安卓测试是确保移动应用质量的重要环节,它涉及多种测试类型和技术。有效的测试可以帮助开发者发现潜在问题,改善用户体验,并提高应用的稳定性和性能。 本文将深入探讨安卓测试的分类、主要测试框架以及它们的优劣分析。

wlred1980的博客 1380

安卓应用测试学习手册(一)

无论您在 Android 设计上投入多少时间,甚至在编程时多么小心,错误是不可避免的,bug 也会出现。这本书将帮助您最小化这些错误对您的 Android 项目的影响,并提高您的开发生产力。它将向您展示那些容易避免的问题,帮助您快速进入测试阶段。《Android 应用测试指南》是第一本也是唯一一本提供实用介绍的书,旨在通过使用各种方法提高您的 Android 应用程序开发,介绍最常见的技术、框架和工具。作者在将应用测试技术应用于实际项目方面的经验,使他能够分享关于创建专业级 Android 应用程序的见解。

龙哥盟 1319

安卓app开发系列之-常用工具与库

选择适合的工具和库是成功开发Android应用的基础。本文介绍了Android开发中的常用工具和库,包括开发环境、UI框架、网络请求库、数据存储方案以及测试框架等。这些工具不仅提高了开发效率,还能提升应用的性能和用户体验。在实际开发中,合理运用这些工具和库,可以使开发工作变得更加高效,并帮助团队保持良好的代码质量和应用体验。如果您有任何问题或需要进一步的讨论,欢迎随时交流!

Jamson 2018

Robotium 数据驱动测试框架

refer to http://controlingquality.blogspot.com/2011/02/design-data-driven-framework-around.html 被测试代码是简易计算器,代码: /Files/morebetter/android code/AndroidCalculator.rar 1. 数据驱动测试架构 测试数据源:TestDa

yunbin_7的专栏 1149

五款最常用的Android测试框架(含代码示例)

今天,我们就要说说5款最常用的Android测试框架,并且每个框架都给出了基本的代码示例。

huace3740的博客 1651
上一篇: Jmeter-使用正则表达式提取器获取关联参数
下一篇: 【Android自动化测试之Robotium】02. Robotium之用例分析
lychbeyond
博客等级 码龄22年 168粉丝 12原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值