如果有可用线程,启动一个测试脚本并为它申请所需要的测试资源
申请测试资源成功,则开始执行测试步骤。否则,等待其他线程释放资源,重复步骤 4 直至超时退出
最后,收集各个并行测试脚本的结果并形成最终的测试报告
完成
图 3. 多任务执行流程
使用 STAF Respool 管理测试资源
测试资源的管理包括资源申请和资源的释放,在本并行测试自动化方案中,我们使用 STAF 提供的 Respool 服务来实现。Respool Service:资源池服务,提供了对于资源池的管理和操作,如查看,创建和删除操作。它允许用户控制和管理对资源池中每个条目的独占访问。
图 4. 测试资源管理
向 STAF 资源池申请资源的代码例子:
public boolean getResource(String nodepool, boolean release){ if(stafhandle!=null){ if(release){ result = stafhandle.submit2( ServerIP, "respool", "request pool " + nodepool + " first timeout " + timeout+" garbagecollect yes"); }else{ result = stafhandle.submit2( ServerIP, "respool", "request pool " + nodepool + " first timeout " + timeout+" garbagecollect no"); } }else{ return false; } if (result.rc != 0) { if(result.rc == 37) { System.out.println( "Timeout ERROR: Cannot get the test node. RC: " + result.rc + ", Result: " + result.resultContext); return false; } }else{ resourcename = result.resultContext.toString(); poolname = nodepool; } return true; } |
向 STAF 资源池释放资源的代码例子:
public void releaseResource(){ result = stafhandle.submit2(ServerIP, "respool", "release pool " + poolname + " entry " + resourcename + " force"); try { stafhandle.unRegister(); } catch (STAFException e) { // TODO Auto-generated catch block e.printStackTrace(); } return; } |
监控 STAF ResPool 使用情况
我们也开发了相应的工具监测 STAF Respool 的使用情况,使用该工具用户可以方便的添加和管理测试资源以及监测测试资源的使用情况。
下图中显示了一个正在运行的自动化测试对测试用户账号的申请和占用情况。
图 5. 监控 STAF ResPool(查看大图)
使用 Selenium 工具做为 test runner
因为 LotusLive iNotes 是基于 Web 的产品,所以我们选取现在流行的 Web 自动化测试工具 Selenium 来执行测试。Selenium 是一个健壮的工具集合,支持跨多平台的基于 Web 的应用程序的自动化测试的敏捷开发,它是一个开源的轻量级的自动化工具,而且支持多种编程语言,例如 Java,Python 等等。在本自动化测试框架中,我们使用的是 Selenium Remote Control,
小节
该并行的自动化测试框架可以很方便的通过以下步骤升级现有的自动化测试脚本:
修改 test caller,升级到可以支持集中管理脚本的并行测试以及收集测试报告
修改 logger,升级到可以支持每一个运行脚本都有各自的 logger 处理实例,防止最后的测试报告混乱
测试资源管理,升级到可以支持集中管理测试资源,保证测试资源的使用不会产生冲突
我们可以看到,在这个框架中的三个主体部分 STAF ResPool 和 Selenium 可以由用户任意的替换成适合自己项目使用的工具,只要它们具备相似的功能就可以。
回页首
并行的自动化测试框架的优势
图 6. 测试数据比较
应用并行的自动化测试后的测试数据比较:
并行自动化测试中测试线程数量增加,执行的时间就会大大降低
并行自动化测试中测试线程数量增加,就需要更多测试用户数量的支持
一个字,快!两个字,高效!这不仅仅是执行效率上的优势,也是测试资源的高效利用。对于测试人员来讲,可以更专注于新功能的测试,自动化测试覆盖原有功能的测试并可以频繁的执行,因为执行的时间已经不是一个重要问题;这对于开发人员来讲也是一个好的开始,它们可以使用自动化测试来保证自己的改动没有引起 regression defect。另外,运行效率的提高也意味着我们可以方便的开展自动化开发来扩大产品的自动化测试覆盖率,而不用担心测试脚本的增加所造成的运行效率降低的问题。因为我们可以通过增加硬件测试资源,或者是一些软件方面的测试资源例如测试的用户数量来满足并行自动化测试的需要;这些测试资源都是影响并行的自动化测试的因素,但是同时也会给并行的自动化测试带来不可估量的执行效率方面的提高。