c#创建web应用程序_创建Web应用程序的测试用例

自动测试节省了您重复执行相同测试步骤的时间和精力。 本文介绍了jWebUnit,这是一组Java类,可用于开发Web应用程序的测试用例。 jWebUnit是一个开放源代码项目,根据BSD许可证可免费获得。 我将向您展示如何下载jWebUnit库,配置Eclipse平台以开发jWebUnit测试用例以及构建示例测试用例。

介绍jWebUnit

jWebUnit基于HttpUnit(用于自动测试Web应用程序的Java库)和JUnit单元测试框架(请参阅参考资料 )。 jWebUnit提供了用于导航Web应用程序的高级API,并结合了一组断言,这些断言用于通过链接,表单输入和提交,表内容以及其他典型的业务Web应用程序功能来验证导航的正确性。 jWebUnit以JAR文件的形式出现,可轻松插入大多数IDE,并包含其他必需的库。

用HttpUnit测试

对Web应用程序的自动测试意味着绕过Web浏览器,并通过您的程序使用该网站。 首先,我将向您展示JWebUnit的构建模块之一HttpUnit如何简化此任务。 HttpUnit可以模拟框架,JavaScript,页面重定向cookie等。 与JUnit一起使用时,HttpUnit可以快速验证网站的功能。

清单1显示了一个用HttpUnit编写的示例测试用例,它试图单击HttpUnit主页上的“ Cookbook”链接:

清单1.单击HttpUnit主页上的Cookbook链接的HttpUnit代码
1 public class HttpUnitTest {
2  public static void main(String[] args) {
3    try {
4      WebConversation wc = new WebConversation();
5      WebRequest request = 
            new GetMethodWebRequest("http://httpunit.sourceforge.net/index.html");
6      wc.setProxyServer( "your.proxy.com", 80 );
7      WebResponse response = wc.getResponse(request);
8      WebLink httpunitLink = 
            response.getFirstMatchingLink(WebLink.MATCH_CONTAINED_TEXT,"Cookbook");
9      response = httpunitLink.click();
10      System.out.println("Test successful !!");
11    } catch (Exception e) {
12      System.err.println("Exception: " + e);
13    }
14  }
15 }

清单1中的代码使用your.proxy.com (第6行)连接到Internet。 如果您有直接的Internet连接,则可以注释掉此声明。 第8行中的语句在页面上搜索包含文本Cookbook的Web链接。 第9行中的语句单击该链接。 如果找到链接,则用户会看到消息“ Test Successful !!

使用jWebUnit进行更简单的测试

清单2中的测试用例使用jWebUnit API来执行与清单1相同的任务:

清单2.单击HttpUnit主页上的Cookbook链接的jWebUnit代码
1 public class JWebUnitTest extends WebTestCase{
2  public static void main(String[] args){
3    junit.textui.TestRunner.run(new TestSuite(JWebUnitTest.class));
4  }
5  public void setUp(){
6    getTestContext().setBaseUrl("http://httpunit.sourceforge.net");
7    getTestContext().setProxyName("webproxy.watson.ibm.com");
8    getTestContext().setProxyPort(8080);
9  }
10  public void testSearch(){
11    beginAt("/index.html");
12    clickLinkWithText("Cookbook");
13  }
14 }

如果您忽略清单2中特定于JUnit的代码,则可以看到测试用例现在已经非常简洁明了。 要查看的重要行是第6、11和12行。在第6行,基本URL设置为HttpUnit主页。 第11 /index.html相对路径/index.html处连接到站点。 第12行单击该页面上带有文本Cookbook的链接。 如果单击成功,则JUnit报告成功。 否则,它将报告异常。

jWebUnit API:仔细研究

每个jWebUnit测试用例的核心是net.sourceforge.jwebunit.WebTestCase类,它代表一个测试用例。 每个测试用例都必须从此类扩展。 ( net.sourceforge.jwebunit.WebTestCase类本身是从junit.framework.TestCase扩展的,该类代表JUnit中的一个测试案例。)表1描述了此类的一些常用方法:

