runCommand 函数用于执行传递的命令,execApp 函数通过参数获得应用程序路径,然后调用 runCommand 函数来启动应用程序。
接着就可以更新 testMain 函数,使用 execApp 函数代替 startApp 。如清单 5 。
清单 5. testMain 函数
public void testMain(Object[] args) { // 启动应用程序 execApp(sAPPPath); ...... } |
传递给 execApp 的变量可以通过读取配置文件获得应用程序路径。下面添加读取配置文件代码和相关变量。如清单 6 。
清单 6. 读取配置文件代码
// 配配置文件 public static String sFileLocation="C:\\workspace\\Project1\\conf.properties"; // 应应用程序路径变量 public static String sDBAPPPath; // 读读取配置文件 public static String getPropertyFromFile(String sKey, String fileName){ Properties prop = new Properties(); File file = new File(fileName); FileInputStream fis=null; String sPropVal = ""; try{ fis= new FileInputStream(file); prop.load(fis); sPropVal = prop.getProperty(sKey); fis.close(); }catch(Exception e) { e.printStackTrace(); } return sPropVal; } |
getPropertyFromFile 函数根据配置文件里的键值对返回相应的值。配置文件 conf.properties 里添加键值对为 AppLocation = < 应应用程序路径 > 。对于本文的测试场景,< 应应用程序路径 > 就就是 Lotus Connections 2.0 安装程序在本机上的文件路径,如 C :\Build\LC2.0_20080427\install.bat 。
然后给 sAPPPath 变变量赋予 getPropertyFromFile 的返回值,将其传递给 execApp 。如清单 7 。
清单 7. 更新后的 testMain 函数
public void testMain(Object[] args) { // 读读取配置文件里的路径 sAPPPath=getPropertyFromFile("AppLocation",sFileLocation); // 启动应用程序 execApp(sDBAPPPath); |
...... } |
同时,为了使命令行调用脚本更方便,我们可以将应用程序路径做为命令行的一个参数传递。
进一步修改 testMain,使之既可以读取配置文件获得应用程序路径,也可以通过命令行来获取。如清单 8 。
清单 8. 添加 testMain 获取命令行参数代码
public void testMain(Object[] args) { if(args.length > 0 && args.length == 1){ // 通过命令行方式读取应用程序路径 sDBAPPPath = args[0].toString(); System.out.println("Read App Info with command"); }else{ // 通过配置文件方式读取应用程序路径 sDBAPPPath=getPropertyFromFile("AppLocation",sFileLocation); System.out.println("Read App Info with properties"); } // 启动应用程序 execApp(sDBAPPPath); ...... } |
如此,就可以在命令行中加上应用程序路径参数。当需要测试新 build 时候,通过改变此参数,可以使调用更灵活。如清单 9 。
清单 9. 传递参数的 RFT 命令行代码
"C:\Program Files\IBM\SDP70\jdk\bin\java" -classpath
"C:\Program Files\IBM\SDP70\FunctionalTester\bin\rational_ft.jar"
com.rational.test.ft.rational_ft
-datastore "C:\workspace\Project1"
-playback testcases.install.Script1<App location>
|
总结
通过以上的做法,解决了现实应用中出现的问题:
当有新 build 需要测试的时候,用户只需要在配置文件里改变一下路径,就完成了配置过程。不需要重新打开 RFT 的配置应用程序窗口进行配置。
当需要自动化测试的时候,用户可以使用命令行方式来调用测试脚本,并且在命令行里传递新 build 的路径信息。除了可以采用计划任务来触发 RFT 命令行外,也可以使用 STAF (Software Testing Automation Framework) 来实现 RFT 的自动化框架。关于自动化测试框架实现的话题超出了本文的讨论范围。但是这一切得以实现来源于本文所讨论的改进 RFT 启动应用程序的过程。
免责声明
本文仅代表本人观点,并非代表 IBM 的立场、策略和观点。