使用实现Web应用集成功能性测试 -- WebTest & Maven

自链接

最近在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的测试用例。具体配置如下:

                    <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>
                            <loglevel>fatal</loglevel>
                        </configuration>
                    </plugin>

WebTest用例文件(Web-tests.xml)配置

?xml version="1.0" encoding="UTF-8"?>
<pre name="code" class="html"><!-- 导入 config & login xmlf -->

<!DOCTYPE project [ <!ENTITY config SYSTEM "./config.xmlf"> <!ENTITY login SYSTEM "./login.xmlf">]>

<pre name="code" class="html"><!-- 定义默认跑的target -->

<project basedir="." default="run-all-tests">

    <!-- 在ant中引入webtest标签 -->

<taskdef resource="webtestTaskdefs.properties" /> <!-- 引入正则表达式: allows to build a message string with parameter replacement: "User {0} successfully created" --> <taskdef resource="net/sf/antcontrib/antcontrib.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">

<pre name="code" class="html">            <!-- 先执行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=".*${system}.*"
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"/> <verifytitle description="we should see the user profile title" text=".*${userProfile.title}.*" regex="true"/> </steps> </webtest> </target></project>


由于一般的测试都离不开这个Login界面,所以把Login的target抽出了,还有连接服务器的配置config任务也可以抽出来放成两个 单独的文件了。

login.xmlf:登陆页面具体操作

<span style="color:#3333FF;"><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"/>
<verifytitle description="Home Page follows if login ok" text=".*${welcome}.*" regex="true"/></span>

config.xmlf:webtest的配置,使用webtest-maven-plugin中configuration值做为输入参数一部分

<span style="color:#3333FF;"><config host="${host}" port="${port}" protocol="http"
    basepath="${basepath}" resultpath="${resultpath}" saveresponse="true"
    resultfile="web-tests-result.xml" haltonfailure="${haltonfailure}"
    haltonerror="${haltonerror}" summary="true">
    <header name="Accept-Language" value="${user.language}"/>
    <option name="ThrowExceptionOnScriptError" value="true"/>
</config></span>

附:Webtest Maven Plugin链接

WebTest的官方链接网址

时间: 2024-12-12 14:34:11

使用实现Web应用集成功能性测试 -- WebTest & Maven的相关文章

Maven实现Web应用集成測试自己主动化 -- 部署自己主动化(WebTest Maven Plugin)

上篇:Maven实现Web应用集成測试自己主动化 -- 測试自己主动化(WebTest Maven Plugin) 之前介绍了怎样在maven中使用webtest插件实现web的集成測试,这里有个遗留问题,就是在运行maven的intergation測试时候web应用已经部署在容器中处于in service的状态,那么web应用的部署能否够自己主动化呢?在我们公司的系统中,因为使用了weblogic的cluster,自己写了脚步来实现部署,花费了不少人力物力,事实上java web应用早就有福音

Maven实现Web应用集成测试自动化 -- 部署自动化(WebTest Maven Plugin)

上篇:Maven实现Web应用集成测试自动化 -- 测试自动化(WebTest Maven Plugin) 之前介绍了如何在maven中使用webtest插件实现web的集成测试,这里有个遗留问题,就是在执行maven的intergation测试时候web应用已经部署在容器中处于in service的状态,那么web应用的部署是否可以自动化呢?在我们公司的系统中,由于使用了weblogic的cluster,自己写了脚步来实现部署,花费了不少人力物力,其实java web应用早就有福音了,是一款自

Web下的整体测试 --性能测试及优化思路

随着Internet的日益普及,现在基于B/S结构的大型应用越来越多,可如何对这些应用进行测试成为日益迫切的问题.有许多测试人员来信问我B/S的测试如何做,由于工作较繁忙,对大家提出的问题也是头痛医头脚痛医脚,没有对WEB的测试过程做一个整体的概述.希望通过本篇能够让大家了解大型Web应用是如何来进行测试的. B/S下的功能测试比较简单,关键是如何做好性能测试.目前大多数的测试人员认为只要跑一些测试工具证明我的产品是可以达到性能的就ok了,为了证明而去测试是没有任何价值的,关键是要发现产品性能上

一个Web 持续集成工作实践

一个web的持续基础实践: https://mp.weixin.qq.com/src=3&timestamp=1494325174&ver=1&signature=wFVC0E6YlKsNsCYnhs8XlMdRTmtwBU8qMW4YCsNoryvcIAGD8hPCnOCaXb5WisyGrmEOVUJVd1n2FRjV3ohyUWuTDUGMGhkDPXAlvd6t0RtNSivqrMRgof1KJcnZrAvzTYkjURSzDPjk8wR5vq8ASUOarm9mFlUad

SimpleInjector与MVC4集成,与Web Api集成,以及通过属性注入演示

SimpleInjector与MVC4集成,与Web Api集成,以及通过属性注入演示 1,与MVC集成 见http://simpleinjector.codeplex.com/wikipage?title=Integration%20Guide&referringTitle=Home我们自己建个MVC4项目测试 1.1 nuget 只需要安装Mvc的集成即可,其它的依赖会自动安装: Install-Package SimpleInjector.Integration.Web.Mvc 1.2 G

测试过程之过分关注功能性测试

一.定义: 过分强调功能测试,而非测试质量.数据和接口需求.以及测试架构.设计和实现的约束. 二.发生时间段 非功能性需求中. 三.陷阱表现 1.大多数的测试关注验证功能性表现 2.没有验证质量特性的适当水平(如:可用性.可靠性.健壮性.安全性.保密安全性.易用性) 3.测试工程师.可靠性工程师.安全性工程师.人为因素工程师未执行相关专业测试类型(如未执行渗透测试) 4.只在系统交付并投入运行后,才确认各种质量特性和其属性的不足水平. 四.负面后果 1.测试无法验证系统是否具有重要质量特性,是否

SpringBoot | 第三十三章:Spring web Servcies集成和使用

前言 最近有个单位内网系统需要对接统一门户,进行单点登录和待办事项对接功能.一般上政府系统都会要求做统一登录功能,这个没啥问题,反正业务系统都是做单点登录的,改下shiro相关类就好了.看了接入方案,做坑爹的是需要业务系统提供一个webService服务,供统一平台调用.对于ws服务,是真的除了大学期间要去写个调用天气预报的作业后,就再也没有接触过了.查阅了SpringBoot文档后,发现确实有一章节是将webService的,所以,今天就来简单介绍下Spring Web Service的集成和

Spring与Web环境集成

1.Spring与Web环境集成 1.1自定义监听器将Spring集成到web环境 1_需求:将spring集成到web开发环境中,将所有的bean对象创建交给spring,除了servlet,servlet可以理解为一个测试类.在servlet中获取ApplicationContext,获取对应的bean 环境搭建,这个是自己一步步取实现的,其实spring有提供简单的方法完成1.1的操作 <!--在pom文件中引入所需的依赖--> <!--Spring坐标--> <dep

Web应用集成攻击平台Burpsuite的使用

burpsuite是功能强大的web应用集成渗透平台,有很多用途.这次就简单地记录一次使用,得罪哪位请多担待. 打开burpsuite.记得从BurpLoader.jar打开,虽然没有帅气的欢迎画面,不过至少免去到处去问密钥是什么的尴尬. 在Proxy-Options选项卡中设置对127.0.0.1:8080端口的监听.另设置浏览器的代理服务器为127.0.0.1:8080(因本机的浏览器没有“Internet选项”,设置代理服务器过程有所不同,在此不做演示) 选择Proxy-Intercept