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

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

之前介绍了怎样在maven中使用webtest插件实现web的集成測试,这里有个遗留问题,就是在运行maven的intergation測试时候web应用已经部署在容器中处于in service的状态,那么web应用的部署能否够自己主动化呢?在我们公司的系统中,因为使用了weblogic的cluster,自己写了脚步来实现部署,花费了不少人力物力,事实上java web应用早就有福音了,是一款自己主动安装容器和部署应用的插件神器:cargo-maven2-plugin,这插件能够兼容全部眼下主流的server如jboss、tomcat、glassfish、jetty等。

它的配置非常easy,在build里面增加cargo-maven2-plugin,为了实现集成測试自己主动化,声明集成測试阶段之前调用cargo:start启动容器和部署应用,集成測试结束后调用cargo:stop关闭容器。默认start启动的容器在maven生存周期结束之后就会结束,有时候为了调试方便,能够调用cargo:run来启动容器和部署应用,在须要的时候再通过Ctrl+C结束容器执行。

为了实现容器启动和部署自己主动化,还须要提供一些配置參数给插件,以下给出个演示样例,Cargo还有非常多其他的功能,详细能够參考:Cargo自己主动部署官方站点

                     <plugin>
                       <groupId>org.codehaus.cargo</groupId>
                       <artifactId>cargo-maven2-plugin</artifactId>
                        <version>${project.cargoPluginVersion}</version>
                        <configuration>
                            <!-- 定义container -->
                            <container>
                                <!-- container类型 jetty/tomcat/weblogic/jboss etc -->
                                <containerId>${project.cargo.container}</containerId>
                                <!-- 指定容器下载路径,保存路径,解压路径,放在target文件夹能够在clean的时候自己主动清除-->
                                <zipUrlInstaller>
                                    <url>${project.cargo.container.url}</url>
                                    <downloadDir>${project.build.directory}/${project.cargo.container}/downloads</downloadDir>
                                    <extractDir>${project.build.directory}/${project.cargo.container}/extracts</extractDir>
                                </zipUrlInstaller>
                                <!-- cargo log 存储 -->
                                <log>${project.build.directory}/logs/cargo.log</log>
                                <!-- container log 存储 -->
                                <output>${project.build.directory}/logs/container.out</output>
                            </container>
                            <!-- 加入container相关的配置信息 -->
                            <configuration>
                                <!-- 设置deploy home -->
                                <home>${project.build.directory}/${project.cargo.container}/container</home>
                                <!-- <type>existing</type> existing type是使用已有的容器,在开放环境中使用,集成測试
                                      一般使用默认的install type,每次又一次创建全部资源,保证每次測试环境OK,另一种
                                      远程部署runtime type (见以下凝视),方便远程部署測试-->
                                <properties>
                                    <!-- -->
                                    <project.cargo.hostname>${project.cargo.host}</project.cargo.hostname>
                                    <cargo.servlet.port>${project.cargo.port}</cargo.servlet.port>
                                    <cargo.servlet.uriencoding>${project.build.sourceEncoding}</cargo.servlet.uriencoding>
                                    <!--
                                        为了防止和环境中其它节点冲突,能够设置容器专门属性,
                                        <cargo.tomcat.ajp.port>8123</cargo.tomcat.ajp.port>
                                         <cargo.tomcat.manager.protocol>http</cargo.tomcat.manager.protocol>
                                        <cargo.tomcat.manager.hostname>127.0.0.1</cargo.tomcat.manager.hostname>
                                        <cargo.tomcat.manager.port>8080</cargo.tomcat.manager.port>
                                        <cargo.tomcat.manager.username>admin</cargo.tomcat.manager.username>
                                        <cargo.tomcat.manager.password>1234</cargo.tomcat.manager.password> -->
                                </properties>
                                <!-- for remote deploy, also container type should be remote
                                    <type>runtime</type>
                                    <properties>
                                      <cargo.remote.username>username</cargo.remote.username>
                                      <cargo.remote.password>password</cargo.remote.password>
                                    </properties> -->
                            </configuration>
<pre>                            <!-- 须要部署的应用配置 -->
                            <deployables>
                                   <deployable>
                                     <!-- group/artifact使用默认值部署本应用,默认从maven output获取部署包,能够在location中指定
                                      <groupId>war group id</groupId>
                                      <artifactId>war artifact id</artifactId>
                                      <location> war location</location>
                                     -->
                                     <type>war</type>
                                     <properties>
                                        <context>optional root context</context>
                                     </properties>
                                     <pingURL>optional url to ping to know if deployable is done or not</pingURL>
                                     <pingTimeout>optional timeout to ping (default 20000 milliseconds)</pingTimeout>
                                   </deployable>
                            </deployables>
                            <!-- 定义打包路径 -->
                            <packager>
                                    <outputLocation>${project.build.directory}/packaged</outputLocation>
                            </packager>
                        </configuration>
                        <executions>
                            <!--为了完毕集成測试,在開始集成測试之前启动容器和部署应用 -->
                           <execution>
                               <id>start-container</id>
                               <phase>pre-integration-test</phase>
                               <goals> <goal>start</goal> </goals>
                           </execution>
                           <!--測试完毕后,关闭容器 -->
                           <execution>
                               <id>stop-container</id>
                               <phase>post-integration-test</phase>
                               <goals> <goal>stop</goal> </goals>
                           </execution>
                           <!--关闭容器后打包容器留作日后分析 -->
                           <execution>
                               <id>package-container</id>
                               <phase>post-integration-test</phase>
                               <goals> <goal>package</goal> </goals>
                           </execution>
                         </executions>
                      </plugin>
				
