CN102156673B - 面向测试用例描述的gui自动化测试系统及其测试方法 - Google Patents
面向测试用例描述的gui自动化测试系统及其测试方法 Download PDFInfo
- Publication number
- CN102156673B CN102156673B CN 201110099266 CN201110099266A CN102156673B CN 102156673 B CN102156673 B CN 102156673B CN 201110099266 CN201110099266 CN 201110099266 CN 201110099266 A CN201110099266 A CN 201110099266A CN 102156673 B CN102156673 B CN 102156673B
- Authority
- CN
- China
- Prior art keywords
- test
- script
- statement
- case
- action
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Expired - Fee Related
Links
Images
Landscapes
- Stored Programmes (AREA)
- Debugging And Monitoring (AREA)
Abstract
本发明提出一种面向测试用例描述的GUI自动化测试系统及其测试方法,属于软件测试领域。所述的测试系统包括测试管理子系统和测试执行子系统,测试管理子系统提供面向测试用例的规范描述语言元素,生成测试用例的测试步骤,自动转换测试步骤为相应的测试脚本发送给相应测试节点的测试执行子系统,测试执行子系统执行测试脚本生成测试结果。所述的测试方法生成规范化测试步骤,并针对该步骤自动生成测试脚本,并在测试脚本中增加有测试执行协同消息,针对分布式测试系统实现了自动化测试。本发明简化了目前繁重的GUI自动化测试的测试脚本编写任务,节省了时间、人力,并解决了针对分布式系统进行GUI自动化测试所面临的协同问题。
Description
技术领域
本发明属于软件测试领域,涉及一种面向测试用例描述的GUI自动化测试系统及其测试方法。
背景技术
目前,针对软件系统的GUI(Graphical User Interface,图形用户接口)测试可分为手工测试和自动化测试。手工测试具有一定的局限性,手工测试的缺点在于:(1)手工测试需要很高的人力和物力投入;(2)手工测试难以保证测试结果的准确性和可靠性;(3)对于大型复杂系统,特别是安全苛刻系统,手工测试实际上是不可行的。相比较而言,GUI自动化测试优点在于:(1)能够很好的取代手工测试中的大量人为操作,完成对GUI界面的自动操作,自动触发应用程序的各个功能,检测控件属性和功能实现的正确性;(2)能够增强测试的覆盖性。例如,测试控件状态时,自动化测试能够很好的遍历控件的所有状态值,测试软件在这些状态值下所产生响应的正确性;(3)完成测试用例的自动生成、测试点自动生成以及测试结果的评估。
然而,对于某些大型系统,特别是安全苛刻性系统,传统的GUI自动化测试也存在一定的局限性。安全苛刻系统是指系统功能一旦失效将引起财产、生命的重大损失以及环境可能遭到严重破坏的系统。它对系统功是能否正常、是否可预期执行等要求异常严格。安全苛刻系统的可靠性主要是通过测试来评估和验证的。通过对系统进行全面、大量的测试,为评估系统的可靠性提供证据。对于这样一类系统,测试流程如下:测试人员分析测试需求,然后编写测试用例,经过测试用例评审人员评审完后,开始执行测试用例,然后将测试结果反馈给开发人员。对此,传统的GUI自动化测试的缺点在于:(1)测试脚本不具有很好的可读性,测试用例评审人员很难确定测试脚本所表述的测试内容;(2)对于测试脚本编写人员,在参照测试用例编写测试脚本过程中,要耗费大量的时间,而且可能生成非正确性脚本;(3)不能很好的解决分布式系统自动化测试所存在的问题,主要是分布式系统中各个节点测试执行的协同问题。
目前,针对传统自动化测试所存在的问题,提出了一些改进。例如包括,建立被测系统的状态机转换模型,然后根据该状态机模型自动生成测试脚本;建立被测系统的输入输出所引起的状态转换序列,经过对该序列进行分析,自动确定各节点测试的协同关系。然而,前者只存在理论上的可行性,对大型复杂系统建立状态机转换模型基本上是不可行的,会存在状态空间爆炸的后果。后者所需的状态转换序列很难生成,而且对于一般测试用例评审人员不具有可读性。
发明内容
本发明针对目前GUI自动化测试存在的测试脚本编写任务繁重、确定测试脚本和测试用例的一致性耗费大量时间人力以及对分布式系统进行GUI自动化测试所面临的协同问题,提出了一种面向测试用例描述的GUI自动化测试系统及其测试方法。
一种面向测试用例描述的GUI自动化测试系统,所述的自动化测试系统包括测试管理子系统和测试执行子系统;其中,测试管理子系统包括三个子模块:测试用例自然描述语言元素库、测试用例转换模块以及测试任务管理监控模块;测试执行子系统也包括三个子模块:测试用例执行管理监控模块、测试脚本解释执行模块以及测试后续处理模块。测试管理子系统布置在一台测试总控机上,连接到被测系统所在的局域网络中,在被测系统的每个主机上布置一个测试执行子系统。测试任务管理监控模块和各测试节点的测试用例执行管理监控模块建立有网络消息通信。
所述的测试用例自然描述语言元素库存储有编辑测试用例的测试步骤所需的测试动作元素;所述的测试任务管理监控模块根据用户要完成的测试内容从测试用例自然描述语言元素库中选择相应的测试动作元素组织生成测试用例的测试步骤,并将生成的测试步骤发送给测试用例转换模块;所述的测试用例转换模块将收到的测试步骤转换为相应的测试脚本,并将该测试脚本发送给测试任务管理监控模块;所述的测试任务管理监控模块将所有的测试用例组成测试任务,并生成测试计划安排表,按照测试计划安排表,将测试用例的测试步骤对应的测试脚本,逐一分发到相应测试节点的测试用例执行管理监控模块;所述的测试用例执行管理监控模块实时接收测试脚本,将收到的测试脚本发送给测试脚本解释执行模块,并与接收到的测试脚本所涉及到的测试节点的测试用例执行管理监控模块建立网络消息通信,在测试脚本执行过程中,发送从本测试节点的测试脚本解释执行模块传递来的测试动作协同消息,以及接收从其它测试节点接收的测试动作协同消息传递给本测试节点的测试脚本解释执行模块;所述的测试脚本解释执行模块解释执行该测试脚本,操作被测节点系统的GUI控件,对被测节点的系统进行测试,并将每一步的测试结果传递给测试后续处理模块;所述的测试后续处理模块将接收到的测试结果写入测试结果文件中,并在该测试脚本执行完毕后将测试结果文件发送给测试用例执行管理监控模块,测试用例执行管理监控模块实时将收到的测试结果文件发送给测试任务管理监控模块;所述的测试任务管理监控模块接收各测试节点发回来的测试结果文件,生成测试报告,并提供给用户查看。
一种应用上述测试系统的面向测试用例描述的GUI自动化测试方法,具体为:
步骤1:用户根据测试用例需要完成的测试内容,使用测试管理子系统的测试任务管理监控模块从测试管理子系统的测试用例自然描述语言元素库中选取需要的测试动作元素,生成测试用例的测试步骤;
步骤2:测试用例转换模块将生成的测试用例的测试步骤转换成相应的测试脚本,然后判断用户是否继续编辑测试用例,若用户继续编辑,则转步骤1执行,若不再继续编辑,执行步骤3;
步骤3:测试任务管理监控模块组织所有测试用例,生成测试任务以及测试计划安排表,并按照测试计划安排表逐一将测试任务中的测试用例的测试步骤对应的测试脚本发送给相应测试节点的测试执行子系统;
步骤4:当前测试节点的测试执行子系统接收和执行测试脚本,具体包括以下步骤:
步骤4.1:测试执行子系统的测试用例执行管理监控模块实时接收测试脚本,将收到的测试脚本发送给测试执行子系统中的测试脚本解释执行模块执行,同时,测试用例执行管理监控模块还与接收到的测试脚本所涉及到的测试节点的测试用例执行管理监控模块建立网络消息通信;
步骤4.2:测试脚本解释执行模块对接收到的测试脚本进行解释,操作被测系统的GUI控件,完成对被测节点系统的功能测试,并将每一步测试结果发送给测试执行子系统中的测试后续处理模块;
步骤4.3:测试执行子系统中的测试后续处理模块将接收到的测试结果写入测试结果文件中,并在该测试脚本执行完毕后将测试结果文件发送给测试用例执行管理监控模块,测试用例执行管理监控模块实时将收到的测试结果文件发送给测试任务管理监控模块;
步骤5:判断该次测试任务是否执行结束,若是,测试任务管理监控模块整理收到的测试结果文件,生成测试报告,输出给用户,结束本次测试任务;否则,转步骤4执行。
相对于传统的GUI自动化测试系统,本发明的优点和积极效果在于:
(1)简化了繁重的测试脚本编写任务:用规格化的测试用例自然描述语言(测试执行元素)来对测试步骤进行描述,这样使得测试用例既保持了很好的可读性,又避免了按照传统测试用例编写方式编写的测试用例,语义上存在的二义性和不确定性,使得测试用例的评审人员只需审查测试用例的描述,无需设计测试脚本,从而能够控制测试脚本的执行内容,审查整个测试用例的执行内容;
(2)节省了时间、人力:测试脚本的自动化生成,使得能够从规格化测试用例测试执行元素描述的测试用例自动生成相应的测试脚本,测试脚本使用规格化的脚本语言来描述,使得能够被解释执行。这样一方面能够节省测试脚本的编写工作,另一方面能够保持测试脚本在语义上与测试用例保持一致,避免了人为按照测试用例编写出来的测试脚本与原有测试用例在语义上存在的误差。
(3)自动化实现测试用例中多测试点间测试脚本的测试动作的协同执行关系。在进行测试用例到测试脚本间的转换时,自动生成每个测试点要执行的测试脚本,同时在测试脚本中插入用来协同脚本间测试动作协同执行的脚本语句。这样测试人员只需按照测试流程编写测试用例,而不用考虑测试动作协同语句在测试脚本中应当插入的位置以及协同所涉及的测试点,减少了不必要的错误因素的发生。
附图说明
图1为本发明的GUI自动化测试系统的结构示意图;
图2为本发明的GUI自动化测试方法的步骤流程图;
图3为测试用例自然描述语言元素库中的部分元素示意图;
图4为规格化测试用例自然描述语言元素所描述的测试用例步骤的一个示意图;
图5为图4的测试用例步骤转换后所产生的测试脚本示意图。
具体实施方式
下面将结合附图和实施例对本发明作进一步的详细说明。
如图1所示,为本发明面向测试用例描述的GUI自动化测试系统。所述的系统包括两个模块:测试管理子系统1和测试执行子系统2。测试管理子系统1布置在测试总控机上,测试执行子系统2布置在被测系统的每个主机上,测试总控机接入被测系统所在的局域网络。布置有测试执行子系统2的被测系统的主机也称为测试节点。测试管理子系统1包括三个子模块:测试用例自然描述语言元素库11、测试用例转换模块12以及测试任务管理监控模块13。测试执行子系统2也包括三个子模块:测试用例执行管理监控模块21、测试脚本解释执行模块22以及测试后续处理模块23。
测试任务管理监控模块13根据用户要完成的测试内容组织生成测试用例的测试步骤,所述的测试步骤是测试任务管理监控模块13从测试用例自然描述语言元素库11选择要编辑的测试用例的测试步骤所需的测试动作元素组成的。测试任务管理监控模块13将生成的测试步骤发送给测试用例转换模块12。测试用例转换模块12将接收到的测试步骤,转换成相应的测试脚本,并将转换后的测试脚本发送给测试任务管理监控模块13。测试任务管理监控模块13将所有的测试用例组成测试任务,并生成测试计划安排表,按照测试计划安排表将测试用例的测试步骤对应的测试脚本逐一分发到相应的测试节点的测试用例执行管理监控模块21。相应的测试节点的测试执行子系统2执行测试脚本。测试用例执行管理监控模块21将接收到的测试脚本发送给测试脚本解释执行模块22解释执行,测试脚本解释执行模块22逐条执行测试脚本语句,操作被测节点系统的GUI控件,完成对被测节点系统的功能测试,并将测试脚本每一步执行的测试结果发送给测试后续处理模块23,测试后续处理模块23收集接收到的测试结果,并在测试脚本执行完毕后将执行该测试脚本得到的所有测试结果发送给测试用例执行管理监控模块21。测试用例执行管理监控模块21实时将收到的测试结果发送给测试任务管理监控模块13,测试任务管理监控模块13接收各测试节点发回来的测试结果,生成测试报告,并提供给用户查看。
测试管理子系统1的测试任务管理监控模块13和各测试节点的测试执行子系统2的测试用例执行管理监控模块21建立有网络消息通信,例如建立TCP/IP的socket连接。每个测试节点上的测试用例执行管理监控模块21负责与测试管理子系统1和执行测试步骤所涉及的测试节点的测试执行子系统2的测试用例执行管理监控模块21建立有网络消息通信,例如建立TCP/IP连接,负责测试执行中的消息数据通信,通信的消息数据以TCP/IP数据包进行传输。
测试用例自然描述语言元素库11用于向用户提供编辑测试用例的测试步骤所需的测试动作元素。测试用例自然描述语言元素库11中定义了测试步骤所涉及的测试动作元素,这些测试动作元素可以组合表达所有被测系统的GUI测试用例的测试步骤的描述内容。测试用例自然描述语言元素库11中的部分元素及其说明如图3所示,例如第6个测试动作元素:在***时间后,就表示测试步骤中描述的等待***时间。
测试用例转换模块12中存储了测试用例测试动作元素到相应的规格化测试脚本元素的转换规则。测试用例转换模块12按照该测试用例测试动作元素到相应的规格化测试脚本元素的转换规则,将测试用例的测试步骤中的测试动作元素自动化转换成相应的规格化测试脚本元素,从而将测试步骤转换成相应的测试脚本。测试用例可能涉及被测分布式系统中的若干个主机,每个主机可以看成一个节点,这些节点在测试里被称为测试节点。测试用例转换模块12在转换测试步骤的过程中为该测试用例的测试步骤所涉及的每个测试节点生成一个测试脚本,在测试脚本插入测试动作协同执行语句,测试动作协同语句位于测试动作语句之间,负责确定测试用例中各测试脚本的测试动作与用例中其它测试脚本的测试动作的协同执行顺序。例如,有如下两个测试脚本A和B,分别执行在A和B两个测试节点上。测试脚本A中的测试动作顺序为:A1,A2,X1,A3,脚本B中的测试动作顺序为:B1,B2,Y1,B3。在执行过程中,脚本A和脚本B独立执行。脚本A中的语句A3,在执行前,需要等待脚本B中的语句B1和B2执行完才能继续执行。当脚本A执行到语句X1时,等待脚本B的消息,内容为”gonext”,以判断是否继续执行;脚本B执行完B1和B2后,执行Y1,此时向A发送执行消息”gonext”,然后继续执行B3;A收到消息后,继续执行A3。发送的消息是以TCP/IP数据包形式传输的。测试动作协同语句插入的方法为:当测试步骤中临近的两条测试动作语句分属于不同的测试节点时,则在这两个测试动作语句之间插入两条测试动作协同语句,具体是:消息发送和消息接收语句;其中,消息发送语句写入前一个测试动作语句所属的测试节点的测试脚本中,位置为该测试动作语句转换成的对应测试脚本语句的后面;消息接收语句写入后一个测试动作语句所属的测试节点的测试脚本中,位置为该测试动作语句转换成的对应测试脚本语句的前面。
下面将举例说明测试用例的测试步骤转化为测试脚本的过程:例如,如图4所示,某一测试用例的4个测试步骤如下:
1.在A机器的窗口WindowA上,点击菜单[a]->[b]
2.在A机器的窗口WindowA上,设置控件[c]的值为123
3.在3秒后
4.在B机器的窗口WindowB上,观察控件[d]的值是否为90
该测试用例步骤的为:首先依次点击A机器上的窗口WindowA中的菜单[a]和[b],然后设置A机器上的窗口WindowA中控件[c]的值为123。等待三秒钟后,判断B机器上的窗口WindowB中的控件[d]的值是否为90。
由于测试用例中涉及两个测试节点A机器和B机器,所以应当生成两个测试脚本。测试用例转换模块12逐一读取每一条测试用例的测试步骤,从第1条语句中解析出动作执行的被测节点的名称(A机器)、窗口名(WindowA)、执行的动作(点击)和被执行的控件(菜单a和菜单b),从而可以在A机器的测试脚本中依次写入如下语句:clickmenu(WindowA,a)和clickmenu(WindowA,b)。同样,第2条语句可以分解出被测节点的名称(A机器)、窗口名(WindowA)、执行的动作(设置)、被执行的控件(c)和设置的值(123),对应写入脚本A(Ascript)的语句为:setvalue(WindowA,c,123)。第3条语句为:在3秒后,这是一条时间语句,可以转换成sleep(3000),Sleep中的参数单位为毫秒,将此条语句写入上面最近的一条语句所属的测试脚本中,即A机器的测试脚本中。最后一句分解出机器台位名(B机器)、窗口名(WindowB)、执行的动作(观察)、被执行的控件(d)和预期的值90,在B机器的测试脚本中写入:assert(WindowB,d,90)。因为第4条语句与第3条语句不属于同一个测试脚本,所以应当添加脚本动作协同语句,在第3条语句转换得到的测试脚本语句的位置后面添加消息发送语句:sendmessage(Bmachine),在第4条语句转换得到的测试脚本语句的位置前面添加消息接收语句:recvmessage(Amachine)。这样,当A机器的测试脚本中执行完sleep(3000)后,执行sendmessage(Bmachine)向B机器发送消息,而B机器执行recvmessage(Amachine)阻塞,等待接收A机器发送过来的消息,当收到A机器发送过来的消息后,开始执行B机器的测试脚本中recvmessage(Amachine)下面的测试脚本语句。
测试任务管理监控模块13将所有的测试用例组成测试任务,并生成测试计划安排表,按照测试计划安排表,将测试用例的测试步骤对应的测试脚本,逐一分发到相应测试节点的测试用例执行管理监控模块21。测试计划安排表是将测试任务队列中的测试用例按照一定的顺序,例如FCFS(First Come First Service,先来先服务)来进行安排的。测试任务管理监控模块13还实时收集各测试节点返回的测试结果,将测试结果进行汇总,生成测试报告,供用户查阅。
测试执行子系统2负责管理本测试节点上测试用例的执行。测试执行子系统2调用MSAA提供的服务,与被测系统的界面进行交互。所述的MSAA是Microsoft ActiveAccessibility的简称,类似DCOM(分布式组件对象模型)技术,通过访问UI(用户接口)程序暴露出一个接口,以供另一个程序对该GUI程序进行控制。
测试用例执行管理模块21实时接收从测试管理子系统1发送过来的测试脚本并发送给测试脚本解释执行模块22。测试用例执行管理模块21还与本次测试步骤执行所涉及到的测试节点的测试用例执行管理监控模块间自动化建立网络连接,传输测试动作协同消息。所述的测试动作协同消息包含在测试脚本中的测试动作协同语句中。测试用例执行管理模块21在测试脚本执行过程中,发送本测试节点的测试脚本解释执行模块22的测试动作协同消息给相关测试节点,或接收其它测试节点发送来的测试动作协同信息并传递给本测试节点的测试脚本解释执行模块22,并在测试脚本执行完成后将测试后续处理模块23收集的测试结果发送给测试任务管理监控模块13。
测试脚本解释执行模块22负责逐条解释执行测试脚本中的语句,自动化测试被测系统的GUI界面。测试脚本解释执行模块22通过控件属性如控件名、控件类型来获取控件的句柄,对控件进行操作,避免了按照屏幕绝对坐标获取控件的方式带来的弊端。调用MSAA服务操作被测节点系统的GUI界面,完成对被测节点系统的GUI功能测试。将在执行测试过程中产生的测试结果传送给测试后续处理模块23。
测试后续处理模块23将本次测试用例的测试步骤的执行结果写入到测试结果文件中,将该测试结果文件传递给测试用例执行管理监控模块21。测试用例执行管理监控模块21将测试结果文件发送给测试管理子系统1,完成一次测试用例的执行过程。
如图2所示,本发明一种面向测试用例描述的GUI自动化测试方法,具体步骤如下:
步骤1:生成测试用例的测试步骤。用户使用测试任务管理监控模块13从测试用例自然描述语言元素库11中的选取测试动作元素,生成所需要的测试用例的测试步骤,具体是用户根据测试用例需要完成的测试内容,从测试用例自然描述语言的元素库11中抽取需要的测试动作元素,添加到测试用例编辑框里,从而组成测试用例的测试动作序列,也就组成了测试用例的测试步骤。所述的测试动作元素的参数,是从存储被测系统的GUI控件元素的测试资源库中选取测试过程中需要操作的GUI控件的信息,来进行更新的。测试用例编辑环境使用QT图形界面库来开发的,测试用例自然描述语言元素库11存储在XML数据库中。图3给出了测试用例自然描述语言元素库11中的一些元素的示例。其中每个测试动作元素都是用中文进行描述,表示了相应的测试动作。
测试用例一般包含若干条描述测试动作的测试步骤。本发明方法针对测试步骤描述,提出一种测试用例自然描述语言,用来描述测试用例中的测试步骤,从而规范化测试用例中测试步骤的书写方式。测试用例自然描述语言库11中定义了测试用例中测试步骤编写所涉及的自然描述语言元素,也就是测试动作元素,这些测试动作元素可以组合表达所有被测系统的GUI测试用例的测试步骤描述内容。
步骤2:测试用例转换模块12将编辑好的测试用例转换成相应的测试脚本,然后判断用户是否继续编辑测试用例,若用户还要继续编辑,则转步骤1执行,若不再继续编辑,执行步骤3。测试用例转换模块12为测试用例中所涉及的每个测试节点生成一个测试脚本,这些测试脚本共同表达了测试用例所描述的测试内容。测试用例转换模块12是将测试用例自然描述语言所描述的测试用例步骤,转换成相应的测试脚本,完成测试用例到测试脚本的自动化转换。在测试脚本中插入有测试动作协同执行语句,测试动作协同语句位于测试动作语句之间,负责确定测试用例中各测试脚本的测试动作与测试用例中其它测试脚本的测试动作的协同执行顺序。
如图4是一个测试用例Case1的示例,该测试用例中涉及两个测试节点:A机器和B机器。图5为相应的转换后的两个测试脚本,分别为A机器的测试脚本Case1A和B机器的测试脚本Case1B,A机器的测试脚本所示就是用来完成图4中在A机器上进行的操作,B机器的测试脚本所示的就是用来完成图4中在B机器上进行的操作。针对图4中所示的测试步骤,测试用例转换模块12从每条动作语句中解析出机器名(A或B)、动作名(点击、设置和观察)、控件名(a、b、c和d)以及参数值。其中,图4中的第3条语句“在3秒后”为等待语句,没有指出所属机器,把这条语句划分到其上一条所属的机器脚本中,此处为A机器的测试脚本。第4条语句和第3条语句分属不同的机器,需要插入测试动作协同语句。当测试步骤中临近的两条测试动作语句分属于不同的测试节点时,则在这两个测试动作语句之间插入消息发送和消息接收语句两条测试动作协同语句。消息发送语句写入前一个测试动作语句所属的测试节点的测试脚本中,位置为该测试动作语句转换成的对应测试脚本语句的后面;消息接收语句写入后一个测试动作语句所属的测试节点的测试脚本中,位置为该测试动作语句转换成的对应测试脚本语句的前面。在将第4条语句转换并写入到B机器的测试脚本中后,在第3条语句所在的A机器的测试脚本中的最后位置添加发生信息语句:sendmessage(B),在第4条语句所在的B机器的测试脚本中的最前位置添加接收信息语句:recvmessage(A),通过添加的发送和接收信息语句实现两个机器测试脚本的协同。
步骤3:测试任务管理监控模块13将已有编辑好的测试用例组织成一次测试任务,并生成测试计划安排表,然后进行自动化测试。测试任务管理监控模块13在测试过程中,按照一定顺序,例如先来先服务的顺序,逐一将测试用例的测试脚本以TCP/IP数据包形式发送到相应的测试节点上,测试节点上的测试执行子系统负责测试用例的执行。测试管理子系统与测试节点间通过TCP/IP报文进行网络信息传输。
步骤4:当前测试节点的测试执行子系统2接收和执行测试脚本。
步骤4.1:测试用例执行管理监控模块21实时接收测试脚本,将收到的测试脚本发送给测试脚本解释执行模块22执行,同时,测试用例执行管理监控模块21还与接收到的测试脚本所涉及到的测试节点的测试用例执行管理监控模块21建立网络消息通信。
步骤4.2:测试脚本解释执行模块22对接收到的测试脚本进行解释,操作被测系统的GUI控件,对被测节点系统进行功能测试,并将每一步测试结果发送给测试后续处理模块23。
步骤4.3:测试后续处理模块23将接收到的测试结果写入测试结果文件中,并在该测试脚本执行完毕后将测试结果文件发送给测试用例执行管理监控模块21,测试用例执行管理监控模块21实时将收到的测试结果文件发送给测试任务管理监控模块13。
各测试节点的测试用例执行管理监控模块21通过TCP/IP网络数据包通信,发送将本测试节点的测试脚本解释执行模块22的测试动作协同消息,或接收其它测试节点发送来的测试动作协同消息并传递给本测试节点的测试脚本解释执行模块22,从而实现各测试节点间的测试脚本解释执行模块22中的测试动作协同的消息通信,完成各测试节点间测试动作的协同执行。
本发明实施例中,测试节点A机器和B机器在收到测试用例后开始执行自动化测试,首先A机器和B机器建立TCP/IP信道连接,A机器IP为:192.168.0.2,B机器的IP为:192.168.0.3,端口统一为9055;然后A机器和B机器分别调用测试脚本解释执行模块22开始执行测试,测试节点A机器和B机器顺序解释、执行测试脚本。A机器从第1条语句中解析出窗口名WindowA、控件名a和执行动作点击,然后调用MSAA的服务,在当前系统中寻找窗口WindowA,获取该窗口句柄,然后获取窗口中菜单a的句柄,然后执行点击选中的操作。第2条语句执行类似。第3条语句,在获取控件c的句柄后,调用MSAA提供的修改控件value的函数接口,修改该控件的值为123。执行到第4条语句时,休眠3秒钟。然后执行sendmessage(B),此时先将机器名“B”转换成对应的B机器的IP:192.168.0.3,然后向该IP发送消息“gonext”,告知B机器可以执行下一条测试脚本语句。与此同时,B机器上的测试脚本执行到recvmessage(A),阻塞等待A机器发过来的消息,B机器先查找A机器的对应IP,然后阻塞等待A机器发过来的消息,在收到消息并确认是从A机器发过来后,开始顺序执行下面的测试脚本语句。
步骤5:判断该次测试任务是否执行结束,若是,测试管理子系统1整理测试结果,生成测试报告,结束测试任务;否则,转步骤4执行。测试管理子系统1实时接收存储测试节点发送回来的测试结果。每个测试节点通过测试后续处理模块23将测试执行结果写入到测试结果文件中,A机器与B机器的测试结果文件分别为:Case1ARes和Case1BRes。每个测试节点将测试结果文件发送回测试管理子系统1,从而完成本次测试用例的执行。如果测试任务队列中的还有未执行的测试用例,则跳至步骤4,继续执行,直至将测试任务中的所有测试用例全部执行完毕。
通过本发明测试系统和方法,用户只需要使用可读性强的测试用例自然描述语言元素库11中的动作执行元素来编辑测试步骤,由测试管理子系统1自动生成支持测试分布式系统的测试脚本。这样不仅能方便用户编写用例,规范化用例编写格式,同时也能减少用户手动编写测试脚本的和将测试脚本序列化的工作。将编辑好的测试用例组织成测试任务,然后由测试管理子系统1和测试执行子系统2自动执行。用户在测试任务执行结束后,查看测试结果。用户可一次执行多个测试用例,将测试监控的工作交给本发明的自动化测试系统来完成,用户只需进行测试准备和获取测试结果,提高了自动化测试的效率。
Claims (8)
1.一种面向测试用例描述的GUI自动化测试系统,其特征在于,所述的自动化测试系统包括测试管理子系统和测试执行子系统;其中,测试管理子系统布置在测试总控机上,测试执行子系统布置在被测系统的每个测试节点上,测试总控机接入被测系统所在的局域网络;测试管理子系统包括三个子模块:测试用例自然描述语言元素库、测试用例转换模块以及测试任务管理监控模块;测试执行子系统也包括三个子模块:测试用例执行管理监控模块、测试脚本解释执行模块以及测试后续处理模块;所述的测试任务管理监控模块和各测试节点的测试用例执行管理监控模块建立有网络消息通信;
所述的测试用例自然描述语言元素库存储有编辑测试用例的测试步骤所需的测试动作元素;所述的测试任务管理监控模块根据用户要完成的测试内容从测试用例自然描述语言元素库中选择相应的测试动作元素组织生成测试用例的测试步骤,并将生成的测试步骤发送给测试用例转换模块;所述的测试用例转换模块中存储了测试动作元素到相应的规格化测试脚本元素的转换规则,测试用例转换模块按照该转换规则将收到的测试步骤转换为相应的测试脚本,并将该测试脚本发送给测试任务管理监控模块;
所述的测试任务管理监控模块将所有的测试用例组成测试任务,并生成测试计划安排表,按照测试计划安排表,将测试用例的测试步骤对应的测试脚本,逐一分发到相应测试节点的测试用例执行管理监控模块;
所述的测试用例执行管理监控模块实时接收测试脚本,将收到的测试脚本发送给测试脚本解释执行模块,并与接收到的测试脚本所涉及到的测试节点的测试用例执行管理监控模块建立网络消息通信,在测试脚本执行过程中,发送从本测试节点的测试脚本解释执行模块传递来的测试动作协同消息,以及接收从其它测试节点接收的测试动作协同消息传递给本测试节点的测试脚本解释执行模块;所述的测试脚本解释执行模块解释执行收到的测试脚本,操作被测节点系统的GUI控件,对被测节点的系统进行测试,并将每一步的测试结果传递给测试后续处理模块;所述的测试后续处理模块将接收到的测试结果写入测试结果文件中,并在该测试脚本执行完毕后将测试结果文件发送给测试用例执行管理监控模块,测试用例执行管理监控模块实时将收到的测试结果文件发送给测试任务管理监控模块;
所述的测试任务管理监控模块接收各测试节点发回来的测试结果文件,生成测试报告,并提供给用户查看。
2.根据权利要求1所述的一种面向测试用例描述的GUI自动化测试系统,其特征在于,所述的测试用例转换模块,按照测试动作元素到相应的规格化测试脚本元素的转换规则,将测试步骤中的测试动作元素转换成相应的规格化测试脚本元素,进而得到测试脚本,针对分布式被测系统的测试用例,测试用例转换模块为该测试用例的测试步骤所涉及的每个测试节点生成一个测试脚本,并在测试脚本中插入测试动作协同消息所需的测试动作协同语句,保证各测试脚本间具有测试先后顺序的测试脚本语句顺序执行。
3.根据权利要求2所述的一种面向测试用例描述的GUI自动化测试系统,其特征在于,所述的测试动作协同语句,插入的方法为:当测试步骤中临近的两条测试动作语句分属于不同的测试节点时,则在这两个测试动作语句之间插入两条测试动作协同语句,具体是:消息发送和消息接收语句;其中,消息发送语句写入前一个测试动作语句所属的测试节点的测试脚本中,位置为该测试动作语句转换成的对应测试脚本语句的后面;消息接收语句写入后一个测试动作语句所属的测试节点的测试脚本中,位置为该测试动作语句转换成的对应测试脚本语句的前面。
4.根据权利要求1所述的一种面向测试用例描述的GUI自动化测试系统,其特征在于,所述的测试脚本解释执行模块,从测试脚本的每条语句中解析出相应的操作对象、操作动作类型和操作值,调用MSAA服务操作被测节点系统的GUI界面;其中,操作对象包含:被操作的控件、被操作控件所在的机器名和被操作控件所在的窗口名,操作动作类型包括:选择、点击、发送消息,操作值包括:输入值和被测软件的输出值。
5.一种面向测试用例描述的GUI自动化测试方法,其特征在于,所述的测试方法包括以下步骤:
步骤1、用户通过测试管理子系统的测试任务管理监控模块,根据测试用例要完成的测试内容,从测试管理子系统的测试用例自然描述语言元素库中选择相应的测试动作元素组织生成测试用例的测试步骤;
步骤2、测试管理子系统的测试用例转换模块将生成的测试用例的测试步骤转换成相应的测试脚本,然后判断用户是否继续编辑测试用例,若用户继续编辑,则转步骤1执行,若不再继续编辑,执行步骤3;
步骤3、测试任务管理监控模块组织所有测试用例,生成测试任务以及测试计划安排表,并按照测试计划安排表逐一将测试任务中的测试用例的测试步骤对应的测试脚本发送给相应测试节点;
步骤4、当前测试节点的测试执行子系统接收和执行测试脚本,具体包括以下步骤:
步骤4.1:测试执行子系统的测试用例执行管理监控模块实时接收测试脚本,将收到的测试脚本发送给测试执行子系统中的测试脚本解释执行模块执行,同时,测试用例执行管理监控模块还与接收到的测试脚本所涉及到的测试节点的测试用例执行管理监控模块建立网络消息通信;
步骤4.2:测试脚本解释执行模块对接收到的测试脚本进行解释,操作被测系统的GUI控件,完成对被测节点系统的功能测试,并将每一步测试结果发送给测试执行子系统中的测试后续处理模块;
步骤4.3:测试执行子系统中的测试后续处理模块将接收到的测试结果写入测试结果文件中,并在该测试脚本执行完毕后将测试结果文件发送给测试用例执行管理监控模块,测试用例执行管理监控模块实时将收到的测试结果文件发送给测试任务管理监控模块;
步骤5、判断该次测试任务是否执行结束,若是,测试任务管理监控模块整理收到的测试结果文件,生成测试报告,输出给用户,结束本次测试任务;否则,转步骤4执行。
6.根据权利要求5所述的一种面向测试用例描述的GUI自动化测试方法,其特征在于,步骤2中所述的测试用例转换模块将测试步骤转换成相应的测试脚本,具体是:测试用例转换模块为该测试用例的测试步骤中所涉及的每个测试节点生成一个测试脚本,测试用例转换模块逐一读取测试步骤的每一条语句,从中解析出动作执行的被测节点的名称、窗口名、执行的动作和被执行的控件,然后在该条语句所解析得到的被测节点的测试脚本中,按照测试动作元素到相应的规格化测试脚本元素的转换规则,将测试用例的测试步骤中的测试动作元素自动化转换成相应的规格化测试脚本元素,从而将测试步骤转换成相应的测试脚本生成对应的测试脚本语句,同时在生成的测试脚本中插入有测试动作协同语句,用于使各测试脚本间具有测试先后顺序的测试脚本语句顺序执行。
7.根据权利要求6所述的一种面向测试用例描述的GUI自动化测试方法,其特征在于,所述的测试动作协同语句,插入的方法为:当测试步骤中临近的两条测试动作语句分属于不同的测试节点时,则在这两个测试动作语句之间插入两条测试动作协同语句,具体是:消息发送和消息接收语句;所述的消息发送语句写入前一个测试动作语句所属的测试节点的测试脚本中,位置为该测试动作语句转换成的对应测试脚本语句的后面;所述的消息接收语句写入后一个测试动作语句所属的测试节点的测试脚本中,位置为该测试动作语句转换成的对应测试脚本语句的前面。
8.根据权利要求5所述的一种面向测试用例描述的GUI自动化测试方法,其特征在于,所述的步骤4.2中测试脚本解释执行模块对接收到的测试脚本进行解释,操作被测系统的GUI控件,具体是:测试脚本解释执行模块从测试脚本的每条语句中解析出相应的操作对象、操作动作类型和操作值,调用MSAA服务操作被测节点系统的GUI界面;其中,操作对象包含:被操作的控件、被操作控件所在的机器名和被操作控件所在的窗口名,操作动作类型包括:选择、点击、发送消息,操作值包括:输入值和被测软件的输出值。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN 201110099266 CN102156673B (zh) | 2011-04-20 | 2011-04-20 | 面向测试用例描述的gui自动化测试系统及其测试方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN 201110099266 CN102156673B (zh) | 2011-04-20 | 2011-04-20 | 面向测试用例描述的gui自动化测试系统及其测试方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN102156673A CN102156673A (zh) | 2011-08-17 |
CN102156673B true CN102156673B (zh) | 2013-09-18 |
Family
ID=44438179
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN 201110099266 Expired - Fee Related CN102156673B (zh) | 2011-04-20 | 2011-04-20 | 面向测试用例描述的gui自动化测试系统及其测试方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN102156673B (zh) |
Families Citing this family (32)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103077110B (zh) * | 2011-10-25 | 2015-11-25 | 阿里巴巴集团控股有限公司 | 一种测试方法及装置 |
CN102508775A (zh) * | 2011-10-31 | 2012-06-20 | 彭勇 | 一种交互式自动化测试系统 |
CN102541730B (zh) * | 2011-12-08 | 2014-08-27 | 北京空间飞行器总体设计部 | 一种航天器测试脚本语义识别与自动生成方法 |
CN103927255B (zh) * | 2013-01-16 | 2019-01-22 | 腾讯科技(深圳)有限公司 | 基于云测试系统的软件测试方法、云测试系统及其客户端 |
CN104423822B (zh) * | 2013-08-30 | 2019-04-02 | 腾讯科技(深圳)有限公司 | 录制自动化测试脚本的方法及装置 |
CN103530231B (zh) * | 2013-10-12 | 2017-02-22 | 北京京东尚科信息技术有限公司 | 一种基于业务流程控制的应用程序测试方法及系统 |
CN104778117A (zh) * | 2014-01-14 | 2015-07-15 | 中国移动通信集团浙江有限公司 | 一种测试阅读软件页面切换流畅性的方法及装置 |
CN105824747A (zh) * | 2015-01-27 | 2016-08-03 | 程文彬 | 一种用于软件自动化测试的云服务系统 |
CN104915290B (zh) * | 2015-05-28 | 2018-07-31 | 小米科技有限责任公司 | 应用测试方法及装置 |
CN106294111A (zh) * | 2015-06-02 | 2017-01-04 | 富士通株式会社 | 为多个业务规则生成测试实例的方法和装置 |
CN105242134B (zh) | 2015-09-22 | 2018-06-19 | 许继集团有限公司 | 一种适用于智能高压设备系统级测试的分布式测试方法 |
CN105446879A (zh) * | 2015-11-13 | 2016-03-30 | 浪潮电子信息产业股份有限公司 | 一种基于分布式计算的自动化测试框架 |
TWI615005B (zh) * | 2016-06-24 | 2018-02-11 | 財團法人電信技術中心 | 網路效能的測試系統與測試方法 |
CN106201883B (zh) * | 2016-07-15 | 2019-04-19 | 北京捷科智诚科技有限公司 | 一种测试分析平台 |
CN107231251A (zh) * | 2017-05-23 | 2017-10-03 | 中国电子科技集团公司第四十研究所 | 一种网络化分布式测试系统的多节点协同控制方法 |
CN107526679A (zh) * | 2017-07-13 | 2017-12-29 | 深圳市小牛在线互联网信息咨询有限公司 | 自动化测试框架、基于其上的自动化测试方法、存储介质和计算机设备 |
CN109308250A (zh) * | 2017-07-26 | 2019-02-05 | 上海富瀚微电子股份有限公司 | 一种gui自动化测试方法及系统 |
CN107885658B (zh) * | 2017-10-31 | 2019-06-21 | 平安科技(深圳)有限公司 | 测试前置实现方法、装置、终端设备及存储介质 |
CN107908563A (zh) * | 2017-11-23 | 2018-04-13 | 中国航空无线电电子研究所 | 测试飞行任务计划软件人机交互界面的测试系统 |
CN108132886A (zh) * | 2018-01-08 | 2018-06-08 | 携程旅游信息技术(上海)有限公司 | 呼叫中心gui的测试方法及系统、计算机可读存储介质 |
CN108776604A (zh) * | 2018-05-23 | 2018-11-09 | 网易(杭州)网络有限公司 | 目标任务的执行方法及系统 |
CN109508233A (zh) * | 2018-07-27 | 2019-03-22 | 北京中电普华信息技术有限公司 | 一种计算脚本并行处理方法及装置 |
CN109388564B (zh) * | 2018-09-26 | 2021-07-06 | 广州云测信息技术有限公司 | 一种测试方法、装置及电子设备 |
CN109815127B (zh) * | 2018-12-21 | 2022-11-15 | 浙江数链科技有限公司 | 自动化脚本转换方法、装置、计算机设备和存储介质 |
CN109766271B (zh) * | 2018-12-22 | 2022-03-11 | 中国平安人寿保险股份有限公司 | 混合应用自动化测试方法、装置、电子设备及存储介质 |
CN109726134B (zh) * | 2019-01-16 | 2023-02-07 | 中国平安财产保险股份有限公司 | 接口测试方法和系统 |
CN112231235B (zh) * | 2020-12-10 | 2021-03-30 | 广东睿江云计算股份有限公司 | 基于多方协作的测试用例编写及测试方法及其系统 |
CN112559372B (zh) * | 2020-12-24 | 2024-05-14 | 南方电网数字平台科技(广东)有限公司 | 界面测试用例的生成方法、系统以及存储介质 |
CN113419965A (zh) * | 2021-07-15 | 2021-09-21 | 中国银行股份有限公司 | 一种多浏览器兼容性测试系统及方法 |
CN113392031A (zh) * | 2021-07-30 | 2021-09-14 | 重庆长安新能源汽车科技有限公司 | 一种基于Doors系统的测试用例自动生成测试脚本的方法 |
CN113849399B (zh) * | 2021-09-13 | 2023-06-30 | 北京计算机技术及应用研究所 | 多国产化平台下的多机协同软件的自动化测试系统和方法 |
CN114860583B (zh) * | 2022-04-18 | 2022-12-02 | 珠海视熙科技有限公司 | 基于数据驱动的数码变焦测试方法、装置及设备 |
Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101034370A (zh) * | 2006-03-10 | 2007-09-12 | 大唐移动通信设备有限公司 | 软件系统多用户特性测试方法和系统 |
-
2011
- 2011-04-20 CN CN 201110099266 patent/CN102156673B/zh not_active Expired - Fee Related
Patent Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101034370A (zh) * | 2006-03-10 | 2007-09-12 | 大唐移动通信设备有限公司 | 软件系统多用户特性测试方法和系统 |
Non-Patent Citations (4)
Title |
---|
余丹等.面向航天器测试领域的可定制数据查询分析方法.《计算机应用》.2009,第29卷第194-197页. |
兰孝文.软件自动化测试用例表达及用例生成的研究.《成都理工大学硕士学位论文》.2008,第1-50页. |
软件自动化测试用例表达及用例生成的研究;兰孝文;《成都理工大学硕士学位论文》;20080901;第1-50页 * |
面向航天器测试领域的可定制数据查询分析方法;余丹等;《计算机应用》;20090722;第29卷;第194-197页 * |
Also Published As
Publication number | Publication date |
---|---|
CN102156673A (zh) | 2011-08-17 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN102156673B (zh) | 面向测试用例描述的gui自动化测试系统及其测试方法 | |
Kundu et al. | A novel approach to generate test cases from UML activity diagrams. | |
Sarma et al. | Automatic test case generation from UML sequence diagram | |
CN102141962A (zh) | 一种安全性分布式测试框架系统及其测试方法 | |
CN102163173B (zh) | 一种分布式信息系统接口自动化测试方法 | |
CN107368408A (zh) | 一种面向接口的软件故障注入自动化测试方法 | |
CN101739334A (zh) | 嵌入式软件自动化测试方法 | |
CN101901186A (zh) | 一种嵌入式系统可靠性分析与评估方法 | |
CN104375934B (zh) | 一种Android手机软件可靠性测试方法 | |
CN101888318B (zh) | 一种通信系统性能指标测试的系统和方法 | |
CN102508775A (zh) | 一种交互式自动化测试系统 | |
CN103605606B (zh) | 一种可自动转换的嵌入式软件测试用例批量执行方法 | |
CN103353857A (zh) | 一种变电站综合监测单元的通信测试方法 | |
CN112749083A (zh) | 一种测试脚本生成方法及装置 | |
Nogueira et al. | Guided test generation from CSP models | |
CN106598843B (zh) | 一种基于程序分析的软件日志行为自动识别方法 | |
CN111176995B (zh) | 一种基于大数据测试用例的测试方法和测试系统 | |
Saddler et al. | EventFlowSlicer: a tool for generating realistic goal-driven GUI tests. | |
CN112527645B (zh) | Opc-ua一致性自动测试方法 | |
CN112346996B (zh) | 负荷辨识模块可靠性的自主编排测试方法 | |
CN114064469A (zh) | 接口自动化测试方法及存储介质 | |
CN103324573A (zh) | 一种基于GUI协议状态机建模的Peach平台扩展方法 | |
CN113434387A (zh) | 一种基于脚本驱动的自动化测试工具及系统 | |
CN100442729C (zh) | 网络协议一致性测试中被测系统的配置方法 | |
CN112231222A (zh) | 一种面向对象通信协议的自动化测试方法及系统 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant | ||
C17 | Cessation of patent right | ||
CF01 | Termination of patent right due to non-payment of annual fee |
Granted publication date: 20130918 Termination date: 20140420 |