表1. net.sourceforge.jwebunit.WebTestCase类的重要方法
方法 描述
公共TestContext getTestContext() 获取测试用例的上下文。 您可以使用它来访问区域设置,基本URL和cookie等项目。
公共无效beginAt(String relativeURL) 从相对于基本URL的URL开始对话。
公共无效setWorkingForm(String nameOrId) 以指定的形式开始交互。 如果当前页面只有一种形式,则无需调用此方法。
受保护的void Submit() 提交表单-等同于单击表单的“ 提交”按钮。
公共无效gotoFrame(String frameName) 使命名框架处于活动状态。

另一个重要的类是net.sourceforge.jwebunit.TestContext 。 它建立了测试的环境。 您可以使用此类来处理Cookie,会话和授权等信息。 表2显示了此类的一些重要方法:

表2. net.sourceforge.jwebunit.TestContext类的重要方法
方法 描述
公共无效addCookie(字符串名称,字符串值) 将cookie添加到测试上下文。 开始HttpUnitDialog时,将在WebConversation上设置添加的cookie。
公共无效setResourceBundleName(字符串名称) 设置用于测试上下文的资源包。 用于通过WebTester的键查找期望值。
公共无效setProxyName(String proxyName) 设置测试上下文的代理服务器名称。
公共无效setBaseUrl(字符串url) 设置测试上下文的基本URL。

在Eclipse中下载和配置jWebUnit

jWebUnit是用纯Java代码实现的,因此可以作为JAR文件使用(下载链接请参阅参考资料 )。 下载它之后,请按照以下步骤在Eclipse平台上配置jWebUnit库:

  1. 将下载的文件jwebunit-1.2.zip解压缩到一个临时目录(出于我们的目的,假定为C:\ temp)。
  2. 在Eclipse中创建一个名为jWebUnit的新Java项目。
  3. 在Package Explorer视图中右键单击jWebUnit项目,然后选择Properties
  4. 单击Java构建路径 。 在“库”选项卡中,单击“ 添加外部JAR”
  5. 浏览到C:\ temp \ jwebunit-1.2 \ lib目录,然后选择此目录中的所有JAR。
  6. 单击确定

现在,您可以在jWebUnit项目下的Eclipse中开始开发jWebUnit测试用例。

构建示例应用程序

现在该看看jWebUnit API的作用了。 我将引导您完成一个示例应用程序,以帮助您更好地了解jWebUnit的真正功能。 该应用程序是打开Goog​​le搜索页面并搜索文本HttpUnit的测试用例。 您希望应用程序测试以下方案:

  • 打开Goog​​le主页http://www.google.com。
  • 断言该页面包含名称为q的表单元素。 (在Google主页上,名为q的文本框是将用户查询作为输入的文本框。)应用程序使用此元素输入搜索条件。
  • 在搜索文本框中输入字符串HttpUnit Home ,然后提交表单。
  • 获取结果页面并断言它包含一个包含文本HttpUnit Home的链接。
  • 单击带有文本HttpUnit Home的链接。

现在已经准备好测试方案,您可以编写一个使用jWebUnit来实现这些要求的Java应用程序。

第一步是声明一个从WebTestCase扩展的类,如清单3所示:

清单3.声明测试用例类
public class GoogleTest extends WebTestCase {
   static String searchLink = "";
}

如前所述,jWebUnit要求每个测试用例都必须从WebTestCase扩展。 searchLink存储传递的参数进行搜索。 您将此值作为命令行参数传递给测试用例。

下一步是声明入口点main()方法,如清单4所示:

清单4. main()方法
public static void main(String[] args) {
   searchLink = args[0];
   junit.textui.TestRunner.run(new TestSuite(GoogleTest.class));
}

main()方法通过调用junit.textui.TestRunner.run()执行JTest测试用例。 因为您需要运行GoogleTest测试用例,所以作为参数传递给run()方法的测试套件将GoogleTest.class作为参数。

JTest调用setUp()方法来设置基本URL和代理,如清单5所示:

清单5.安装
public void setUp() {
   getTestContext().setBaseUrl("http://www.google.com");
   getTestContext().setProxyName("proxy.host.com");
   getTestContext().setProxyPort(80);
}

