另一个重要的类是 netsourceforgejwebunitTestContext它为测试创建上下文可以用这个类来处理像 cookie会话和授权之类的信息表 显示了这个类的一些重要方法
表 netsourceforgejwebunitTestContext 类的重要方法
下载 jWebUnit在 Eclipse 中配置 jWebUnit
JWebUnit 是用纯 Java 代码实现的所以可以以 JAR 文件的形式获得它 (请参阅 参考资料从中获得下载链接)在完成下载之后请按以下步骤在 Eclipse 平台上配置 JWebUnit 库
把下载的文件 jwebunitzip 释放到临时目录中(假设是 C:\temp)
在 Eclipse 中创建新 Java 项目将其命名为 jWebUnit
右击 Package Explorer 视图中的 jWebUnit 项目然后选择 Properties
单击 Java Build Path单击 Libraries 标签中的 Add External JARs
浏览到 C:\temp\jwebunit\lib 目录选择这个目录中的所有 JAR 文件
单击 OK
现在可以在 Eclipse 中的 jWebUnit 项目下开发 jWebUnit 测试用例了
构建示例应用程序
现在就可以查看 jWebUnit API 的实际应用了我将带您研究一个示例应用程序帮助您更好地理解 jWebUnit 的真正威力这个应用程序是一个测试用例用于打开一个 Google 搜索页面并搜索文本 HttpUnit应用程序需要测试以下场景
打开 Google 主页
确定该页包含一个名为 q 的表单元素(在 Google 的主页上名为 q 的文本框是接受用户查询输入的文本框)应用程序用这个元素输入搜索参数
在搜索文本框中输入字符串 HttpUnit Home并提交表单
获得结果页并确定该页面包含的链接中包含文本 HttpUnit Home
单击包含文本 HttpUnit Home 的链接
现在测试场景已经就绪可以编写 Java 应用程序用 jWebUnit 实现这些需求了
第一步是声明一个从 WebTestCase 扩展而来的类如清单 所示
清单 声明测试用例类
public class GoogleTest extends WebTestCase {
static String searchLink = ;
}
正如我在前面提到过的jWebUnit 要求每个测试用例都是从 WebTestCase 中扩展而来的searchLink 保存传入的搜索参数这个值以命令行参数的形式传递给测试用例
下一步是声明入口点 —— main() 方法如清单 所示
清单 main() 方法
public static void main(String[] args) {
searchLink = args[];
junittextuiTestRunnerrun(new
TestSuite(GoogleTestclass));
}
main() 方法调用 junittextuiTestRunnerrun() 执行 JTest 测试用例因为需要运行 GoogleTest 测试用例所以作为参数传递给 run() 方法的测试套件采用 GoogleTestclass 作为参数
接下来JTest 调用 setUp() 方法来设置基本 URL 和代理如清单 所示
清单 设置
public void setUp() {
getTestContext()setBaseUrl();
getTestContext()setProxyName();
getTestContext()setProxyPort();
}
清单 把基本 URL 设置为 这意味着测试用例的启动是相对于这个 URL 的下面两个语句设置连接到 Internet 的代理主机和代理端口如果是直接连接到 Internet那么可以忽略代理设置语句
现在开始浏览站点并输入搜索参数清单 显示了访问 Web 页面然后测试所有场景的代码
清单 测试所有场景
public void testSearch() {
beginAt(/);
assertFormElementPresent(q);
setFormElement(q HttpUnit);
submit(btnG);
assertLinkPresentWithText(searchLink);
clickLinkWithText(searchLink);
}
清单 的代码连接到基本 URL并相对于 / 开始浏览然后它断定页面中包含一个名为 q 的表单元素 —— q 是 Google 主页上查询输入文本框的名称下一条语句用值 HttpUnit 设置名为 q 的文本框
再下一条语言提交表单上名为 btnG 的提交按钮(在 Google 的主页上名为 btnG 的按钮是标签为 Google Search 的按钮)表单是在这个对话中提交的下一页列出搜索结果在结果页面上代码首先检查是否有一个链接的文本是 HttpUnit Home如果该链接不存在那么测试就以 AssertionFailedError 失败如果该链接存在则测试执行的下一个操作是单击链接
运行示例应用程序
现在把示例应用程序投入使用当中
下载示例应用程序 jwebunitsamplejar
在一个目录中解压缩 jwebunitsamplejar例如如果把它释放到 C:\temp 中那么就要把源文件和类文件放在 C:\temp\com\jweb\test 中而 setclasspthbat 则放在 C:\temp 中
编辑 setclasspathbat设置 JAR_BASE 指向包含所有必需 JAR 文件的目录例如如果在 C:\temp 中释放 jwebunitzip 文件那么将 JAR_BASE 设置为 C:\temp\jwebunit\lib
打开命令行提示符切换到 C:\temp 目录
执行 setclasspathbat这会设置执行测试用例所需的 CLASSPATH
用命令 java comjwebtestGoogleTest HttpUnit Home 运行应用程序
示例输出
在执行了测试用例之后会在命令行输出一个测试用例报告如果测试失败报告看起来如清单 中所示
清单 带有断言失败的输出
C:\temp>java comjwebtestGoogleTest HttpUnit Hwee
F
Time:
There was failure:
) testSearch(comjwebtestGoogleTest)junit
frameworkAssertionFailedError: Link
with text [HttpUnit Hwee] not found in response
at netsourceforgejwebunitWebTester
assertLinkPresentWithText(WebTesterjava:)
at netsourceforgejwebunitWebTestCase
assertLinkPresentWithText(WebTestCasejava:)
at comjwebtestGoogleTesttestSearch(GoogleTestjava:)
at sunreflectNativeMethodAccessorImplinvoke(Native Method)
at sunreflectNativeMethodAccessorImplinvoke(Unknown Source)
at sunreflectDelegatingMethodAccessorImplinvoke(Unknown Source)
at comjwebtestGoogleTestmain(GoogleTestjava:)
FAILURES!!!
Tests run: Failures: Errors:
正如在清单 中可以看到的可以用 HttpUnit Hwee 作为参数来执行测试用例这个测试用例遇到断言的地方会失败因为结果页面中不包含带有这个文本的链接由此也就产生了junitframeworkAssertionFailedError
清单 执行时用 HttpUnit Home 作为参数测试用例找到一个带有这个文本的链接所以测试通过了
清单 成功测试的输出
C:\temp>java comjwebtestGoogleTest HttpUnit Home
Time:
OK ( test)
结束语
本文通过讨论 jWebUnit 框架的一些突出特性和最重要的类介绍如何用它创建简洁的测试用例让您对 jWebUnit 框架有一个认识jWebUnit 还有更多特性可以用在测试用例中它支持测试 Web 页面中的链接行数可以对字符串表或者带有指定标签的表单输入元素是否存在于页面上进行断言此外jWebUnit 还可以处理 cookie (例如断言存在某个 cookie删除 cookie 等)测试可以对某个文本之后出现的特定文本的链接进行单击 如果想为 Web 应用程序构建快而有效的测试用例jWebUnit 可能是您最好的朋友