一种基于事件模拟的用户界面测试方法及装置的制作方法

文档序号:6352989阅读:442来源:国知局
专利名称:一种基于事件模拟的用户界面测试方法及装置的制作方法
一种基于事件模拟的用户界面测试方法及装置
技术领域
本发明涉及用户界面测试领域,特别是涉及一种基于事件模拟的用户界面测试方 法及装置。
背景技术
随着互联网的广泛应用,网站上的网页的内容、布局、样式常常需要变动,这导致 在项目的升级过程中,由前端用户界面的变动而引入的新缺陷(BUG)数量越来越多,在其 他的软件产品中也同样存在这样的问题,即用户界面的修改会导致项目的新BUG,因此需要 有一种比较好的测试方法可以对用户界面进行有效测试。目前已有的测试工具,主要有两种类型第一种类型是简单模拟鼠标轨迹,即测试 脚本为鼠标经过的坐标轨迹和在轨迹上的点击。在这种方式下,当用户界面布局有所改变 的时候,鼠标点击的轨迹也需要随之变化,所以测试脚本就得完全重做。第二种类型是基于 事件模拟对用户界面进行测试,即模拟在用户界面的控件上发生的各种事件。通过判断用 户界面的控件对模拟的事件是否能够正常响应,就能够发现用户界面是否存在错误。由于 这种方式针对的测试对象是控件,而控件是可以随着布局改变的,这种方式可以有效避免 用户界面的布局发生改变后,测试脚本必须完全重做的情况发生,但在现有技术的这种方 式下,基于事件的模拟仅是简单模拟,即只是在某个需要测试的控件上模拟一个简单的浏 览器事件,却不考虑事件与事件之间、事件与控件之间、控件与控件之间的关联性,例如在 按钮A上模拟一个单击(click)事件,再在按钮B上模拟一个单击事件,这两次模拟是割 裂开的,而实际上,鼠标不可能凭空从按钮A飞到按钮B,在这两次单击事件之间,一定还发 生了鼠标移动事件,由于不考虑事件与事件之间、事件与控件之间、控件与控件之间的关联 性,很可能会出现测试的事件没有发生错误,而与测试事件相关的其他事件却发生错误但 正好没有被测试到的情况。以上例来说,有可能对按钮A的单击与对按钮B的单击都没有 出错,但是从按钮A移动到按钮B时,用户界面却出现了错误的响应,由于没有测试这种情 况,所以也就无法发现这个错误。仅靠人工去考虑所有需要测试的控件与事件是非常困难 的,很容易发生遗漏,也就是说,现有技术的基于事件模拟对用户界面测试的方法很容易出 现漏测的情况。请参考图1,图1为现有技术中基于事件模拟进行用户界面测试的方法的流程图。 首先步骤11接收测试用例,测试用例中描述了需要测试的事件以及事件发生的控件。步骤 12根据测试用例发出无逻辑关系的简单事件模拟请求,所谓的无逻辑关系是指每个测试的 事件之间是割裂的。步骤13直接根据步骤12中的请求调用上层工作环境接口创建事件。 步骤14记录在事件发生过程中的运行日志。在这种方法下,测试方法本身对测试逻辑是否 合理不做判断,在什么控件上模拟什么事件,完全由测试人员自行决定,这增加了测试人员 的工作量,也很容易出现漏测的现象。
发明内容为了解决现有技术中基于事件模拟进行用户界面测试中很容易漏测的问题,本发 明提供了一种基于事件模拟的用户界面测试方法,具体技术方案包括以下步骤步骤1 接收测试用例,所述测试用例包含需要测试的事件的类型说明以及事件 发生的控件的类型说明;步骤2 根据测试用例发出当前事件模拟请求;步骤3 判断当前事件的合理性及完整性,并根据合理性及完整性对当前事件进 行处理;步骤4 通过调用上层工作环境接口创建当前事件;步骤5 记录当前事件的运行日志。根据本发明的一优选实施例,所述步骤3包括判断控件的可操作性。根据本发明的一优选实施例,控件不可操作的情况包括控件被隐藏、控件被覆盖 或控件被剪裁。根据本发明的一优选实施例,所述方法在控件不可操作的情况下返回false值并 结束当前事件模拟请求。根据本发明的一优选实施例,在控件可操作的情况下所述步骤3还包括判断当前 事件是否可分解及判断当前事件与上一个创建的事件之间是否存在需要补充的事件。根据本发明的一优选实施例,在当前事件可分解的情况下,所述方法还包括对当 前事件分解后得到的一系列事件逐一发出当前事件模拟请求。根据本发明的一优选实施例,在当前事件与上一个创建的事件之间存在需要补充 的事件时,所述方法还包括对需要补充的事件发出当前事件模拟请求。根据本发明的一优选实施例,在当前事件不可分解且与上一个创建的事件之间不 存在需要补充的事件时,所述步骤3还包括将当前事件保存为上一个创建的事件。本发明还提供了一种基于事件模拟的用户界面测试装置,包括接收单元,用于接收测试用例,所述测试用例包含需要测试的事件的类型说明以 及事件发生的控件的类型说明;请求单元,用于根据测试用例发出当前事件模拟请求;判断单元,用于判断当前事件的合理性及完整性,并根据合理性及完整性对当前 事件进行处理;创建单元,用于通过调用上层工作环境接口创建当前事件;记录单元,用于记录当前事件的运行日志。根据本发明的一优选实施例,判断单元进一步包括控件状态判断单元,用于判断 控件的可操作性。根据本发明的一优选实施例,控件不可操作的情况包括控件被隐藏、控件被覆盖 或控件被剪裁。根据本发明的一优选实施例,所述装置在控件不可操作的情况下返回false值并 结束当前事件模拟请求。根据本发明的一优选实施例,在控件可操作的情况下判断单元进一步包括事件分 解判断单元,用于判断当前事件是否可分解,及事件补充判断单元,用于判断当前事件与上一个创建的事件之间是否存在需要补充的事件。根据本发明的一优选实施例,在当前事件可分解的情况下,事件分解判断单元还 用于对当前事件分解后得到的一系列事件逐一调用请求单元。根据本发明的一优选实施例,在当前事件与上一个创建的事件之间存在需要补充 的事件时,事件补充判断单元还用于对需要补充的事件调用请求单元。根据本发明的一优选实施例,在当前事件不可分解且与上一个创建的事件之间不 存在需要补充的事件时,判断单元还包括事件保存单元,用于将当前事件保存为上一个创 建的事件。由以上技术方案可以看出,应用本发明的基于事件模拟的用户界面测试方法和装 置,在用户界面测试中可以很好地应对用户界面布局改变的情况,并且由于考虑了事件之 间的联动性,在每次事件模拟请求中,都会考虑控件、事件之间的逻辑关系,自动产生符合 请求模拟的事件的逻辑关系的测试行为,可以很好地避免漏测的情况出现。

