`
zzc1684
  • 浏览: 1229154 次
  • 性别: Icon_minigender_1
  • 来自: 广州
文章分类
社区版块
存档分类
最新评论

Spring4.1新特性——页面自动化测试框架Spring MVC Test HtmlUnit简介

阅读更多

目录

Spring4.1新特性——综述

Spring4.1新特性——Spring核心部分及其他

Spring4.1新特性——Spring缓存框架增强

Spring4.1新特性——异步调用和事件机制的异常处理

Spring4.1新特性——数据库集成测试脚本初始化

Spring4.1新特性——Spring MVC增强

Spring4.1新特性——页面自动化测试框架Spring MVC Test HtmlUnit简介

Spring4.1新特性——静态资源处理增强

 

本文其实不应该算作Spring4.1新特性,该测试框架目前是独立于Spring Framework发展的。Spring MVC Test HtmlUnit提供了Spring MVC测试框架HtmlUnit、 WebDriverGeb的 集成测试,简化页面自动化测试,利用这些技术可以完成无需启动服务器即可进行页面测试、自动化页面/页面流程测试、Javascript测试、Mock Service提高集成测试速度。本文只会带你使用HtmlUnit和WebDriver进入基本的页面自动化测试一览,不会深入。

 

注:目前不支持JSP页面模板,因为其运行需要web容器支持,请选择如velocity、freemarker等模板引擎。

 

1、定义控制器 

Java代码  收藏代码
  1. @Controller  
  2. public class TestController {  
  3.   
  4.     @RequestMapping("/test1")  
  5.     public String test1(Model model) {  
  6.         return "test1";  
  7.     }  
  8.   
  9.     @RequestMapping("/test2")  
  10.     public String test2(@RequestParam Long id, @RequestParam String name, Model model) {  
  11.         model.addAttribute("id", id);  
  12.         model.addAttribute("name", name);  
  13.         return "test2";  
  14.     }  
  15. }  

2、页面test1.vm

Java代码  收藏代码
  1. <!DOCTYPE html>  
  2. <html>  
  3. <head>  
  4.     <title></title>  
  5.     <link href="/static/css/style.css" rel="stylesheet" type="text/css">  
  6.     <script type="text/javascript" src="/static/js/jquery-1.11.1.min.js"></script>  
  7. </head>  
  8. <body>  
  9.   
  10. <form id="form" action="/test2" method="post">  
  11.     <label for="id">id:</label>  
  12.     <input type="text" id="id" name="id"/><br/>  
  13.   
  14.     <label for="name">name:</label>  
  15.     <input type="text" id="name" name="name"/><br/>  
  16.   
  17.     <input type="submit" value="submit"/>  
  18. </form>  
  19.   
  20. </body>  
  21. </html>  

输入id和name会跳转到test2页面

 

3、页面test2.vm 

Java代码  收藏代码
  1. <!DOCTYPE html>  
  2. <html>  
  3. <head>  
  4.     <title></title>  
  5.     <link href="/static/css/style.css" rel="stylesheet" type="text/css">  
  6.     <script type="text/javascript" src="/static/js/jquery-1.11.1.min.js"></script>  
  7. </head>  
  8. <body>  
  9.   
  10. <form id="form" method="post">  
  11.     <label for="id">id:</label>  
  12.     <input type="text" id="id" name="id" value="${id}"/><br/>  
  13.   
  14.     <label for="name">name:</label>  
  15.     <input type="text" id="name" name="id" value="${name}"/><br/>  
  16.   
  17.     <input id="submit-btn" type="submit" value="submit"/>  
  18.   
  19. </form>  
  20.   
  21. <script type="text/javascript">  
  22.     $("#submit-btn").click(function() {  
  23.         $(this).closest("form").attr("action""/submit");  
  24.         $("#id").val("123");  
  25.         $("#name").val("zhangsan");  
  26.         return false;  
  27.     });  
  28. </script>  
  29.   
  30. </body>  
  31. </html>  

在该页面绑定id和name数据,然后点击submit按钮会重新设置id和name数据。

 

4、使用HtmlUnit测试 

4.1、初始化Web环境

Java代码  收藏代码
  1. @RunWith(SpringJUnit4ClassRunner.class)  
  2. @ContextConfiguration(value = "classpath:spring-mvc.xml")  
  3. @WebAppConfiguration(value = "spring4.1-htmlunit/src/main/webapp")  
  4. public class MockMvcHtmlUnitHelloWorldTest {  
  5.     @Autowired  
  6.     private WebApplicationContext context;  
  7.   
  8.     MockMvc mockMvc;  
  9.     WebClient webClient;  

服务端端配置请参考《Spring MVC测试框架详解——服务端测试》。

 

4.2、创建WebClient

Java代码  收藏代码
  1. @Before  
  2. public void setup() throws Exception {  
  3.     mockMvc = webAppContextSetup(context).build();  
  4.   
  5.     String contextPath = "";  
  6.     webClient = new WebClient();  
  7.     webClient.setWebConnection(new MockMvcWebConnection(mockMvc, contextPath));  
  8. }  

此处需要指定contextPath,如果不指定会把uri路径中的第一个目录作为上下文,如http://localhost/ctx/path,即ctx是上下文,如果不想带上下文需要指定为“”。

 

获取页面1数据,然后设置form表单数据,其操作方式和Javascript DOM类似:

Java代码  收藏代码
  1. HtmlPage page1 = webClient.getPage("http://localhost/test1");  
  2. HtmlForm form1 = page1.getHtmlElementById("form");  
  3. assertEquals("/test2", form1.getAttribute("action"));  
  4.   
  5. page1.getElementById("id").setAttribute("value""1");  
  6. page1.getElementById("name").setAttribute("value""lisi");  

接着提交表单,当前页面会跳转到test2:

Java代码  收藏代码
  1. HtmlPage page2 = form1.getElementsByAttribute("input""type""submit").get(0).click();  
  2. assertEquals("http://localhost/test2", page2.getUrl().toString());  
  3. assertEquals("1", page2.getElementById("id").getAttribute("value"));  
  4. assertEquals("lisi", page2.getElementById("name").getAttribute("value"));  

然后断言该页面的数据是否是上个页面提交过来的。

 

接着点击表单的submit按钮:

Java代码  收藏代码
  1. HtmlForm form2 = page2.getHtmlElementById("form");  
  2. form2.getElementsByAttribute("input""type""submit").get(0).click();  
  3.   
  4. assertEquals("123", page2.getElementById("id").getAttribute("value"));  
  5. assertEquals("zhangsan", page2.getElementById("name").getAttribute("value"));  

点击该按钮后,会重新设置该页面的id和name输入框的数据。

 

整个测试过程还是比较简单的,当然实际页面要比这个复杂很多。

 

5、使用WebDriver进行测试

5.1、初始化Web环境

Java代码  收藏代码
  1. @RunWith(SpringJUnit4ClassRunner.class)  
  2. @ContextConfiguration(value = "classpath:spring-mvc.xml")  
  3. @WebAppConfiguration(value = "spring4.1-htmlunit/src/main/webapp")  
  4. public class MockMvcWebDriverHelloWorldTest {  
  5.     @Autowired  
  6.     private WebApplicationContext context;  
  7.   
  8.     MockMvc mockMvc;  
  9.     MockMvcHtmlUnitDriver webDriver;  

和使用HtmlUnit类似,就不多介绍了。

 

5.2、创建MockMvcHtmlUnitDriver

Java代码  收藏代码
  1. @Before  
  2. public void setup() throws Exception {  
  3.     mockMvc = webAppContextSetup(context).build();  
  4.     boolean enableJavascript = true;  
  5.     String contextPath = "";  
  6.     webDriver = new MockMvcHtmlUnitDriver(mockMvc, enableJavascript);  
  7.     DirectFieldAccessor accessor = new DirectFieldAccessor(webDriver);  
  8.     BeanWrapper wrapper = new BeanWrapperImpl(accessor.getPropertyValue("webClient"));  
  9.     wrapper.setPropertyValue("webConnection"new MockMvcWebConnection(mockMvc, contextPath));  
  10. }  

此处需要使用反射把WebClient的上下文修改掉,否则必须带着上下文,这是目前它考虑不完善的地方。

 

最后测试完成后,关闭WebDriver

Java代码  收藏代码
  1. @After  
  2. public void tearDown() {  
  3.     webDriver.close();  
  4. }  

 

首先请求test1页面,然后查找相应的元素并输入数据

Java代码  收藏代码
  1. webDriver.get("http://localhost/test1");  
  2. WebElement form1 = webDriver.findElement(By.id("form"));  
  3. webDriver.findElement(By.id("id")).sendKeys("1");  
  4. webDriver.findElement(By.id("name")).sendKeys("lisi");  
  5. form1.findElement(By.cssSelector("input[type=submit]")).click();  

WebDriver支持CSS选择器,在实现负责逻辑时非常有用。

 

提交表单后,跳转到test2页面

Java代码  收藏代码
  1. assertEquals("http://localhost/test2", webDriver.getCurrentUrl());  
  2. assertEquals("1", webDriver.findElementById("id").getAttribute("value"));  
  3. assertEquals("lisi", webDriver.findElementById("name").getAttribute("value"));  

 

接着点击test2页面的submit按钮

Java代码  收藏代码
  1. webDriver.findElementByCssSelector("#form input[type=submit]").click();  
  2.   
  3. assertEquals("/submit", webDriver.findElementById("form").getAttribute("action"));  
  4. assertEquals("123", webDriver.findElementById("id").getAttribute("value"));  
  5. assertEquals("zhangsan", webDriver.findElementById("name").getAttribute("value"));  

   

整个测试过程和HtmlUnit类似,不过API更易用。

 

从目前来看,Spring MVC Test HtmlUnit框架本身只是起到了Spring MVC测试框架和HtmlUnit和WebDriver之间的粘合剂,把它们结合起来,如果没有Spring MVC测试框架的强大,这种融合还是比较麻烦的。

 

相关文章

http://htmlunit.sourceforge.net/

https://code.google.com/p/selenium/wiki/HtmlUnitDriver(需 翻 墙)

https://github.com/spring-projects/spring-test-htmlunit/blob/master/src/asciidoc/index.adoc

Spring MVC测试框架详解——服务端测试

Spring MVC测试框架详解——客户端测试

 

Spring4新特性

Spring4新特性——泛型限定式依赖注入

Spring4新特性——核心容器的其他改进

Spring4新特性——Web开发的增强

Spring4新特性——集成Bean Validation 1.1(JSR-349)到SpringMVC 

Spring4新特性——Groovy Bean定义DSL

Spring4新特性——更好的Java泛型操作API 

Spring4新特性——JSR310日期API的支持

Spring4新特性——注解、脚本、任务、MVC等其

 

源码下载

https://github.com/zhangkaitao/spring4-1-showcase/tree/master/spring4.1-htmlunit

分享到:
评论

相关推荐

    spring4-1-showcase:Spring4.1新特性

    我的公众号:kaitao-1234567 我的新书: 一书总结并梳理了亿级流量网站高可用和高并发原则,通过实例详细介绍了如何落地这些原则。...页面自动化测试框架Spring MVC Test HtmlUnit简介 静态资源处理增强

    基于java的ui自动化测试框架

    Java UI自动化测试框架是软件开发过程中的重要工具,主要用于提高测试效率,确保应用程序用户界面的稳定性和可靠性。本文将深入探讨基于Java的UI自动化测试框架,包括其核心组件、使用的技术以及如何应用于Android ...

    Cucumber-JVM-Spring-MVC-Test-HTMLUnit-Demo:演示如何将Spring-MVC-Test-HTMLUnit与Cucumber-JVM结合使用

    本项目"Cucumber-JVM-Spring-MVC-Test-HTMLUnit-Demo"展示了一种高效且实用的方法,即如何将Cucumber-JVM、Spring MVC Test和HTMLUnit结合,实现对Java Web应用的自动化测试。下面将详细探讨这些技术及其在项目中的...

    Spring-github

    2. `spring-test-mvc-htmlunit`: 这部分涉及的是Spring MVC的测试,特别是使用HtmlUnit进行集成测试。HtmlUnit是一个无头Web浏览器,常用于模拟用户交互,进行Web应用的自动化测试。通过此部分,我们可以了解: - ...

    [课堂课件讲解]Java微服务实践-Spring Boot 测试.pptx

    Spring WebMVC Test Framework 是指 Spring 框架中的 WebMVC 测试框架。该框架提供了一些注解(Annotation),例如 @WebIntegrationTest 等,可以用于配置测试环境。 服务端测试 服务端测试是指对应用程序的服务端...

    htmlunit-2.3..zip

    使用HTMLUnit进行单元测试时,你可以创建一个测试类,通过调用HTMLUnit提供的API来初始化一个WebClient对象,然后打开目标网页,查找并操作页面元素,最后检查结果是否符合预期。例如,你可以模拟点击按钮、填写表单...

    htmlunit测试框架

    htmlunit测试框架,是基于java junit测试框架

    最新版HtmlUnit2.22含API文档

    5. **自动化测试**:HtmlUnit常被用于自动化测试框架中,如Selenium WebDriver,可以进行端到端的Web应用测试,确保代码在各种环境下的正确性。 6. **性能**:由于不依赖于图形用户界面,HtmlUnit的执行速度比实际...

    htmlunit-2.14

    HTMLUnit是一个Java库,它提供了一个无头浏览器模拟器,用于自动化Web页面的测试和抓取。这个库的核心功能是能够解析、渲染和执行JavaScript,从而使得开发者可以在没有实际浏览器环境的情况下,对网页进行功能测试...

    htmlunit源码

    8. **测试框架集成**:HTMLUnit常与JUnit等测试框架结合使用,编写自动化测试用例,验证网页应用的功能和行为。 9. **性能**:由于其无头特性,HTMLUnit比使用真实浏览器进行测试和抓取更快速、轻量级,尤其适用于...

    自动化测试笔记.zip

    自动化测试是现代软件开发过程中的重要组成部分,它旨在通过计算机程序来执行预先定义的测试用例,以验证软件的功能、性能、稳定性等特性。在"自动化测试笔记.zip"这个压缩包中,我们可以预想它包含了关于自动化测试...

    Htmlunit2.8开发文档

    HtmlUnit 是一个强大的Java库,它模拟了一个无头Web浏览器,允许开发者进行自动化测试和网页抓取。在HtmlUnit 2.8版本中,你可以利用它来执行JavaScript、处理Ajax请求,以及与网页上的各种元素交互,而无需实际运行...

    htmlunit-2.19-bin

    7. **与其他工具的集成**:HTMLUnit可以与JUnit、TestNG等测试框架集成,便于构建自动化的测试套件。此外,也可以与Selenium WebDriver结合,增强其功能,特别是在处理现代Web应用时。 8. **性能优势**:由于...

    最新htmlunit 2.29

    - 自动化测试:HTMLUnit是自动化测试框架(如Selenium)的一个无头选项,适用于进行功能测试和回归测试。 - 数据抓取:开发者可以利用HTMLUnit解析和爬取网页数据,特别是在处理需要JavaScript交互的动态网站时。 ...

    giant-htmlunit_test.rar

    HTMLUnit是一个Java库,它提供了一个无头浏览器的模拟,用于自动化Web页面的测试和抓取。这个"giat-htmlunit_test.rar"压缩包显然包含了与使用HTMLUnit进行JavaScript交互和网页抓取相关的代码示例或测试用例。在...

    htmlunit-2.29.zip

    HTMLUnit是一个强大的自动化测试工具,尤其适用于Web应用程序的测试。它是基于Java的,模拟了一个无图形用户界面的浏览器,能够执行JavaScript,解析HTML,并且支持CSS。这个"htmlunit-2.29.zip"文件包含了HTMLUnit...

    selenium+java+junit+maven

    【标题】"selenium+java+junit+maven" 指的是一个基于这些技术的Java自动化测试框架。这个框架主要用于Web应用的自动化测试,确保软件的功能性和稳定性。 **Selenium** 是一个广泛使用的Web浏览器自动化工具,支持...

    jsoup_htmlunit_seleniumWebdriver_jar

    Selenium WebDriver不仅仅是一个测试框架,也是自动化测试的重要组成部分,广泛应用于Web应用的功能测试和端到端测试。 【jar文件】 .jar文件是Java应用程序的归档文件,它包含了编译后的.class文件以及其他资源...

    htmlunit-2.39.0-bin.zip

    HTMLUnit是一个Java库,模拟一个无头Web浏览器,主要用于自动化测试和网页抓取。它提供了对HTML、CSS和JavaScript的支持,使得开发者可以在不依赖实际浏览器环境的情况下,进行Web应用程序的功能测试。HTMLUnit-2.39...

    htmlUnit所需jar包

    HTMLUnit是一个Java库,它提供了一个无头浏览器模拟器,用于自动化Web页面的导航和交互。这个库在测试、数据抓取以及不需图形用户界面的场景中非常有用。"htmlUnit所需jar包"的标题表明这是一个包含HTMLUnit运行所需...

Global site tag (gtag.js) - Google Analytics