专利名称:一种实现自动测试的方法和系统的制作方法
技术领域:
本发明涉及测试技术领域,尤其涉及一种实现自动测试的方法和系统。
背景技术:
目前在不同终端投入使用前都需要进行各种复杂的测试工作,而对终端进行测试 时往往需要同时操作很多软件,如终端拨号软件、跟踪调试软件、网络侧仪表软件等;并且, 在测试工作中需要人为反复的进行操作,这样就会在软件操作方面投入大量的人力,同时 由于测试中引入了人为的因素,也就很容易造成一些不必要的失误,给测试带来了一定的 不利影响;此外,测试工作对于测试人员来说往往意味着反复执行相同的操作,而这样的工 作状况会令测试人员进入非常机械的工作状态,从而不利于定位解决问题。因此有必要通 过某种方式来通知各软件进行相应的动作,并可周而复始的进行操作,以此来简化操作流 程,减少测试人员的机械性工作。 针对此问题,目前已有的相关实现方案是通过录入宏的方法来实现自动测试测 试人员先开启录入宏,进行不同的软件操作,然后关闭录入,以后再测试时只要点击运行 宏,就可以模拟先前的操作进行测试。而这种宏录入的实现方法,主要是通过监听操作系统 的鼠标、键盘的消息来实现的当鼠标箭头在屏幕上移动时,操作系统会实时发出鼠标的位 置信息告知目标程序,当用户点击左键、右键或用户敲击键盘时,也会有相应的消息,该消 息发送给指定的窗口 ;其中,可以采用全局钩子技术得到该消息,以达到监控鼠标键盘操作 的目的;监控程序通过钩子技术收到消息后,将其写入宏文件中,包括消息类型、消息参数 等信息,然后在执行宏文件的时候,进行读取解析,并模拟操作系统给目标程序发送同样类 型的消息。采用宏录入的方式经过上述过程即可实现自动测试工作。 但是,由于上述宏录入方式并不关心被测软件本身,因而其也具有明显的缺陷首 先,宏运行时要求被测终端的反应要与宏录入时完全一样才能正确使用该功能;比如宏录 入时测试人员点击电话号码进行拨号测试,5秒钟后接通,通话5秒钟再挂断;但是真正使 用该宏进行测试时,很可能由于网络侧或其他原因使得拨号后没有接通,但宏执行时过5 秒即发挂断命令,因而这样流程就和预期有所不同了,并且还多发了一个挂断命令,这就很 容易对后面继续操作造成影响。其次,测试时测试环境也要前后一致;比如拨号软件的位置 要求完全一样,录入时软件最大化,执行时也要最大化,对应的软件菜单、工具条、按钮都要 在同样的位置,这样才能保证宏执行时点击的位置是期望的按钮、菜单的位置。再次,在宏 执行时用户不能进行其他操作,否则会发生不可预料的事情;比如用户在测试PC上先执行 宏进行测试,同时自己编辑文本写测试日志,如果此时宏发送鼠标移动的消息,就会导致用 户无法正常使用鼠标,如果宏发送点击鼠标左键的消息,被用户正在编辑的文本挡住了 ,该 宏也不会再正确的执行下去。所以,虽然现有采用宏录入的方式可以部分的实现自动测试, 但是受多种因素(如被测终端反应、测试环境、独立操作等)制约导致其准确率不高,并且 会影响用户的正常操作。
发明内容
有鉴于此,本发明实施例提供一种实现自动测试的方法和系统,能够在节省大量 人力的基础上提高自动测试过程中的准确性,且不会影响用户的其他正常操作。
为解决上述问题,本发明实施例提供的技术方案如下
—种实现自动测试的方法,其特征在于,包括
A、查找预设监控点对应的窗口 ; B、当查找到该窗口后,获取该窗口对应的指示信息; C、判断所述指示信息是否满足动作条件,如果是,则触发测试动作;否则,转步骤 A。
优选的,所述步骤A通过以下步骤实现
根据所述预设监控点确定所述窗口的标题栏; 调用窗口查找函数利用所述标题栏对当前开启的所有程序窗口进行查找。优选的,所述窗口查找函数为Win32函数中的FindWindow函数或FindWindowEx函数。 优选的,所述步骤B通过以下步骤实现 当查找到预设监控点对应的窗口后,获取该窗口的窗口句柄; 利用所述窗口句柄通过调用函数得到所述窗口的类型信息; 针对不同的窗口类型通过调用函数获取不同的窗口指示信息。 优选的,所述窗口类型包括静态控件、列表控件、对话框、按钮、编辑框和组合框。 优选的,当所述窗口为静态控件时,调用Win32的GetWindowText函数得到该窗口
的文字信息,调用GetWindowLong获取该窗口的显示状态。 当所述窗口为列表控件时,通过列表的消息处理函数得到最新一行的信息文字。
优选的,所述步骤C通过以下步骤判断所述指示信息是否满足动作条件
查找预设的动作列表; 将所述动作列表中与动作指令对应的信息与所述指示信息进行匹配,如果匹配, 则确定该指示信息满足动作条件;否则,不满足。 优选的,当所述预设监控点对应窗口类型为静态控件时,检查该静态控件的文字 信息及显示状态在所述动作列表中是否有动作匹配,如果有,则满足动作条件;否则,不满 足; 当所述预设监控点对应窗口类型为列表控件时,检查该列表控件的最新一行文字
信息在所述动作列表中是否有动作匹配,如果有,则满足动作条件;否则,不满足。 优选的,所述步骤C通过以下步骤实现测试动作的触发 根据窗口标题栏查找动作对象窗口 ; 查找到动作对象窗口后获取该窗口的窗口句柄; 利用所述窗口的窗口句柄向该窗口发送模拟动作指令。 优选的,当所述模拟动作命令为模拟鼠标动作指令时,在所述对象窗口模拟鼠标 执行点击动作; 当所述模拟动作命令为模拟键盘动作指令时,在所述对象窗口模拟键盘执行输入 动作。
5
—种实现自动测试的系统,包括查找单元、获取单元和触发单元;其中,所述查 找单元用于查找预设监控点对应的窗口 ; 所述获取单元用于当所述查找单元查找到所述窗口后,获取该窗口对应的指示信 息; 所述触发单元用于判断所述获取单元获取的指示信息是否满足动作条件,如果 是,则触发测试动作;否则,通知所述查找单元继续查找。
优选的,所述查找单元包括第一处理模块和第二处理模块;其中, 所述第一处理模块用于根据所述预设监控点确定所述窗口的标题栏; 所述第二处理模块用于调用窗口查找函数利用所述标题栏对当前开启的所有程
序窗口进行查找,并在查找到所述预设监控点对应的窗口后通知所述获取单元。
优选的,所述获取单元包括句柄模块、类型模块和信息模块;其中, 所述句柄模块用于当所述查找单元查找到预设监控点对应的窗口后,获取该窗口
的窗口句柄; 所述类型模块用于利用所述句柄模块获取的窗口句柄通过调用函数得到所述窗 口的类型信息; 所述信息模块用于针对所述类型模块得到的不同的窗口类型通过调用函数获取 不同的窗口指示信息。 优选的,所述触发单元包括判断模块和发送模块;其中, 所述判断模块用于通过查找预设的动作列表,将所述动作列表中与动作指令对应 的信息与所述获取单元获取的指示信息进行匹配,如果匹配,则确定该指示信息满足动作 条件,通知所述发送模块; 所述发送模块用于接收所述判断模块的通知,根据窗口标题栏查找动作对象窗 口,当查找到动作对象窗口后获取该窗口的窗口句柄,利用所述窗口的窗口句柄向该窗口 发送模拟动作指令。 优选的,所述系统还包括执行单元,用于当所述模拟动作命令为模拟鼠标动作指 令时,在所述对象窗口模拟鼠标执行点击动作;或者,当所述模拟动作命令为模拟键盘动作 指令时,在所述对象窗口模拟键盘执行输入动作。 可以看出,采用本发明实施例的方法和系统,通过查找当前所有程序的窗口,当发 现有某个程序的预设监控点弹出窗口后,根据该窗口相应的指示信息触发测试动作,因该 方式更接近人为进行测试时进行的情形,因而能够在节省大量人力的基础上提高自动测试 过程中的准确性;并且触发测试动作采用向指定窗口下发模拟动作命令来实现,因此不会 影响用户其他的正常操作和其他程序的正常运行;同时,采用本发明实施例的方法和系统 不需要修改已有测试工具软件即可完成自动测试工作。
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现 有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本 发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可 以根据这些附图获得其他的附图。
图1是本发明实施例1的方法流程示意图; 图2是本发明实施例中获取窗口对应指示信息的流程示意图; 图3是本发明实施例中判断指示信息是否满足动作条件的流程示意图; 图4是本发明实施例中触发测试动作流程示意图; 图5是本发明实施例3的系统结构示意图。
具体实施例方式
本发明实施例的基本思想在于通过查找当前所有程序的窗口,当发现有某个程序 的预设监控点弹出窗口后,根据该窗口相应的指示信息触发测试动作,因该方式更接近人 为进行测试时进行的情形,因而能够在节省大量人力的基础上提高自动测试过程中的准确 性;并且触发测试动作采用向指定窗口下发模拟动作命令来实现,因此不会影响用户其他 的正常操作和其他程序的正常运行。 下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完 整地描述;显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于 本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他 实施例,都属于本发明保护的范围。
图1示出了本发明实施例1的一种实现自动测试的方法,该方法包括
步骤101 :查找预设监控点对应的窗口 ; 具体的,本实施例中所述的预设监控点可以是不同程序的某个需要注意的信息 点;比如网络侧仪表测试程序提示需要拨号,则该提示就是一个监控点;终端拨号程序的 震铃提示也是个监控点;逻辑上所有值得测试人员关心的事件都是监控点,因而在进行测 试工作前首先根据需要或者需要监控的程序特点预设若干个监控点,并将该监控点对应的 信息与相执行的动作对应存储,例如以列表的形式存储,在此不再赘述。 在查找预设监控点对应的窗口时,首先根据预设监控点信息确定所述需要查找的 窗口的标题栏,然后再调用窗口查找函数利用所述标题栏对当前开启的所有程序窗口进行 查找;因windows系统中同时运行着很多程序,有着层层叠叠很多窗口 ,这些窗口的直观的 区别就是标题栏不同,标题栏可以指示该窗口是什么窗口,因此可以通过该窗口的标题栏 找到所述预设监控点对应的窗口 ;其中,在Window系统环境下,所述窗口查找函数主要是 Win32函数中的FindWindow或FindWindowEx两个函数,当然对于其他系统环境,窗口查找 函数也可以是其他的函数,本文不再赘述;例如,假设所述预设监控点为某程序通过弹出对 话框提示执行何种动作,则根据该监控点确定所述需要查找的窗口的标题栏为"提示",此 时调用FindWindow或FindWindowEx函数对当前开启的所有程序窗口进行查找,当某一窗 口的标题栏为"提示"时,则确定该窗口为所述预设监控点对应的窗口 ;
此外,还可以根据窗口的标题栏确定当前运行的程序,即根据窗口标题栏的字样, 可以区分出终端拨号程序、网络侧仪表程序及跟踪程序,例如可以通过字符串比较的函数, 如strcmp (szTitle,"拨号程序")strcmp (szTitle,"仪表程序")等判断区分当前的运行程 序; 步骤102 :当查找到该窗口后,获取该窗口对应的指示信息; 具体的,本实施例提出通过下述方式获取所述窗口对应的指示信息,但本领域技术人员了解,还可采用其他方式来获取某一窗口对应的指示信息,并不局限于此;如图2所 示, 当查找到预设监控点对应的窗口后,在S201中,获取该窗口的窗口句柄;窗口句 柄是windows内部的一种资源,一类内部的变量,它和显示的窗口一一对应,每一个外部 可见的窗口都对应一个句柄,也即对应一个变量值;而后续对该窗口进行操作时都需要利 用该句柄变量,即该句柄变量为后续可能操作的前提条件;在S202中,利用所述窗口句柄 通过调用函数得到所述窗口的类型信息;例如,通过获取的监控点对应的窗口句柄,利用 GetClassName函数得到窗口类型信息;目前在Windows系统中可通过该函数根据句柄得 至lj className,另夕卜还可调用GetClassName、 GetNextDlgTabltem或GetNextDlgGroupItem 函数确定匹配的子窗口 ;其中,所述的窗口类型包括多种形式,如windows自带的 #32769 (Desktop)桌面类型,#32770 (Dialog)对话框,Button按钮,Edit编辑框,ComboBox 组合框等;需要注意的是,在Windows系统中一个窗口下面有很多子窗体,而需要获取的窗 口对应的指示信息,可能对应最深层次的某个窗体,所以上述所述的监控点需要细到能获 取到信息对应的深层窗体;相应的,如果窗口类型是静态控件,则在S303中调用Win32的 GetWindowText函数得到该静态控件的文字信息,调用GetWindowLong获取该控件的显示 状态,即处于隐藏还是显示状态;如果窗口类型是列表控件,则在S304中则通过列表的消 息处理函数得到最新的一行信息文字; 步骤103 :判断所述指示信息是否满足动作条件,如果是,则触发测试动作;否则, 转步骤101 ; 具体的,可通过下述方式实现判断步骤,但并不局限于此,如图3所示在S301中, 查找预设的动作列表;所述动作列表中记录了不同的指示信息和不同的动作命令之间的对 应关系;将所述动作列表中与动作指令对应的信息与所述指示信息进行匹配,如果匹配,则 确定该指示信息满足动作条件;否则,不满足;如在S302中,当所述预设监控点对应窗口类 型为静态控件时,检查该静态控件的文字信息及显示状态在所述动作列表中是否有动作匹 配,如果有,则满足动作条件;否则,不满足;在S303中,当所述预设监控点对应窗口类型为 列表控件时,检查该列表控件的最新一行文字信息在所述动作列表中是否有动作匹配,如 果有,则满足动作条件;否则,不满足; 在指示信息与动作指令匹配后,如图4所示,在S401中,根据窗口标题栏查找动作 对象窗口 ;此查找方式与上述步骤101的查找方式类似,在此不再赘述;在S402中,查找到 动作对象窗口后获取该窗口的窗口句柄;查找到所述窗口后即可获知其窗口句柄,具体可 通过现有的Win32函数功能实现,不再赘述;在S403中,利用所述窗口的窗口句柄向该窗口 发送模拟动作指令;如上所述,对该窗口进行操作时需要利用句柄变量,即该句柄变量为各 种可能操作的前提条件;如调用PostMessage函数下发BM_CLICK消息模拟鼠标点击状态, 下发丽J(EYD0WN消息模拟键盘敲击状态,当然也可以采用其他封装方式下发模拟动作指 令。 以上通过在Windows系统中的具体实现详细说明了单个模拟动作的处理过程,处 理完动作后继续查找下个监控点,如此就可完成各个被测程序的动作衔接,满足自动测试 的目的。 同时,本领域技术人员应该很容易了解,上述的各种实施方式仅以Windows系统
8为例,而对于其他系统环境在具体实施时还可以通过其他不同的方式实现,具体本文不再 赘述。 下面结合具体的拨号软件测试方案来举例说明该本发明实施例的测试方法执行 该拨号软件后,首先弹出消息框,提示"开机",该消息框就是监控点A,其对应的动作是执行 模拟消息按下开机按钮;按下"开机"后接着弹出开机对话框,提示"Please switch on the UE !",该消息框就是监控点B,其对应的动作是启动拨号软件;拨号程序启动后提示用户输 入PIN码,该消息框就是监控点C,其对应的动作是模拟键盘输入"1234",然后点击确认;拨 号成功手机开机后,软件会继续执行直到弹出PDP激活命令,该消息框就是监控点D,其对 应的动作是先执行模拟消息按下确定按钮,然后点击拨号软件的连接因特网按钮,至此整 个软件测试流程完毕; 当采用本发明实施例的自动测试方法进行自动测试时如本发明实施例2 :首先利 用Spy++程序查找窗口功能得到监控点A对应的窗口 ,即先查找标题为"提示"的窗口 ,查找 到该窗口后再获得该窗口里面的文字字样"Pleaseswitch on the UE !"和"关机按钮",动 作匹配后向关机窗口发送模拟动作消息,实现关机;具体,可通过下述代码完成查找窗口 、 得到文字信息和按钮、匹配后发模拟消息hWnd = : :FindWindow(NULL, 〃提示〃 );〃找最上面的窗口
if(hWnd)
{
开机
到开机
誦D hTitle
::FindWindowEx(hWnd, NULL,
Static",亂L);
if (hTitle)
char szTemp[256] = {0};
GetWindowText(hTitle, szTemp,256);
std::string szCommand = szTemp ;
if(szCommand = = 〃 Please switch off the UE !
)〃如果是要
〃该监控点已经监控到具体信息,然后进行对应的动作
HWND h0K = FindWindowEx(hWnd, NULL, NULL, 〃开机〃 );//找
if (hOK)
为开机窗口发送模拟鼠标点击消息
::PostMessage(h0K, BM—CLICK,1, 0); Sle印(100);
::PostMessage (h0K, BM—CLICK, 0, 0); continue 5
9
}
}
} 按下"开机"后对于监控点B的处理与上述对于监控点A的处理类似,在此不再赘 述;当模拟执行所述监控点B的动作成功后,即拨号程序启动后,先查找"PIN码验证"窗口, 找到后查找Edit类型的窗口,然后模拟键盘动作在该Edit类型的窗口输入"1234",再向该 Edit类型窗口发送模拟鼠标点击消息,以实现模拟鼠标点击"确认";具体的,可通过如下代 码完成 hWnd = : :FindWindow(NULL, 〃 PIN码验证〃 );〃查找顶端窗口 if(hWnd) { ShowWindow(hWnd, SW_SH0W);〃显示窗口 HWND hTitle = : :FindWindowEx(hWnd,NULL, 〃 Edit" ,NULL);〃查找edit 框 if (hTitle) { : :PostMessage(hTitle, WM_KEYD0WN, ' 1' ,31);〃输入1 Sle印(100); : :PostMessage(hTitle, WM_KEYD0WN, ' 2' ,31);〃输入2 Sle印(100); : :PostMessage(hTitle, WM_KEYD0WN, ' 3' ,31);〃输入3 Sle印(100); : :PostMessage(hTitle, WM_KEYD0WN, ' 4' ,31);〃输入4 Sle印(100); HWND hOK = FindWindowEx(hWnd, NULL, NULL, 〃确认〃 ); if (hOK)〃点击确认,监控点动作结束 { Sle印(500); ::PostMessage(hOK,BM_CLICK,l,O); Sle印(lOO); ::PostMessage(hOK,BM_CLICK,0,0); 〃isWaitSMS = TRUE ; continue ; } } } 当拨号成功手机开机后,利用Spy++程序查找窗口功能得到监控点D对应的PDP
激活命令窗口,并采用类似监控点A的处理方式向该窗口发送模拟鼠标点击动作消息,点 击该窗口的"确定"按钮;然后利用3。7++摸索"连接因特网"窗口句柄先查找到顶级窗口标题栏信息,得知标题栏为"TD-SCDMA数据卡管理系统(THINKER)",然后查找"连接因特 网"按钮,在查找未果后从顶级窗口下逐个查看,当从窗口树中找到该按钮在一个对话框类 下后,模拟鼠标点击动作向该对话框发送消息,实现点击"连接因特网"按钮动作,完成全部 测试流程;具体的,从窗口树中查找"连接因特网"按钮可采用下面的代码进行动作 hWnd = : :FindWindow(NULL, 〃 TD-SCDMA数据卡管理系统(THINKER) 〃 ); if (hWnd) 〃找到顶级窗口 { ShowWindow(hWnd, SW_SH0W); HWND hTitle = : :FindWindowEx (hWnd, NULL, 〃 #32770〃 , NULL); while (hTitle) 〃找到第一个对话框 { HWND hButton = : :FindWindowEx(hTitle, NULL, NULL, 〃连接因特 网"); if (hButton)〃查看该对话框下是否有"连接因特网"按钮,有就执行动 作 { Sle印(6000); : :PostMessage(hButton, BM_CLICK, l,O);〃执行点击动作 Sle印(200); : :PostMessage(hButton, BM_CLICK,0,0); Sle印(2000); break; } else { 〃没有按钮找下个对话框 hTitle = ::FindWindowEx(hWnd,hTitle, 〃 #32770〃 ,NULL); Sle印(lO); continue ; } } } 通过上述四个监控点的处理即可达到自动测试的效果;此外,为了更方便现场测
试的需要,可以将监控点信息保存起来,测试时先读取信息而后运行先用3。7++程序得到
监控点确定信息,然后将监控点界面右面源树上的节点拖动到左面目标树上,并进行配置;
再点击应用开始自动测试过程,也可将信息保存为文件,以便下次打开运行;当再应用时可
以直接打开文件,然后点击运行,启动监控点监控功能,完成自动测试流程。 可以看出,采用本发明实施例的方法,通过查找当前所有程序的窗口,当发现有某
个程序的预设监控点弹出窗口后,根据该窗口相应的指示信息触发测试动作,因该方式更
接近人为进行测试时进行的情形,因而能够在节省大量人力的基础上提高自动测试过程中的准确性;并且触发测试动作采用向指定窗口下发模拟动作命令来实现,因此不会影响用 户其他的正常操作和其他程序的正常运行。 基于上述思想,本发明实施例3又提出了一种实现自动测试的系统,如图5所示, 该系统500包括查找单元501、获取单元502和触发单元503 ;其中,所述查找单元501用 于查找预设监控点对应的窗口; 所述获取单元502用于当所述查找单元501查找到所述窗口后,获取该窗口对应 的指示信息; 所述触发单元503用于判断所述获取单元502获取的指示信息是否满足动作条 件,如果是,则触发测试动作;否则,通知所述查找单元501继续查找。 优选的,所述查找单元501包括第一处理模块和第二处理模块;其中,所述第一 处理模块用于根据所述预设监控点确定所述窗口的标题栏;所述第二处理模块用于调用窗 口查找函数利用所述标题栏对当前开启的所有程序窗口进行查找,并在查找到所述预设监 控点对应的窗口后通知所述获取单元。 此外,所述获取单元502包括句柄模块、类型模块和信息模块;其中,所述句柄模 块用于当所述查找单元查找到预设监控点对应的窗口后,获取该窗口的窗口句柄;所述类 型模块用于利用所述句柄模块获取的窗口句柄通过调用函数得到所述窗口的类型信息;所 述信息模块用于针对所述类型模块得到的不同的窗口类型通过调用函数获取不同的窗口 指示信息。 除此之外,所述触发单元503包括判断模块和发送模块;其中,所述判断模块用于 通过查找预设的动作列表,将所述动作列表中与动作指令对应的信息与所述获取单元获取 的指示信息进行匹配,如果匹配,则确定该指示信息满足动作条件,通知所述发送模块;所 述发送模块用于接收所述判断模块的通知,根据窗口标题栏查找动作对象窗口 ,当查找到 动作对象窗口后获取该窗口的窗口句柄,利用所述窗口的窗口句柄向该窗口发送模拟动作 指令。 需要注意的是,所述系统还可包括执行单元,用于当所述模拟动作命令为模拟鼠 标动作指令时,在所述对象窗口模拟鼠标执行点击动作;或者,当所述模拟动作命令为模拟 键盘动作指令时,在所述对象窗口模拟键盘执行输入动作。 本领域技术人员可以理解,可以使用许多不同的工艺和技术中的任意一种来表示 信息、消息和信号。例如,上述说明中提到过的消息、信息都可以表示为电压、电流、电磁波、 磁场或磁性粒子、光场或以上任意组合。 专业人员还可以进一步应能意识到,结合本文中所公开的实施例描述的各示例的 单元及算法步骤,能够以电子硬件、计算机软件或者二者的结合来实现,为了清楚地说明硬 件和软件的可互换性,在上述说明中已经按照功能一般性地描述了各示例的组成及步骤。 这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。 专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现 不应认为超出本发明的范围。 结合本文中所公开的实施例描述的方法或算法的步骤可以直接用硬件、处理器执 行的软件模块,或者二者的结合来实施。软件模块可以置于随机存储器(RAM)、内存、只读存 储器(ROM)、电可编程ROM、电可擦除可编程ROM、寄存器、硬盘、可移动磁盘、CD-ROM、或技术
12领域内所公知的任意其它形式的存储介质中。 对所公开的实施例的上述说明,使本领域专业技术人员能够实现或使用本发明。 对这些实施例的多种修改对本领域的专业技术人员来说将是显而易见的,本文中所定义的 一般原理可以在不脱离本发明的精神或范围的情况下,在其它实施例中实现。因此,本发明 将不会被限制于本文所示的这些实施例,而是要符合与本文所公开的原理和新颖特点相一 致的最宽的范围。 以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精 神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。
权利要求
一种实现自动测试的方法,其特征在于,包括A、查找预设监控点对应的窗口;B、当查找到该窗口后,获取该窗口对应的指示信息;C、判断所述指示信息是否满足动作条件,如果是,则触发测试动作;否则,转步骤A。
2. 根据权利要求1所述的方法,其特征在于,所述步骤A通过以下步骤实现根据所述预设监控点确定所述窗口的标题栏;调用窗口查找函数利用所述标题栏对当前开启的所有程序窗口进行查找。
3. 根据权利要求2所述的方法,其特征在于所述窗口查找函数为Win32函数中的FindWindow函数或FindWindowEx函数。
4. 根据权利要求1所述的方法,其特征在于,所述步骤B通过以下步骤实现当查找到预设监控点对应的窗口后,获取该窗口的窗口句柄;利用所述窗口句柄通过调用函数得到所述窗口的类型信息;针对不同的窗口类型通过调用函数获取不同的窗口指示信息。
5. 根据权利要求4所述的方法,其特征在于所述窗口类型包括静态控件、列表控件、对话框、按钮、编辑框和组合框。
6. 根据权利要求4所述的方法,其特征在于当所述窗口为静态控件时,调用Win32的GetWindowText函数得到该窗口的文字信息,调用GetWindowLong获取该窗口的显示状态。当所述窗口为列表控件时,通过列表的消息处理函数得到最新一行的信息文字。
7. 根据权利要求1所述的方法,其特征在于,所述步骤C通过以下步骤判断所述指示信息是否满足动作条件查找预设的动作列表;将所述动作列表中与动作指令对应的信息与所述指示信息进行匹配,如果匹配,则确定该指示信息满足动作条件;否则,不满足。
8. 根据权利要求7所述的方法,其特征在于当所述预设监控点对应窗口类型为静态控件时,检查该静态控件的文字信息及显示状态在所述动作列表中是否有动作匹配,如果有,则满足动作条件;否则,不满足;当所述预设监控点对应窗口类型为列表控件时,检查该列表控件的最新一行文字信息在所述动作列表中是否有动作匹配,如果有,则满足动作条件;否则,不满足。
9. 根据权利要求1所述的方法,其特征在于,所述步骤C通过以下步骤实现测试动作的触发根据窗口标题栏查找动作对象窗口;查找到动作对象窗口后获取该窗口的窗口句柄;利用所述窗口的窗口句柄向该窗口发送模拟动作指令。
10. 根据权利要求9所述的方法,其特征在于当所述模拟动作命令为模拟鼠标动作指令时,在所述对象窗口模拟鼠标执行点击动作;当所述模拟动作命令为模拟键盘动作指令时,在所述对象窗口模拟键盘执行输入动作。
11. 一种实现自动测试的系统,其特征在于,包括查找单元、获取单元和触发单元;其中,所述查找单元用于查找预设监控点对应的窗口 ;所述获取单元用于当所述查找单元查找到所述窗口后,获取该窗口对应的指示信息; 所述触发单元用于判断所述获取单元获取的指示信息是否满足动作条件,如果是,则 触发测试动作;否则,通知所述查找单元继续查找。
12. 根据权利要求11所述的系统,其特征在于,所述查找单元包括第一处理模块和第 二处理模块;其中,所述第一处理模块用于根据所述预设监控点确定所述窗口的标题栏; 所述第二处理模块用于调用窗口查找函数利用所述标题栏对当前开启的所有程序窗 口进行查找,并在查找到所述预设监控点对应的窗口后通知所述获取单元。
13. 根据权利要求11所述的系统,其特征在于,所述获取单元包括句柄模块、类型模 块和信息模块;其中,所述句柄模块用于当所述查找单元查找到预设监控点对应的窗口后,获取该窗口的窗 口句柄;所述类型模块用于利用所述句柄模块获取的窗口句柄通过调用函数得到所述窗口的 类型信息;所述信息模块用于针对所述类型模块得到的不同的窗口类型通过调用函数获取不同 的窗口指示信息。
14. 根据权利要求11所述的系统,其特征在于,所述触发单元包括判断模块和发送模 块;其中,所述判断模块用于通过查找预设的动作列表,将所述动作列表中与动作指令对应的信 息与所述获取单元获取的指示信息进行匹配,如果匹配,则确定该指示信息满足动作条件, 通知所述发送模块;所述发送模块用于接收所述判断模块的通知,根据窗口标题栏查找动作对象窗口 ,当 查找到动作对象窗口后获取该窗口的窗口句柄,利用所述窗口的窗口句柄向该窗口发送模 拟动作指令。
15. 根据权利要求14所述的系统,其特征在于,所述系统还包括执行单元,用于当所述 模拟动作命令为模拟鼠标动作指令时,在所述对象窗口模拟鼠标执行点击动作;或者,当所 述模拟动作命令为模拟键盘动作指令时,在所述对象窗口模拟键盘执行输入动作。
全文摘要
本发明涉及一种实现自动测试的方法和系统,其中所述方法包括A、查找预设监控点对应的窗口;B、当查找到该窗口后,获取该窗口对应的指示信息;C、判断所述指示信息是否满足动作条件,如果是,则触发测试动作;否则,转步骤A。可以看出,采用本发明的方法和系统,能够在节省大量人力的基础上提高自动测试过程中的准确性;并且不会影响用户其他的正常操作和其他程序的正常运行;同时,采用本发明实施例的方法和系统不需要修改已有测试工具软件即可完成自动测试工作。
文档编号H04M3/22GK101751329SQ20081024025
公开日2010年6月23日 申请日期2008年12月18日 优先权日2008年12月18日
发明者刘欣 申请人:大唐移动通信设备有限公司