OPhone自动化测试技术介绍

本文介绍了OPhone平台上的自动化测试技术,包括基于JUnit+Instrumentation框架的测试、基于键盘事件和图像识别的测试方法以及基于OPhone API的测试。详细讨论了各种方法的实现原理、优缺点。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

OPhone自动化测试技术介绍

OPhone自动化测试技术介绍
OPhone平台除了为应用程序开发提供了丰富的API外,同时也为开展自动化测试提供了多种途径。本文将对OPhone平台上可采用的几种自动化测试技术进行介绍,并对每种技术的优缺点做简要的总结。

基于JUnit+Instrumentation框架的自动化测试
OPhone平台中整合了JUnit测试框架和Instrumentation机制。图1是JUnit+Instrumentation自动化测试框架的架构图。

JUnit是广泛应用于Java程序开发中的单元测试框架。它定义了特定格式的方法做为测试用例,提供TestSuite测试套件和TestRunner测试执行器分别用于组织测试用例和运行测试用例并反馈测试结果。

Instrumentation则是一种操作系统和上层应用程序之间的监控机制。当应用程序运行时,若Instrumentation设置为开启,它将在应用程序运行前初始化,与应用程序运行在同一个进程中,监测应用程序与系统之间的交互,并可以对应用程序进行一定的控制,例如,监控应用中各Activity的调用情况,启动和结束Activity,对Activity生命周期中的各个状态进行切换,甚至可以向Activity发送按键事件和字符。

为了可以更加便捷的进行自动化测试,如图2所示,OPhone平台利用Instrumentation对JUnit框架进行扩展。

经过这样的扩展,框架的易用性得到了提高。举例来说,假设AppActivity是某应用的一个Activity,我们想测试AppActivity界面上的一些功能,可以实现一个ActivitityInstruemtationTestCase2<AppActivity>的子类,当这个子类运行时,AppActivity就会自动启动,而省去了通过Intent等手动启动的步骤。

更重要的是,扩展后原有的JUnit单元测试被赋予了更多的功能。例如,用AndroidTestCase.getContext()、Instrumentation.getTargetContext()等方法就可以在测试代码中得到测试程序和被测应用程序的Context,进而访问到资源文件,因此该框架特别适合用来做
OPhone应用的单元测试。

如果我们再利用Instrumentation模拟用户从图形界面发起的诸如点击或拖拽屏幕、输入字符、选择菜单项等操作,就可以实现自动化功能测试甚至系统测试。与数据库操作和View操作配合使用后,这种自动化测试能够实现与测试人员的手动测试具有同样的效果。
下面就是一段基于JUnit+Instrumentation框架对记事本应用进行测试的自动化测试代码:

public void testInsertSaveNum() throws Exception {
String TEST_TITLE = "Add-Save Number";
String TEST_NOTE = "Note";
//启动NotesList
mNotesList = (NotesList) mInstrumentation.startActivitySync(mIntent);

//调用NotesList界面菜单中的“添加”选项
mInstrumentation.invokeMenuActionSync(mNotesList, NotesList.INSERT_ID, 0);
mInstrumentation.waitForIdleSync();

//此时转到了NoteEditor界面,利用ActivityMonitor来得到NoteEditor对象
mNoteEditor = (NoteEditor) waitForActivity(mNoteEditorMonitor);
SystemClock.sleep(waitTime);

//在标题栏和内容栏输入内容
inputTitleNote(TEST_TITLE, TEST_NOTE);

//调用NoteEditor界面菜单中的“保存”选项
mInstrumentation.invokeMenuActionSync(mNoteEditor, SAVE_ID, 0);
mInstrumentation.waitForIdleSync();
SystemClock.sleep(waitTime);

//此时应用程序转回到NotesList界面,取ListView并校验数量
mNotesListView = (ListView) mNotesList.getListView();
assertTrue("fail to add and save a note",mNotesListView.getCount() == 1);
}
JUnit和Instrumentation相结合,既充分发挥了JUnit在测试用例开发、组织等方面的特点,又提供了对应用程序进行控制的有效途径。

本部分内容设定了隐藏,需要回复后才能看到

步骤 动作
1 Window Manager 收到来自于linux键盘驱动的按键事件。
2 Window Manager 把scancode映射成keycode。
3 Window Manager 把 scancode和keycode都发给应用程序。
4 应用程序对按键事件进行响应。
OPhone平台还提供了功能丰富的开发调试工具和工具库,如adb、sqlite3、viewserver和ddmlib等,这些为我们探索新的自动化测试方法提供了技术基础。

像上述的键盘事件,我们就可以通过adb shell input命令发送给设备,同时我们也可以通过adb shell sendevent命令实现对触摸屏的操作。例如,想实现这样的过程:一、进入DCD应用的主界面;二、用向左滑动的触摸屏手势做翻页操作;三、调起该界面的菜单;四、退出DCD主界面,就可以用如下命令实现:
//启动DCD主界面
adb shell am start -n oms.dcd/oms.dcd.DcdClient

//在x向坐标00000095、y向坐标00000007的位置点击屏幕,并保持按下状态
adb shell sendevent /dev/input/event0: 0003 0000 00000095
adb shell sendevent /dev/input/event0: 0003 0001 00000007
adb shell sendevent /dev/input/event0: 0001 014a 00000001

