技术开发 频道

使用CruiseControl和STAF建立复杂环境下的编译和测试自动化

    JUnit/HttpUnit  

    JUnit 是一个被广泛使用的用于测试 Java 应用程序的开源自动化测试框架。JUnit 提供了十分简洁易用的编程接口来让测试人员编写测试脚本。同时搭配使用 xUnit 系列的工具,JUnit 可以完成对许多不同类型的应用的测试。

    HttpUnit 是一个专门针对 Web 应用程序进行自动化测试的开源类库。它可以模拟浏览器的行为(包括表单提交,JavaScript,简单 http 认证,cookie,以及页面重定向等)来测试 Web 应用程序并且允许测试代码检查从服务器端返回的页面。

    在本文中,我们搭配使用 JUnit 和 HTTPUnit 这两个工具来测试 WebService。

    Rational Functional Tester

    IBM Rational Functional Tester ( RFT ) 是一个用于进行自动化的功能和回归测试的工具。它使得测试人员可以测试应用程序的图形界面,并提供了数据驱动的测试能力。 RFT 支持不同平台上的各种类型的图形界面应用,常见的包括在浏览器中运行的 Web 应用界面,用 SWT 开发的图形界面等。不仅如此, RFT 还提供了多种语言版本的测试脚本和开发环境供测试人员选择,包括在 Eclipse 环境中开发 Java 测试脚本和在微软的 Visio Studio 环境中开发 VB.net 脚本。RFT 当前最新的版本为 7.0。

    在本文中,我们使用 RFT 来测试 WebService 客户端。

    准备环境
    本章介绍在自动测试前的准备工作,包括下列内容:

    配置 WAS 环境变量,
    删除 WAS 上的 JAAS 登录模块脚本
    WAS 重启脚本
    在部署服务器上准备部署脚本
    配置 WAS 环境变量 ( WAS_HOME )

    在使用 WAS 开始工作前,首先要配置 WAS 环境变量 WAS_HOME,WAS_HOME 用于指向 WAS 的安装目录。下文中,在使用一些 WAS 自带的工具时,会引用环境变量 WAS_HOME 来表示 WAS 的安装目录。具体的设置方法如清单 1 所示。

    清单 1. 配置 WAS_HOME
                 
[Windows Platform]
set WAS_HOME=C:\Program Files\IBM\AppServer
echo %WAS_HOME%

[Linux Platform]
export WAS_HOME=/opt/IBM/AppServer
echo $WAS_HOME

    清单1展示了如何配置 WAS_HOME。

    在 Windows 平台中使用 set 命令进行设置,以后可以通过 %WAS_HOME% 进行访问。

    在 Linux 平台中使用 export 命令进行设置,以后可以通过 $WAS_HOME 进行访问。如果要使环境变量 WAS_HOME 在系统启动时自动设置,可以将 export 语句添加到 boot.local 文件中。

    删除 WAS 上的 JAAS 登录模块脚本

    在正式的测试之前,WAS 上的 JAAS 录模块需要更新到最新的版本。为了保证最新版本的成功更新,我们首先要将旧版本的 JAAS 登录模块删除(如果存在的话),如清单 2 所示。

    清单 2. 删除 JAAS 登录模块 – DeleteLoginModule.py
                 
01 loginModuleAlias = "wssecurity.KerberosToken"
02 lineSeparator = java.lang.System.getProperty('line.separator')

03 cells = AdminConfig.list("Cell").split(lineSeparator)
04 for cell in cells :
05     security = AdminConfig.list("Security", cell)
06     appLoginConfig = AdminConfig.showAttribute(security, "applicationLoginConfig")
07     jaasConfigEntryString = AdminConfig.list("JAASConfigurationEntry", appLoginConfig)
08     jaasConfigEntry = jaasConfigEntryString.split(lineSeparator)

09     entry = None
10     for eachEntry in jaasConfigurationEntrys :
11         jlmAlias = AdminConfig.showAttribute(eachEntry, "alias")
12         if jlmAlias == loginModuleAlias :
13             entry = eachEntry
14             print "\nEntry found: " + entry
15             break

16     if entry != None :
17         AdminConfig.remove(entry)
18         print "\nEntry deleted: " + entry
19         AdminConfig.save()


    清单 2 展示了如何使用 wsadmin 脚本来删除 WAS 上的 JAAS 登录模块。WAS 的 wsadmin脚本支持 Jacl 和 Jython 两种类型的脚本语言,这个示例采用了 Jython 语言。

    其中,第 1 行设置了 loginModuleAlias 变量,用于保存待删除的 JAAS 登录模块的别名。第 2 行定义了 lineSeparator 常量,用于表示换行符。第 3-4 行获取了 WAS 中的 Cell 列表,并遍历整个 Cell 列表,对每个 Cell 进行处理。第 5-6 行获取了 Cell 中的安全配置,得到 Application Login Configuration。第 7-8 行进一步获取 Cell 中的 JAAS 登录模块的列表。

    第 9 行设置了 entry 变量,用于保存查找到的待删除的 JAAS 登录模块,初始值设为 None,表示未找到。

    第 10-15 行是一个循环,遍历 Cell 中的 JAAS 登录模块的列表。对每个 JAAS 登录模块,第 11 行首先获取它的别名,第 12 行将别名与 loginModuleAlias 变量中保存的待删除的 JAAS 登录模块的别名进行比较,如果相同则说明这个 JAAS 登录模块就是待删除的登录模块。第 13 行将该 JAAS 登录模块保存在 entry 变量中,第 14 行打印出找到待删除登录模块的日志信息,第 15 行则退出循环。如果在循环没有找到和待删除登录模块相匹配的,则 entry 变量保持为 None。

    第 16-19 行是删除登录模块的代码,第 16 行判断一下是否找到待删除登录模块,如果 entry 变量为 None,则说明没有找到,直接退出。反之,第 17 行执行删除,第 18 行打印出删除日志信息,第 19 行保存更改。

    在我们的示例中,删除 JAAS 登录模块脚本是存放在一台 Linux 系统中,我们要通过这个Linux 系统上的 WAS 来删除环境中的其它系统上的 WAS 中的 JAAS 登录模块,这个操作需要通过 wsadmin 工具来远程访问其它 WAS。调用过程如清单 3 所示。

0
相关文章