关于执行环境的准备和清理
每个测试用例都有自己的执行环境。比如在 Lotus Notes 的自动化测试中,有的用例需要确认和切换当前用户,拷贝并打开测试用数据库,还有些测试用例会要求做一些特殊的偏好设定等等。由于测试集中所有的测试用例将会顺序执行,我们必须保证在每个测试用例开始时配置好执行环境,而在测试用例结束时将环境清理干净,恢复到初始状态。否则,后继测试用例的执行就有可能因为预料之外的条件而导致测试不通过甚至产生异常,这并不是我们所期望的结果,而且通常说来,这种问题往往需要花很大的力气来进行追踪。
那么清理环境都需要做些什么呢?仍然以 Lotus Notes 的自动化测试为例,我们需要检查如下几点:
● 如果切换了新的用户 ID,那么最好切换回原来的缺省用户 ID
● 如果改变了某些偏好设定,最好将这些设定复原
● 如果创建了数据库,最好删除这个数据库
● 如果创建了针对服务器数据库的本地副本,最好删除这个副本
● 如果新建了邮件消息,那么需要视情况而定,假如不是后续测试用例所必需的,那么最好删除这些新建的邮件信息
● 如果有未关闭的对话框或者消息框,一定要关闭
● 关闭所有的标签页面
环境的准备和清理代码要放在测试用例主体的前面和后面,最好分别放在单独的函数中,这样代码结构看起来比较清晰。在 Lotus Notes 的自动化测试用例中,环境的准备一般都会被放在 setUpTestCase()中而环境的清理都会被放在 cleanUpTestCase()中。
您可以根据项目和脚本的实际情况来决定环境清理的内容,但需要注意的是,环境清理非常重要。无论测试用例的执行过程中是否出现异常,您都需要保证清理代码能够顺利执行完成。
关于步骤间的检查与等待
步骤间的检查和等待对于正确和平顺地执行测试用例非常重要。
举个简单的例子:当我们选取某个菜单项后,一个对话框会被弹出,然后我们需要对对话框进行操作。那么,当正确出发菜单选取的事件后,对话框能不能被弹出,何时被弹出,对于下一个步骤地执行至关重要,若对话框尚未被弹出就去执行下一步骤,比如说点击某个按钮,那么测试必定不通过。我们一定要在每个步骤之前,确认上一步骤已成功执行。比如,预期的对话框已正常打开。这些手工执行时自然而然会做的检查,我们在写测试脚本时会很容易忽略。
最常见的检查就是某个预期的界面元素是否出现或者消失。为了减少测试脚本代码的复杂度,我们在对象层为每个图形控件都扩展出 2 个方法 exists(timeout) 和 waitForNonExistence(timeout),前者检查控件是否被打开并显示在屏幕中,后者检查控件是否已被关闭,我们在这两个函数中定时检查界面元素,直到控件显示、消失或者超时。这样,在编写测试用例时,我们只需要使用这两个方法进行验证,并指定超时时间。如下面的代码片断所示:
例 3. 执行步骤间的检查
… // 选取菜单项 Menu.mCheckSpelling.pick(); // 等待对话框被弹出 DlgSpellCheck spellDlg = new DlgSpellCheck(); Logger.logCompareFatal(true, spellDlg.exists(LocalSettings.giTO), "Verify dialog exist"); // 点击 Ignore 按钮 spellDlg.getSpellIgnore().click(); … // 点击 Cancel 按钮并等待对话框关闭 spellDlg.getEcancel().click(); spellDlg.waitForNonExistence(LocalSettings.giSTO); … |