图1为现有技术中基于事件模拟的用户界面测试方法流程示意图;图2为本发明中基于事件模拟的用户界面测试方法总流程示意图;图3为本发明中基于事件模拟的用户界面测试方法实施例流程示意图;图4为本发明中基于事件模拟的用户界面测试装置总体结构示意框图;图5为本发明中基于事件模拟的用户界面测试装置实施例结构示意框图。
具体实施方式为了使本发明的目的、技术方案和优点更加清楚,下面结合附图和具体实施例对 本发明进行详细描述。请参考图2,图2是本发明实施例中基于事件模拟的用户界面测试方法总流程示 意图。该方法主要包括以下步骤步骤101 接收测试用例,测试用例包含有事件类型说明和事件发生的控件类型 说明,即说明在什么控件上请求模拟什么事件,如果该事件需要传递参数,则请求中还包含 该事件的参数说明。测试用例是由测试人员编写好的,其目的是为了通过这些测试用例的运行观察系 统的响应,从而发现用户界面是否有错误发生。步骤102 根据测试用例发出当前事件模拟请求。测试用例描述了需要测试的事 件以及触发这些事件的控件,因此步骤102中会根据步骤101中的测试用例发出当前事件 的模拟请求。步骤103 判断当前事件合理性与完整性,并根据当前事件的合理性与完整性对 当前事件进行相应的处理。所谓的当前事件的合理性,指的是当前事件的发生是符合测试 逻辑的,即在当前的用户界面下,事件的确是可以发生的。所谓当前事件的完整性,是指由 于当前事件本身的性质决定了当前事件的发生跟其他事件有关或当前事件的发生与上一 个事件有关。步骤104 通过调用上层工作环境接口创建当前事件。这是真实地产生了一个经步骤103处理后的当前事件,即真正的测试行为。所谓上层工作环境,就是测试行为所处的 环境,例如在WEB用户界面测试中,调用上层工作环境接口即调用浏览器接口。步骤105 记录当前事件运行日志。事件运行的日志中记录了事件发生时的系统 运行状况,通过事件运行日志,测试人员就可以发现用户界面中可能存在的缺陷。下面通过具体的实施例对上述方法进行详细描述请一并参考图2及图3,图3为本发明提供的基于事件模拟的用户界面测试方法实 施例流程示意图。步骤1011 接收测试用例,测试用例包含有事件类型说明和事件发生的控件类型 说明,即说明在什么控件上请求模拟什么事件,如果该事件需要传递参数,则请求中还包含 该事件的参数说明。步骤1021 发出当前事件模拟请求。根据测试用例或者系统运行过程中的需要发 出事件模拟请求,请求中包含有需要测试的事件以及触发这些事件的控件说明。步骤1031 判断控件是否可操作,是则执行步骤1032,否则返回false值并终止该 次事件模拟请求,执行步骤1051。控件状态是否可操作是指控件是否可见,控件不可见有可能是因为用户界面布局 调整以后,该控件被隐藏或被别的控件覆盖或被剪裁。控件被隐藏有可能是在用户界面变 化之后,业务逻辑使得该控件不在UI (用户界面)上出现了。控件被覆盖有可能是在用户界 面变化后,某个控件被另一个控件挡住,例如某个按钮(button)上叠加了另外一个按钮, 这时在下面的那个按钮就是不可见的。控件被剪裁,是指在CSS中的剪裁样式,使得控件部 分区域不可见。假设要测试不可操作的控件被单击时的反应,直接在该控件上模拟产生一 个click事件,有可能出现该控件上的click事件并不出错的现象,从而导致我们无法发现 应该发现的UI错误。实际上当控件不可操作时是不可能被点击的,不应该模拟该事件的产 生,而是应该直接返回false值。事实上,当控件不可操作情况发生,正说明有可能发生了 用户界面(UI)错误,如一个按钮不该覆盖在另一个按钮上。步骤1032 判断当前事件是否可以分解,是则将当前事件分解为一系列事件并针 对分解后的一系列事件发出当前事件模拟请求,否则执行步骤1033。事件可分解指的是某个浏览器事件的发生,是由一系列事件组合发生后触发的, 例如双击(doubleclick)事件,它是由鼠标按下(mousedown)事件、鼠标弹起(mouseup)事 件、单击(click)事件、鼠标按下事件、鼠标弹起事件依次顺序发生后才触发的。如果仅测 试doubleclick事件而没有测试在doubleclick事件发生前必然发生的一系列事件,那么 有可能在实际使用中,用户按得快不报错,用户按得慢就出错的现象。这是因为在按得慢的 情况下,浏览器有可能认为发生了两次单击事件,而单击事件是有错误产生的,但是却由于 没有测试而无法得知这个错误,这显然是我们不希望看到的。因此在本发明中,将对事件是 否可分解进行判断,在某个事件的发生可以分解为一系列事件组合发生时,将对这一系列 事件分别发出事件模拟请求。步骤1033 判断当前事件与上一个创建的事件之间是否存在需要补充的事件,是 则补充当前事件与上一个创建的事件间缺少的事件并针对缺少的事件发出当前事件模拟 请求,否则执行步骤1034。当前事件与上一事件之间存在需要补充的事件,指的是当前事件与上一个创建的事件之间存在着逻辑上的联系,在这两者依次发生的时候,一定必须在其间发生其他事件, 否则这两个事件不可能连续发生。例如当前请求的是在控件B上产生mousedown事件,如果 之前创建的事件为控件A上的mousedown事件,那么很显然,不可能连续发生两次mousedown 事件,因此针对这种情况,在本发明中,将先在控件A上补充一个mouseup事件模拟请求。步骤1033中在判断当前事件与上一事件之间是否存在需要补充的事件时,需要 从上一事件存储装置中读取上一事件的信息,包括上一事件的类型以及事件发生的对象。步骤1034 保存当前事件为上一个创建的事件。即更新上一事件存储装置中的上 一事件信息,将上一事件变量值改为当前请求的模拟事件。步骤1041 调用上层工作环境接口创建当前事件。所谓上层工作环境,就是测试 行为所处的环境,例如在WEB用户界面测试中,调用上层工作环境接口即调用浏览器接口。步骤1051 记录事件运行日志。事件运行的日志中记录了事件发生时的系统运行 状况,通过事件运行日志,测试人员就可以发现用户界面中可能存在的缺陷。在本发明中,步骤1031是对事件的合理性进行判断,即针对控件的状态,判断请 求的当前事件是否合理,在合理的情况下继续请求,不合理的情况下直接终止请求。步骤1032与步骤1033分别对事件完整性的不同方面进行判断,根据判断结果, 自动将应该测试的事件补充完整,值得注意的是,本实施例并不限定步骤1032和步骤1033 的执行顺序,可以按照本实施例说明先执行步骤1032再执行步骤1033,也可以先执行步骤 1033再执行步骤1032。请参考图4,图4为基于事件模拟的用户界面测试装置总体结构示意框图。该装 置主要包括以下单元接收单元201、请求单元202、判断单元203、创建单元204、记录单元 205。其中接收单元201,用于接收测试用例。测试用例包含有事件类型说明和事件发生的控 件类型说明,即说明在什么控件上请求模拟什么事件,如果该事件需要传递参数,则请求中 还包含该事件的参数说明。测试用例是由测试人员编写好的,其目的是为了通过这些测试用例的运行观察系 统的响应,从而发现用户界面是否有错误发生。请求单元202,用于根据测试用例发出当前事件模拟请求。测试用例描述了需要测 试的事件以及触发这些事件的控件,因此请求单元202中会根据接收单元201接收到的测 试用例发出当前事件的模拟请求。判断单元203,用于判断当前事件合理性与完整性,并根据当前事件的合理性与完 整性对当前事件进行相应的处理。所谓的当前事件的合理性,指的是当前事件的发生是符 合测试逻辑的,即在当前的用户界面下,事件的确是可以发生的。所谓当前事件的完整性, 是指由于当前事件本身的性质决定了当前事件的发生跟其他事件有关或当前事件的发生 与上一个事件有关。创建单元204,用于通过调用上层工作环境接口创建当前事件。这是真实地产生了 一个经判断单元处理后的当前事件,即真正的测试行为。所谓上层工作环境,就是测试行为 所处的环境,例如在WEB用户界面测试中,调用上层工作环境接口即调用浏览器接口。记录单元205,用于记录当前事件运行日志。事件运行的日志中记录了事件发生时 的系统运行状况,通过事件运行日志,测试人员就可以发现用户界面中可能存在的缺陷。
下面通过具体的实施例对上述装置进行详细描述请一并参考图4及图5,图5为本发明提供的基于事件模拟的用户界面测试装置实 施例结构示意框图。接收单元2011,用于接收测试用例,测试用例包含有事件类型说明和事件发生的 控件类型说明,即说明在什么控件上请求模拟什么事件,如果该事件需要传递参数,则请求 中还包含该事件的参数说明。请求单元2021,用于发出当前事件模拟请求。请求单元根据测试用例或者系统运 行过程中的需要发出事件模拟请求,请求中包含有需要测试的事件以及触发这些事件的控 件说明。控件状态判断单元2031,用于判断控件是否可操作,在控件可操作的情况下,继续 当前请求,否则返回false值并终止该次事件模拟请求。控件状态是否可操作是指控件是否可见,控件不可见有可能是因为用户界面布局 调整以后,该控件被隐藏或被别的控件覆盖或被剪裁。控件被隐藏有可能是在用户界面变 化之后,业务逻辑使得该控件不在UI (用户界面)上出现了。控件被覆盖有可能是在用户界 面变化后,某个控件被另一个控件挡住,例如某个按钮(button)上叠加了另外一个按钮, 这时在下面的那个按钮就是不可见的。控件被剪裁,是指在CSS中的剪裁样式,使得控件部 分区域不可见。假设要测试不可操作的控件被单击时的反应,直接在该控件上模拟产生一 个click事件,有可能出现该控件上的click事件并不出错的现象,从而导致我们无法发现 应该发现的UI错误。实际上当控件不可操作时是不可能被点击的,不应该模拟该事件的产 生,而是应该直接返回false值。事实上,当控件不可操作情况发生,正说明有可能发生了 用户界面(UI)错误,如一个按钮不该覆盖在另一个按钮上。事件分解判断单元2032,用于判断当前事件是否可以分解,是则将当前事件分解 为一系列事件并针对分解后的一系列事件调用请求单元,否则继续当前请求。事件可分解指的是某个浏览器事件的发生,是由一系列事件组合发生后触发的, 例如双击(doubleclick)事件,它是由鼠标按下(mousedown)事件、鼠标弹起(mouseup)事 件、单击(click)事件、鼠标按下事件、鼠标弹起事件依次顺序发生后才触发的。如果仅测 试doubleclick事件而没有测试在doubleclick事件发生前必然发生的一系列事件,那么 有可能在实际使用中,用户按得快不报错,用户按得慢就出错的现象。这是因为在按得慢的 情况下,浏览器有可能认为发生了两次单击事件,而单击事件是有错误产生的,但是却由于 没有测试而无法得知这个错误,这显然是我们不希望看到的。因此在本发明中,将对事件是 否可分解进行判断,在某个事件的发生可以分解为一系列事件组合发生时,将对这一系列 事件分别发出事件模拟请求。事件补充判断单元2033,用于判断当前事件与上一个创建的事件之间是否存在需 要补充的事件,是则补充当前事件与上一个创建的事件间缺少的事件并针对缺少的事件调 用请求单元,否则继续当前请求。当前事件与上一事件之间存在需要补充的事件,指的是当前事件与上一个创建 的事件之间存在着逻辑上的联系,在这两者依次发生的时候,一定必须在其间发生其他事 件,否则这两个事件不可能连续发生。例如当前请求的是在控件B上产生mousedown事 件,如果之前创建的事件为控件A上的mousedown事件,那么很显然,不可能连续发生两次mousedown事件,因此针对这种情况,在本发明中,将先在控件A上补充一个mouseup事件模 拟请求。事件补充判断单元在判断当前事件与上一事件之间是否存在需要补充的事件时, 需要从上一事件存储装置中读取上一事件的信息,包括上一事件的类型以及事件发生的对象。事件保存单元2034,用于保存当前事件为上一个创建的事件。即更新上一事件存 储装置中的上一事件信息,将上一事件变量值改为当前请求的模拟事件。创建单元2041,用于调用上层工作环境接口创建当前事件。所谓上层工作环境,就 是测试行为所处的环境,例如在WEB用户界面测试中,调用上层工作环境接口即调用浏览 器接口。记录单元2051,用于记录事件运行日志。事件运行的日志中记录了事件发生时的 系统运行状况,通过事件运行日志,测试人员就可以发现用户界面中可能存在的缺陷。在本发明中,控件状态判断单元是对事件的合理性进行判断,即针对控件的状态, 判断请求的当前事件是否合理,在合理的情况下继续请求,不合理的情况下直接终止请求。事件分解判断单元与事件补充判断单元分别对事件完整性的不同方面进行判断, 根据判断结果,自动将应该测试的事件补充完整。以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精 神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本发明保护的范围之内。
权利要求
1.一种基于事件模拟的用户界面测试方法,其特征在于,所述方法包括步骤a.接收测试用例,所述测试用例包含需要测试的事件的类型说明以及所述事件发生的 控件的类型说明;b.根据测试用例发出当前事件模拟请求;c.判断所述当前事件的合理性及完整性,并根据所述合理性及完整性对所述当前事件 进行处理;d.通过调用上层工作环境接口创建所述当前事件;e.记录所述当前事件的运行日志。
2.根据权利要求1所述的基于事件模拟的用户界面测试方法,其特征在于,所述步骤c 包括判断所述控件的可操作性。
3.根据权利要求2所述的基于事件模拟的用户界面测试方法,其特征在于,所述控件 不可操作的情况包括所述控件被隐藏、所述控件被覆盖或所述控件被剪裁。
4.根据权利要求2所述的基于事件模拟的用户界面测试方法,其特征在于,所述方法 在所述控件不可操作的情况下返回false值并结束所述当前事件模拟请求。
5.根据权利要求2所述的基于事件模拟的用户界面测试方法,其特征在于,在所述控 件可操作的情况下所述步骤c还包括判断所述当前事件是否可分解及判断所述当前事件 与上一个创建的事件之间是否存在需要补充的事件。
6.根据权利要求5所述的基于事件模拟的用户界面测试方法,其特征在于,在所述当 前事件可分解的情况下,所述方法还包括对所述当前事件分解后得到的一系列事件逐一发 出当前事件模拟请求。
7.根据权利要求5所述的基于事件模拟的用户界面测试方法,其特征在于,在所述当 前事件与上一个创建的事件之间存在需要补充的事件时,所述方法还包括对所述需要补充 的事件发出当前事件模拟请求。
8.根据权利要求6所述的基于事件模拟的用户界面测试方法,其特征在于,在所述当 前事件不可分解且与上一个创建的事件之间不存在需要补充的事件时,所述步骤c还包括 将所述当前事件保存为上一个创建的事件。
9.一种基于事件模拟的用户界面测试装置,其特征在于,所述装置包括接收单元,用于接收测试用例,所述测试用例包含需要测试的事件的类型说明以及所 述事件发生的控件的类型说明;请求单元,用于根据测试用例发出当前事件模拟请求;判断单元,用于判断所述当前事件的合理性及完整性,并根据所述合理性及完整性对 所述当前事件进行处理;创建单元,用于通过调用上层工作环境接口创建所述当前事件;记录单元,用于记录所述当前事件的运行日志。
10.根据权利要求9所述的基于事件模拟的用户界面测试装置,其特征在于,所述判断 单元进一步包括控件状态判断单元,用于判断所述控件的可操作性。
11.根据权利要求10所述的基于事件模拟的用户界面测试装置,其特征在于,所述控 件不可操作的情况包括所述控件被隐藏、所述控件被覆盖或所述控件被剪裁。
12.根据权利要求10所述的基于事件模拟的用户界面测试装置,其特征在于,所述装置在所述控件不可操作的情况下返回false值并结束所述当前事件模拟请求。
13.根据权利要求10所述的基于事件模拟的用户界面测试装置,其特征在于,在所述 控件可操作的情况下所述判断单元进一步包括事件分解判断单元,用于判断所述当前事件 是否可分解,及事件补充判断单元,用于判断所述当前事件与上一个创建的事件之间是否 存在需要补充的事件。
14.根据权利要求13所述的基于事件模拟的用户界面测试装置,其特征在于,在所述 当前事件可分解的情况下,所述事件分解判断单元还用于对所述当前事件分解后得到的一 系列事件逐一调用请求单元。
15.根据权利要求13所述的基于事件模拟的用户界面测试装置,其特征在于,在所述 当前事件与上一个创建的事件之间存在需要补充的事件时,所述事件补充判断单元还用于 对所述需要补充的事件调用请求单元。
16.根据权利要求13所述的基于事件模拟的用户界面测试装置,其特征在于,在所述 当前事件不可分解且与上一个创建的事件之间不存在需要补充的事件时,所述判断单元还 包括事件保存单元,用于将所述当前事件保存为上一个创建的事件。
全文摘要
本发明提供了一种基于事件模拟的用户界面测试方法,包括接收测试用例,所述测试用例包含需要测试的事件的类型说明以及事件发生的控件的类型说明;根据测试用例发出当前事件模拟请求;判断当前事件的合理性及完整性,并根据合理性及完整性对当前事件进行处理;通过调用上层工作环境接口创建当前事件;记录当前事件的运行日志。依据本发明,在用户界面测试中可以很好地应对用户界面布局改变的情况,并且由于考虑了事件之间的联动性,在每次事件模拟请求中,都会考虑控件、事件之间的逻辑关系,自动产生符合请求模拟的事件的逻辑关系的测试行为,可以很好地避免漏测的情况出现。
文档编号G06F11/36GK102073590SQ20111000478
公开日2011年5月25日 申请日期2011年1月11日 优先权日2011年1月11日
发明者欧阳先伟 申请人:百度在线网络技术(北京)有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1