Maven实现Web应用集成測试自己主动化 -- 測试自己主动化(WebTest Maven Plugin)
近期在appfuse看到使用webtest-maven-plugin实现Web应用的集成測试,研究了下。感觉很不错。对于Web应用自己主动构建很有帮助,在性能測试之前能够保证Web应用的基本功能工作正常,分享给大家。
WetTest工作原理
它是基于Ant来执行的Web页面的測试工具。
通过执行不同的target,測试页面上面提供的全部功能。它的工作原理是运用比較出名的HtmlUnit来实现对一个页面功能的測试。
它的工作流程就是模拟一个浏览器的事件(页面提供的功能:能够调用一个Url,能够点击一个button,label等,能够为页面上的元素赋值),然后通过抓取返回的页面上的Title或者是element的值来校验是否返回预期的结果。
WetTest与Maven的集成配置
Maven的配置
在Web应用的pom.xml中引入webtest-maven-plugin,定义集成測试阶段运行測试,验证阶段运行结果验证,系统集成測试之后生成报告。
同一时候指定Web应用的地址,測试用例所在文件,生成文件所在路径,日志级别以及遇到错误的时候採取的策略。这样在Maven构建阶段就会自己主动运行WebTest的測试用例。
详细配置例如以下:
在build节点增加webtest插件 (插件详细參数參考)
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>webtest-maven-plugin</artifactId>
<version>1.0.0</version>
<executions>
<execution>
<id>webtest-test</id>
<phase>integration-test</phase>
<goals>
<goal>test</goal>
</goals>
</execution>
<execution>
<id>webtest-verify</id>
<phase>verify</phase>
<goals>
<goal>verify-result</goal>
</goals>
</execution>
<execution>
<id>webtest-report-html</id>
<phase>post-integration-test</phase>
<goals>
<goal>report</goal>
</goals>
</execution>
</executions>
<configuration>
<host>${project.cargo.host}</host>
<port>${project.cargo.port}</port>
<sourcedirectory>src/test/resources</sourcedirectory>
<sourcefile>web-tests.xml</sourcefile>
<target>${project.webtest.target}</target>
<basepath>${project.build.finalName}</basepath>
<resultpath>target/webtest/webtest-results</resultpath>
<resultpath>target/webtest/webtest-results</resultpath>
<haltonfailure>false</haltonfailure>
<haltonerror>false</haltonerror>
<pre name="code" class="html"> <autorefresh>true</autofresh>
<loglevel>fatal</loglevel>
</configuration>
</plugin>
WebTest用例文件(Web-tests.xml)配置
? xml version="1.0" encoding="UTF-8"? >
<!-- 导入 config & login xmlf -->
<!DOCTYPE project [
<!ENTITY config SYSTEM "./config.xmlf">
<!ENTITY login SYSTEM "./login.xmlf">
]> <!-- 定义默认跑的target --> <project basedir="." default="run-all-tests"> <!-- 在ant中引入webtest标签 --> <taskdef resource="webtestTaskdefs.properties" /> <!-- web系统非常多都是多语言的。做页面验证的时候也须要多语言支持, 第二个找不到其它语言时候的默认语言 -->
<property file="../../../target/classes/ApplicationResources_${user.language}.properties"/>
<property file="../../../target/classes/ApplicationResources.properties"/>
<!-- 定义 runs all targets。依赖系统中各个功能模块,登陆。登出。用户操作-->
<target name="run-all-tests" depends="Login,Logout,UserTests"
description="Call and executes all test cases (targets)"/>
<!-- 定义runs user-related tests,RUD,系统不存在用户Create功能 -->
<target name="UserTests" depends="EditUser,SearchUser,SaveUser"
description="Call and executes all user test cases (targets)">
<echo>Successfully ran all User UI tests!</echo>
</target>
<!-- 登陆測试,Login to the application -->
<target name="Login" description="Runs login test and verifies Home's Title">
<!-- 定义登陆測试的webtest详细内容 -->
<webtest name="login"> <!-- 先运行webtest配置 --> &config;
<!-- 详细測试步骤,来自login.xml -->
<steps> &login; </steps>
</webtest>
</target>
<!-- Logout of the application -->
<target name="Logout" description="Runs logout test and verifies Login's Title">
<webtest name="logout">
&config;
<steps>
&login;
<invoke description="get Logout Page" url="/j_security_logout"/>
<verifytitle description="we should see the login title" text=".*${<span style="font-size:14px;">login.service</span>}.*" regex="true"/>
</steps>
</webtest>
</target>
<!-- Verify the edit user screen displays without errors -->
<target name="EditUser" description="Tests selecting the 'Edit Profile' forward">
<webtest name="editUser">
&config;
<steps>
&login;
<invoke description="click Edit Profile button" url="/userInfo/save.action"/>
<verifytitle description="we should see the user profile title" text=".*${userProfile.title}.*" regex="true"/>
</steps>
</webtest>
</target>
</project>
因为一般的測试都离不开这个Login界面,所以把Login的target抽出了,还有连接server的配置config任务也能够抽出来放成两个 单独的文件了。login.xmlf:登陆页面详细操作
<invoke description="get Login Page" url="/"/>
<verifytitle description="we should see the login title" text=".*${system}.*" regex="true"/>
<setinputfield description="set user name" name="j_username" value="admin"/>
<setinputfield description="set password" name="j_password" value="password"/>
<clickbutton label="${login.submit}" description="Click the submit button"/>
<verifytext description="Home Page follows if login ok" text=".*${welcome}.*" regex="true"/>
config.xmlf:webtest的配置,使用webtest-maven-plugin中configuration值做为输入參数一部分
<config host="${host}" port="${port}" protocol="http"
basepath="${basepath}" resultpath="${resultpath}" saveresponse="true"
resultfile="web-tests-result.xml" haltonfailure="${haltonfailure}"
haltonerror="${haltonerror}" autorefresh="${autorefresh}">
<header name="Accept-Language" value="${user.language}"/>
<option name="ThrowExceptionOnScriptError" value="true"/>
</config>
配置web-tests.xml的细节能够看:官方manual
小心地雷:
1. webtest-maven-plugin非常久木有更新了。里面依赖的htmlunit的版本号太旧了。之前我直接使用plugin自带的依赖htmlunit2.8直接导致測试挂死,jstack dump出来的线程是running状态,把log改成debug也看不出来为什么挂死,幸好看到appfuse里面说更新了htmlunit的版本号解决和jquery的兼容性问题。这是个非常大的坑,一定要去htmlunit看看它兼容什么js,或者在appfuse里面看也行。
2. 在測试的时候遇到了下面异常。当时以为是语法写错了,研究了一阵子才发现是resource file中未定义login.title,定义被改成了login.service,这里不是语法问题。。
。详细复杂配置语法參考java reg官方文档
java.util.regex.PatternSyntaxException: Illegal repetition near index 2
.*${login.title}.*
3. 最開始没有把autorefresh打开,结果login page spring security3默认是回给client一个自刷新页面,导致測试失败
下篇:Maven实现Web应用集成測试自己主动化 -- 部署自己主动化(Cargo Maven Plugin)
Maven实现Web应用集成測试自己主动化 -- 測试自己主动化(WebTest Maven Plugin)的更多相关文章
- Maven实现Web应用集成測试自己主动化 -- 部署自己主动化(WebTest Maven Plugin)
上篇:Maven实现Web应用集成測试自己主动化 -- 測试自己主动化(WebTest Maven Plugin) 之前介绍了怎样在maven中使用webtest插件实现web的集成測试,这里有个遗留 ...
- maven课程 项目管理利器-maven 4-1 使用maven创建web项目 5星
本节主要讲了使用maven创建web项目 主要分这三大类: 1 新建maven web项目 2 后续处理普通java项目转web项目需要关注的点 3 maven特色转web需要关注的点 1 新建ma ...
- Maven实战(五)——自己主动化Web应用集成測试
自己主动化集成測试的角色 本专栏的上一篇文章讲述了Maven与持续集成的一些关系及详细实践,我们都知道,自己主动化測试是持续集成不可缺少的一部分,基本上,没有自己主动化測试的持续集成,都非常难称之为真 ...
- Eclipse集成Maven的Web工程demo(独立及Maven集成tomcat)
用到的工具JDK1.8Eclipse Luna j2eeEclipse 集成的Mavetomcat7 (集成在xampp中的独立web服务器,或者通过Maven plugin集成web服务器) 步骤如 ...
- Windows环境搭建Web自己主动化測试框架Watir(基于Ruby)
web自己主动化測试一直是一个比較迫切的问题 图1-1 须要安装的工具 http://railsinstaller.org/ 由于安装Ruby还须要用到其它的一些开发工具集.所以建议从站点http:/ ...
- Android自己主动化測试解决方式
如今,已经有大量的Android自己主动化測试架构或工具可供我们使用,当中包含:Activity Instrumentation, MonkeyRunner, Robotium, 以及Robolect ...
- 带有机器人框架的.NET自己主动化測试
Clayton Neal在软件測试和质量保证方面有超过13年的经验,当中有八年的Windows, web,和移动应用程序的測试自己主动化经验.他在測试领域的全部等级都工作过.近期他在Bloomberg ...
- Selenium2 Python 自己主动化測试实战学习笔记(五)
7.1 自己主动化測试用例 无论是功能測试.性能測试和自己主动化測试时都须要编写測试用例,測试用例的好坏能准确的体现了測试人员的经验.能力以及对项目的深度理解. 7.1.1 手工測试用例与自己主动化測 ...
- SVN基于Maven的Web项目更新,本地过程详细解释
周围环境 MyEclipse:10.7 Maven:3.1.1 概要 最近在做项目,MyEclipse下载SVN基于上述Maven的Web问题,有时候搞了非常半天,Maven项目还是出现叉号,最后总结 ...
随机推荐
- cs229_part2
part2 这节课主要讲的是生成式模型,那么与这个生成式模型相对于的就是我们上节课所讲那几个辨别式模型.所以生成式模型和辨别式模型的区别是什么呢.我先给出数学上的定义: 这是我们上节课线性回归所用的给 ...
- hibernate 学习
hibernate.cg.xml 可以通过myeclipse自动生成,添加数据库信息: <?xml version='1.0' encoding='UTF-8'?> <!DOCTYP ...
- [WPF自定义控件库]使用WindowChrome的问题
1. 前言 上一篇文章介绍了使用WindowChrome自定义Window,实际使用下来总有各种各样的问题,这些问题大部分都不影响使用,可能正是因为不影响使用所以一直没得到修复(也有可能别人根本不觉得 ...
- ThreadLocal 的分析
http://blog.csdn.net/LHQJ1992/article/details/52451136 个人感觉这是所有关于ThreadLocal里中最靠谱的一篇文章. ps:其实官方文档才是最 ...
- luogu2568 GCD
先筛法求出 \([1,n]\) 间的素数,然后枚举每个素数.可以发现,对于每个素数 \(x\),它的贡献是 \([1,\lfloor n/x \rfloor]\) 间的有序互质对数. 我们钦定 \(( ...
- 【EF 1】EF实体框架 原理+实例
一.知识回顾 到目前为止,自己学到的链接数据库操作已经经历了几个阶段,分别是:学生信息管理和(第一次)机房收费时的直接连接数据库操作表格,然后是机房个人重构中应用的操作实体,在其中还利用了一个很重要的 ...
- 使用python实现简单的爬虫
python爬虫的简单实现 开发环境的配置 python环境的安装 编辑器的安装 爬虫的实现 包的安装 简单爬虫的初步实现 将数据写入到数据库-简单的数据清洗-数据库的连接-数据写入到数据库 开发环境 ...
- NAND FLASH 物理结构分析
转自:http://blog.51cto.com/hardywang/2053915 NAND Flash是一种非易失性随机访问存储介质,基于浮栅(Floating Gate)晶体管设计,通过浮栅来锁 ...
- mark一下。hadoop分布式系统搭建
用于测试,我用4台虚拟机搭建成了hadoop结构 我用了两个台式机.一个xp系统,一个win7系统.每台电脑装两个虚拟机,要不然内存就满了. 1.安装虚拟机环境 Vmware,收费产品,占内存较大. ...
- SHoj 420 购买装备
购买装备 发布时间: 2017年7月9日 18:17 最后更新: 2017年7月9日 21:05 时间限制: 1000ms 内存限制: 128M 描述 最近盛大的一款游戏传奇世界极其火爆. ...