清单5将基本URL设置为http://www.google.com 。 这意味着测试用例将相对于该URL开始。 接下来的两个语句将代理主机和代理端口设置为连接到Internet。 如果直接连接到Internet,则可以省略代理设置语句。

现在,您开始浏览该站点并输入搜索条件。 清单6显示了访问Web页然后测试所有方案的代码:

清单6.测试场景
public void testSearch() {
   beginAt("/");
   assertFormElementPresent("q");
   setFormElement("q", "HttpUnit");
   submit("btnG");
   assertLinkPresentWithText(searchLink);
   clickLinkWithText(searchLink);
}

清单6中的代码连接到基本URL,并相对于/开始浏览。 然后断言该页面包含一个名为q的表单元素-Google主页上的查询条目文本框的名称。 下一条语句将名称为q的文本框设置为HttpUnit值。 下btnG语句提交名为btnG的表单提交按钮。 (在Google主页上,名为btnG的按钮是标记为Google Search的按钮。)在此对话中,提交了表单,下一页列出了搜索结果。 在结果页上,代码首先检查是否存在带有文本HttpUnit Home的链接。 如果链接不存在,则测试失败,并显示AssertionFailedError 。 如果存在链接,则测试将单击它。

运行示例应用程序

现在,让示例应用程序运行:

  1. 下载示例应用程序j-webunitsample.jar(请参阅下载 )。
  2. 将j-webunitsample.jar解压缩到目录中。 例如,如果将其解压缩到C:\ temp,则将源文件和类文件放入C:\ temp \ com \ jweb \ test,并将setclasspth.bat放入C:\ temp。
  3. 编辑setclasspath.bat:将JAR_BASE设置为指向包含所有必需JAR的目录。 例如,如果您已在C:\ temp下提取jwebunit-1.2.zip文件,则将JAR_BASE设置为C:\ temp \ jwebunit-1.2 \ lib。
  4. 打开命令提示符,并将目录更改为C:\ temp。
  5. 执行setclasspath.bat 。 这将设置测试用例执行所需的CLASSPATH
  6. 使用命令java com.jweb.test.GoogleTest "HttpUnit Home"运行应用程序。

样品输出

执行测试用例后,在命令提示符下将打印出测试用例报告。 如果测试失败,该报告将类似于清单7中的报告:

清单7.断言失败的输出
C:\temp>java com.jweb.test.GoogleTest "HttpUnit Hwee"
.F
Time: 5.338
There was 1 failure:
1) testSearch(com.jweb.test.GoogleTest)junit.framework.AssertionFailedError: Link 
  with text [HttpUnit Hwee] not found in response.
at net.sourceforge.jwebunit.WebTester.assertLinkPresentWithText(WebTester.java:618)
at net.sourceforge.jwebunit.WebTestCase.assertLinkPresentWithText(WebTestCase.java:244)
        at com.jweb.test.GoogleTest.testSearch(GoogleTest.java:36)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
        at com.jweb.test.GoogleTest.main(GoogleTest.java:19)

FAILURES!!!
Tests run: 1,  Failures: 1,  Errors: 0

如清单7所示,该测试用例以HttpUnit Hwee作为参数执行。 该测试用例将在断言时失败,因为结果页面不包含带有此文本的链接。 因此, junit.framework.AssertionFailedError

清单8使用HttpUnit Home作为参数执行。 测试用例找到带有此文本的链接,因此它通过了:

清单8.成功的测试输出
C:\temp>java com.jweb.test.GoogleTest "HttpUnit Home"
.
Time: 6.991

OK (1 test)

结论

本文通过讨论jWebUnit框架的显着功能和最重要的类,并向您展示了如何使用它来创建简洁的测试用例,使您对jWebUnit框架有所了解。 jWebUnit具有更多的功能,可以在测试用例中使用。 它可以让您的测试计算网页上存在的链接数。 您可以断言页面中是否存在带有给定标签的字符串,表格或表单输入元素。 您可以玩cookie,例如断言存在cookie,删除cookie等。 然后您的测试可以单击带有特定文本的链接,该链接出现在其他文本之后。 如果您想为Web应用程序构建快速有效的测试用例,则jWebUnit可能是您最好的朋友。


翻译自: https://www.ibm.com/developerworks/java/library/j-jwebunit/index.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值