摘 要:本文就杰尔系统( Agere system )平台基础上开发的 GSM 手机自动化测试提供一些技术介绍,并结合实际例子讲解一些应用经验,来说明自动化测试在手机功能测试一级中所带来的效率。
关键词:手机平台,杰尔系统, Trace , PTE 命令,手机软件功能测试,自动化测试
• 国内手机功能测试现状:
当前国内手机厂商和设计公司据统计已达到 300 多家,但至今所有的设计开发都是基于国外技术平台基础上的二次开发,即通常所说的 MMI 开发, 提供开发的手机平台目前主要有德州仪器( TI ),英特尔( Intel ),飞思卡特( freescale ),杰尔系统( Agere system ),英飞凌( infineon ),瑞萨科技( renesas ),菲利普半导体( philips ),意法半导体( ST ),美国博通( broadcom ),美国模拟器件( ADI ),微控科技( wavecom )。通常这些平台供应商的核心技术都不对外开放,只为购买其开发平台的用户提供一个可二次开发的环境,比如本文所要介绍的自动测试所基于的平台 ——Agere system , 它在其软件架构的上层为开发用户做了一层 UI ( User Interface ) , 并做了最基本的 AL 开发,通常方案提供后可以直接作为国内厂商用于 FTA 测试,这即是国内众多手机厂商和 design house 开发和测试的母体。
曾听一位从事手机功能测试的同仁说 “ 做手机功能测试只要有手就可以了 ” ,确实手机功能测试很容易给人一种是简单而重复按键操作的感觉。但手机功能众多,并且回归测试工作量大,如果单个测试工程师靠手动按键来执行所有测试用例,花费的时间少则几小时,多则需要几天的时间,这样耗费大量测试时间的同时也容易让测试工程师产生疲倦甚至是厌倦心里,很容易造成测试的遗漏。手机测试中常碰到很多重复性高的工作,如发送数条 SMS 或者 MMS 以验证其收发成功率以及稳定性、连续进行多次呼叫、多次对文件系统进行添加删除操作、多任务多进程情况下的冲突测试以及极限测试等等,都是重复性高的工作,手动执行的话费时费力,如果能有一套自动执行的机制,将能大大提高测试的效率。
由于手机平台的特殊性,国内通常都没有自动化测试工具支持手机功能测试,纷繁复杂的功能测试大多只能通过文本化测试用例的指导,由广大测试员手工来完成。手机这种板机的 MMI 功能测试不同于基于 PC 上的 MMI 测试,后者借助 PC 平台,目前市场上已有非常多功能强大且通用的自动测试工具支持其测试,如比较典型的有 Winrunner , Robot , Loadrunner 等等,但这些工具通常不能兼容到象手机这种嵌入式系统中来。当然平台供应商对他们底层 lay1 , lay2 , lay3 的测试都有自己开发的测试工具来自动执行,但这些工具暂时都不提供给国内的开发厂家。
为了解决上述手机测试工作中的困难,笔者所在的测试团队经过不断的总结实践,目前已在基于杰尔系统( Agere system )平台上建立了一套实用的自动测试机制,通过该机制的建立,不但调动了测试工程师的工作积极性和热情,同时也大大提高了测试的效率。下面将围绕 Agere 平台上自动测试机制给大家做个总体介绍。在讲述该方案前,将先对 Agere 平台的窗体和消息,以及手机同 PC 的数据交互原理做个简单介绍。
• 手机中的窗体和消息:
功能测试时,在手机上每按下一按键,都是在特定的窗口下完成其功能,窗口处理函数接收到窗口所用键盘中定义的按键消息后执行相应的处理,完成指定的工作。这里所谈的窗口系统本质上是一个链表,主要是响应手机中常用的三类消息:用户的按键操作、 GSM 网络消息、以及计时器消息。
手机中窗体处理函数结构通常如下:
static UINT32 TestWindowProc( UIWINDOW * win, UINT16 cmd, UINT16 wParam, UINT32 lParam )
{
switch ( wParam )
{
case EV_KEYSEND: /*按发送键*/
CALL(MAOTelNumber);
return TRUE;
case EV_KEYEND: /*按挂机键*/
ENDCALL(MAOTelNumber);
return TRUE;
......
default:
break;
}
}
在窗体中除了对消息的实时处理外,还有通过具体的消息传递函数对本窗口中消息进行派发和定向流动,通常有 GSM 消息的流动和键盘消息的流动,派发 GSM 消息时,依据窗口建立的逆向顺序逐层往上流动,而键盘消息只向上传递一层,即子窗口向父窗口传送。 在系统功能测试过程中,窗口中的消息执行情况是看不到摸不着的东西,但是各个窗口中这三类消息的处理以及消息的派发流动都是测试所必须了解和测试的重点,怎样才能直观的看到,跟踪并了解这些消息的执行情况呢?测试工程师可以通过在跟踪点加测试桩或者跟踪语句来实现追踪,利用杰尔系统的 trace 工具( optitrace )以文本的形式输出所需要了解的信息,根据这些信息的输出流程和实际数据,以达到测试跟踪和分析的目的,如上面这一简单例子中所列举的两个事件 EV_KEYSEND 和 EV_KEYEND ,最简单的跟踪是通过在这两类事件触发前增加类似于 print 跟踪语句,判断 “ 发送键 ” 按下后是否在指定的窗口里执行到 EV_KEYSEND 事件并调用呼叫函数 CALL 执行呼叫请求 , 实际运行时,根据 optitrace 工具所显示的 print 信息观察程序的运行及消息的执行情况,跟踪的手段很多,在此就不详细列举。下面介绍 PC 怎样通过 Optitrace 工具实现同手机板机的数据交互。
• 手机与 PC 的数据交互
通常每个平台为软件开发提供一系列的开发套件,常用的有仿真软件、 Trace 跟踪分析软件、 Download 目标代码的装载软件等等,通过这些软件实现手机同 PC 的数据交互,实现软件的开发仿真,问题的跟踪分析,以及程序的灌写等。这些软件大多采用串口通讯的方式,通过特定的数据线连接手机串口通讯端与 PC 的串口或者 USB 端( USB 转串口)。下面将要介绍的是杰尔系统( Agere system )的开发套件之一 optitrace 。
该工具可以运行于 win9X/2000/NT 系统中,是 Agere 参考设计平台的辅助诊断工具,它为软硬件开发人员提供 Protocol Stack and MMI 的跟踪分析以及模拟用户硬件如串口显示和按键,为 field Test 人员提供 Trace Logs 和 Vital signs ,为产品测试工程师提供 Product Test environment ( PTE ) 窗口和脚本的定制以及播放。
该工具的运行界面如下:
以上运行界面中通过 optitrace 工具捕捉的用户按键消息,如 Key Code 4 ,表示用户在手机上按下数字键 4 , key code 后面的数字是按键所定义的编码值,手机中每个按键都有唯一的按键编码值。从中可以看出,用户所有的按键动作都以 “AL got key AL_KeyDown event , key code X” 的形式被记录下来。这些按键信息的捕捉只是该工具 trace 信息的一部分,该工具提供非常多的 trace 选项,实际应用中,可以根据所要跟踪的信息来选择显示。
该工具一个最重要的功能是可以在 PC 端通过 PTE 命令模拟用户来操作数据线另外一端的手机,该工具本身定义了 11 类的 PTE 命令,下面重点介绍两个重要的 PTE 命令,
• 模拟一个按键按下和释放
输入格式: Key <INT16 Keycode>
返 回: Key:DONE
用户可以在 optirace 的 PTE 命令输入行中,通过输入正确的 Key 命令,往手机端写入按键事件,手机端解析后执行相应的按键操作,如用户输入 key 8 回车后,手机端 LCD 显示 8 或者执行按键 8 所对应的操作,执行后返回 key : DONE 消息。同时 trace 中显示 AL got key AL_KeyDown event , key code 8 。
• 定义按键事件的发送间隔
输入格式: Wait <INT16 wait time>
返 回: Key:DONE
举例:
wait 6000 // 等待 6000Ms ,即 1 分钟
通过该命令,可以请求一个 pause 。比如呼叫 1001 通话 1 分钟后挂断。 PTE 脚本编写如下:
Key 1
Wait 500 // 按键间等待 0.5 秒
Key 10
Wait 500
Key 10
Wait 500
Key 1
Wait 500
Key 11 // 按呼叫键
Wait 3000 // 等待呼叫, 3 秒
Wait 60000 //1001 接通后等待 1 分钟
Key 12 // 按挂机键,结束通话
Wait 500
• 自动测试方案及框架体系 :
下面介绍本公司实践的一套自动化功能测试方案架构,如下图 :
• 方案简述 :
自动测试主要工作流程分以下几个主要阶段:
• 测试用例的设计和准备 , 形成一套自动测试用例脚本库
自动测试用例的准备,如果贵公司在需求定义的同时有各功能详细具体的 menu tree 架构,那即可在此基础上手动编写 PTE 命令脚本。
如一菜单结构如下:
假设一手机的关机