//保持y向坐标不变,沿00000055到00000010的x向路径横向滑动
adb shell sendevent /dev/input/event0: 0003 0000 00000055
adb shell sendevent /dev/input/event0: 0000 0000 00000000
……
adb shell sendevent /dev/input/event0: 0003 0000 00000010
adb shell sendevent /dev/input/event0: 0000 0000 00000000

//结束按下状态
adb shell sendevent /dev/input/event0: 0001 014a 00000000

//发送一个菜单键值,调起菜单
adb shell input keyevent 1

//发送一个Back键值,收回菜单
adb shell input keyevent 4

//再发送一个Back键值,退出DCD界面
adb shell input keyevent 4
如果把这样的方法应用到具体测试用例上,那么就是一个完整的自动化测试过程了。

而对于需要操作数据库的情况,可通过adb shell sqlite3命令实现。

不过测试必须有检验结果的校验点才行。这里可以使用图像识别的方式进行结果的校验。识别可以采用两种方法:
1、利用系统viewserver中提供的接口获得当前界面上控件的属性信息,通过对比测试前后属性信息的变化进行结果校验;
2、利用ddmlib包中提供的接口自动截取测试前后的屏幕截图,通过对比两幅截图相同位置的图像信息是否存在差异来进行结果校验。

以上是基于键盘事件和图像识别的自动化测试方法的基本原理。在实际实现过程中,还需要做大量的工作,如提供友好的用户使用界面、提供更简单易懂的脚本格式、支持循环或分支等复杂的测试逻辑、支持更复杂的触摸屏操作、实现多设备互通及交互操作、支持测试结果的自动生成等。

这种自动化测试的实现方式不受系统应用程序进程间安全机制的限制,突破了JUnit+Instrumentation框架下自动化测试不易跨应用测试的限制,而且也能实现多部终端的交互操作,为实现交互性系统测试的自动化提供了解决方案,同时也非常适合于替代重复性的压力测试类型的手动测试。

该方式的缺点是:首先,获取屏幕信息时存在时延,测试执行起来的效率会降低。第二,如果大量采用基于屏幕坐标上的触摸屏点击操作,需要维护多套测试脚本已适应不同屏幕分辨率的产品。第三,与UI实现紧耦合,如果应用的UI设计变化,则需同步修改测试用例甚至重新设计测试用例。
基于OPhone API的自动化测试
OPhone平台开放的API中,很多都适合于开发测试程序。如利用ContentResolver可以操作应用的数据库,利用Graphic、Media、OpenGL等包中提供的接口可以实现对图片编解码、音视频媒体编解码、图形绘制能力等方面的测试。
也可根据需要,同时在测试程序中加入Instrumentation以扩展功能。
利用API的这种方式,最适合于开发小巧的自动化测试工具,例如生成联系人记录的数据生成工具,可以连续拨打电话的压力测试工具、可以评估系统性能的Benchmark类工具等。由于它没有基于特定的测试框架,很难满足测试任务调度和组织的需要。
总结
以上介绍的三种自动化测试技术各有所长,如能在实际的工作中根据不同的测试类型
和测试需求灵活使用,一定能提高OPhone平台及产品的测试效率和测试质量。

作者简介
金镝,中国移动通信研究院终端技术研究所项目经理。OPhone测试与质量团队成
员,目前主要负责OPhone平台自动化测试方面的工作。
内容概要:本文档详细介绍了基于MATLAB实现的无人机三维路径规划项目,核心算法采用蒙特卡罗树搜索(MCTS)。项目旨在解决无人机在复杂三维环境中自主路径规划的问题,通过MCTS的随机模拟与渐进式搜索机制,实现高效、智能化的路径规划。项目不仅考虑静态环境建模,还集成了障碍物检测与避障机制,确保无人机飞行的安全性和效率。文档涵盖了从环境准备、数据处理、算法设计与实现、模型训练与预测、性能评估到GUI界面设计的完整流程,并提供了详细的代码示例。此外,项目采用模块化设计,支持多无人机协同路径规划、动态环境实时路径重规划等未来改进方向。 适合人群:具备一定编程基础,特别是熟悉MATLAB和无人机技术的研发人员;从事无人机路径规划、智能导航系统开发的工程师;对MCTS算法感兴趣的算法研究人员。 使用场景及目标:①理解MCTS算法在三维路径规划中的应用;②掌握基于MATLAB的无人机路径规划项目开发全流程;③学习如何通过MCTS算法优化无人机在复杂环境中的飞行路径,提高飞行安全性和效率;④为后续多无人机协同规划、动态环境实时调整等高级应用打下基础。 其他说明:项目不仅提供了详细的理论解释和技术实现,还特别关注了实际应用中的挑战和解决方案。例如,通过多阶段优化与迭代增强机制提升路径质量,结合环境建模与障碍物感知保障路径安全,利用GPU加速推理提升计算效率等。此外,项目还强调了代码模块化与调试便利性,便于后续功能扩展和性能优化。项目未来改进方向包括引入深度强化学习辅助路径规划、扩展至多无人机协同路径规划、增强动态环境实时路径重规划能力等,展示了广阔的应用前景和发展潜力。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值