时间: 2024-08-27 05:07:35

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

软件測试基本方法(六)之集成測试和系统測试

在软件开发中.常常会遇到这种情况.单元測试时确认每一个模块都能单独工作,但这些模块集成在一起之后会出现有些模块不能正常工作.比如,在chrome环境下用js写了一个实时捕捉video中特定区域的模块,正常工作:利用worker线程进行webgl场景渲染,也正常.但是当两个运算合并时.出现一个模块不能正常执行,原因在于两个模块不适合在worker线程中结合.基于worker本身的局限性,仅仅能有一个模块正常工作. 所以,非常有必要进行集成測试. (1)集成測试定义: 集成測试是将软件集成起来,对模

PAAS平台的web应用性能測试与分析

引言 为什么我会写这一篇博客,由于近期非常多京东云擎jae的用户反应一个问题就是他们部署在jae上面的应用訪问非常慢,有极少数应用甚至常常出现504超时现象.当然大家首先想到的是jae性能太差,这也是人之常情,往往出现什么错误的时候首先想到是别人的不好.工作中非常多同事也是这样,假设软件系统出现一个bug首先怀疑的肯定不是自己写的代码.今天花时间写这一篇博客主要就是告诉大家如何确定我们部署在PAAS平台(不不过JAE哦)web应用为什么慢?慢在哪儿了?有什么方法能够解决? 原因分析 出现訪问自己

屏幕測试亮点,新买了一个显示器,使用web简单的測试下了亮点

1,购买了一个新的显示器 趁着双11的时候价格廉价.入手了一个显示器. http://serve.netsh.org/pub/dead_pixel.bin 滚动下就能够换颜色了.把chrome最大化,简单測试了下,没有亮点坏点. 2.双显示器 程序开发还是有两个屏幕效率比較高. 假设是3个屏幕的话.比較不easy找到鼠标,还是两个好. 尤其是敲代码.看代码,能够显示很多其它内容. 显示器和苹果miniDP转DP接口.(双十一优惠222) http://item.jd.com/935350.htm

用python做自己主动化測试--对server端的自己主动化測试(3)-很多其它http client实例

上一篇中仅仅是实现了一个非常easy的http client功能,request还提供了keep alive, SSL, 多文件上传,cookie 管理功能,http requests头管理等丰富的功能,仅仅要你浏览器实现的功能,requests里面都支持. #!/usr/bin/env python #coding=utf-8 import requests def login_douban(username, passwd): post_data={'source':'index_nav',

Android Gradle Plugin指南(四)——測试

原文地址:http://tools.android.com/tech-docs/new-build-system/user-guide#TOC-Testing 5.Testing(測试) 构建一个測试程序已经被集成到应用项目中,没有必要再专门建立一个測试项目. 5.1 Basics and Configuration(基本知识和配置) 正如前面所提到的,紧邻main sourceSet的就是androidTest sourceSet,默认路径在src/androidTest/下. 在这个測试so

UnityTestTools測试工具

由于工作关系,要了解Unity上的測试工具,该工具基于Nunit框架.通过查阅资料了解到在Unity5.3中做出了一些改变,自带的仅仅剩下单元測试工具,假设想用其它的工具比方断言.集成測试,就须要前往Unity的应用商店搜索UnityTestTools进行进行下载,期待之后的版本号整合很多其它更强大的功能. 測试工具包括: 集成測试框架Integration Test Framework 集成測试同意您在一个场景自己主动验证过程. 在现有内容里直接在编辑器中构建測试验证报告. 断言组件Asser

菜鸟学Java(十九)——WEB项目測试好帮手,Maven+Jetty

做WEB开发,測试是一件非常费时间的事情.所以我们就应该用更简单.更快捷的方式进行測试.今天就向大家介绍一个轻量级的容器--jetty.j今天说的etty是Maven的一个插件jetty-maven-plugin,与Maven配合起来使用非常的方便,它的配置也非常的简单,以下我们就看看它怎么用吧! 在pom.xml 文件的<project>标签下添?例如以下代码: <build> <plugins> <plugin> <groupId>org.m

玩转单元測试之WireMock -- Web服务模拟器

WireMock 是一个灵活的库用于 Web 服务測试,和其它測试工具不同的是.WireMock 创建一个实际的 HTTPserver来执行你的 Web 服务以方便測试. 它支持 HTTP 响应存根.请求验证.代理/拦截.记录和回放. 而且能够在单元測试下使用或者部署到測试环境. 它能够用在哪些场景下: 測试移动应用依赖于第三方REST APIs 创建高速原型的APIs 注入否则难于模拟第三方服务中的错误 不论什么单元測试的代码依赖于web服务的 文件夹 前提条件 Maven配置 准备工作 Ex

Maven项目中mvn clean后找不到測试类问题

在Maven项目中进行单元測试,但mvn clean后又一次mvn install项目,再次进行单元測试.会有下面的错误. <span style="font-family:KaiTi_GB2312;font-size:18px;">Class not found com.core.order.service.impl.OrderServiceImplTest java.lang.ClassNotFoundException: com.core.order.service.