注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

网易杭州 QA Team

务实 专注 分享 做有态度的QA

 
 
 
 
 

日志

 
 

eclipse+maven+testng+maven-surefire-plugin使用问题全记录  

来自隋相   2015-09-07 16:14:56|  分类: 测试工具 |举报 |字号 订阅

  下载LOFTER 我的照片书  |
1)首先,昨天的最终目标是想要尝试使用maven-surefire-plugin对指定的文件进行测试。因为默认情况下,maven也是利用surefire插件来进行测试的。maven test以及maven install等命令都是自动执行src/test/java目录下所有以Test开头/Test结尾/TestCase结尾的java文件。执行mvn test的时候我发现输出是这样的:
                                        eclipse+maven+testng+maven-surefire-plugin使用与问题全记录 - 隋相 - suixiang3的博客
这里要注意的是我此时在pom.xml中没有手动添加任何依赖,maven所使用到的各种插件都是默认的,我们看到maven使用了surefire插件进行测试执行。测试报告写在路径target/surefire-reports中。
所以要想跟ant似的指定执行哪些测试用例的执行,就要显式地使用maven-surefire-plugin。

2)然后,开始新建maven项目LifeIsNew,建好maven项目后它的pom.xml就自动添加了junit依赖(鼓励进行单元测试~),接着我在pom.xml中添加testNG的依赖:
          <dependency>
          <groupId>org.testng</groupId>
          <artifactId>testng</artifactId>
          <version>6.8.8</version>
          <scope>test</scope>
          </dependency>
   接着在项目(LifeIsNew)上右键-〉maven->update project 等了一会,点开工程栏Maven Dependencies发现没有加上我testng的依赖包。我尝试在pom.xml右键进行maven install发现在下载testng的依赖时候卡住了,等了一会后开始报告错误:
[ERROR] Failed to execute goal on project LifeIsNew: Could not resolve dependencies for project com.netease.suixiang:LifeIsNew:jar:0.0.1SNAPSHOT: Failed to collect dependencies at org.testng:testng:jar:6.8.8: Failed to read artifact descriptor for org.testng:testng:jar:6.8.8: Could not transfer artifact org.testng:testng:pom:6.8.8 from/to central (https://repo.maven.apache.org/maven2): Connect to repo.maven.apache.org:443 [repo.maven.apache.org/23.235.47.215] failed: Read timed out -> [Help 1]
好吧,网络问题导致不能从maven中央仓库下载jar包。反复试了多遍,都不行。这是由于当第一次网络原因导致jar下载失败时,会在本地仓库对应目录下建立一个以lastUpdated结尾的文件,果然在.m2/repository/org/testng/6.8.8目录下产生了一个testng-6.8.8.pom.lastUpdated文件,再次使用update project更新时,由于这个lastUpdated文件存在,不进行本jar包的更新。于是我把这个更新文件删掉了。再次更新时发现网络还是不行。
这时候我想:要不我自己下载下来这个jar包,放到我的本地仓库中去?!
结果还是不行。原因是在执行maven test或者maven install的时候,它还是会先去maven中央仓库下载依赖包。。我猜想以后反复构建的时候才不会去中央仓库,第一次的时候肯定会去中央仓库更新~

3)这怎么办才好呢?请教开发的同学,得知在不能从中央仓库下载的情况下可以使用杭研的私服。也就是maven下载依赖的时候不从中央仓库下载了,直接从杭研私服上下载。
     使用杭研私服需要办两件事:
     第一,将杭研私服的配置文件settings.xml放到本地仓库的目录下,我的目录是C:\Users\hzsuixiang\.m2目录下。酱紫:
      eclipse+maven+testng+maven-surefire-plugin使用与问题全记录 - 隋相 - suixiang3的博客
   这个xml文件中指明了杭研私服的地址、用户名、密码等信息,还有关键的本地仓库的地址,我设置为D盘/.m2/repository目录。
  第二,修改eclipse的maven配置,在window->preferences->maven->UserSettings去设置这个xml文件。酱紫:
eclipse+maven+testng+maven-surefire-plugin使用与问题全记录 - 隋相 - suixiang3的博客
这里注意那个global settings不用去管它,我这里是自己本地下载的一个maven,这个可以空着的。写好user settings后,点击update Settings,会发现这里的本地仓库地址修改为xml当中所指明的仓库地址。
然后从私服http://mvn.hz.netease.com/artifactory/webapp/home.html上查找testng的依赖包如何写:
 <dependency>
    <groupId>org.testng</groupId>
    <artifactId>com.springsource.org.testng</artifactId>
    <version>6.5.2</version>
   </dependency>

好了,更新下项目,执行maven test,可以啦~~~好开心!
咦?哪里不对哦,我这里有两个测试用例,为什么只执行了那个junit的呢,testng的有执行但是没结果!!
eclipse+maven+testng+maven-surefire-plugin使用与问题全记录 - 隋相 - suixiang3的博客
 这时候我的内心是崩溃的.
4)mvn test漏过去了,那我单独执行这个测试文件试试看。右键-〉Run As->TestNG Test。报错了,报的jvm的错误:
eclipse+maven+testng+maven-surefire-plugin使用与问题全记录 - 隋相 - suixiang3的博客

出现这个问题的根本原因貌似是有些包造成冲突了。按照错误提示,我在项目属性中把'use Project testng.jar'去掉了。
eclipse+maven+testng+maven-surefire-plugin使用与问题全记录 - 隋相 - suixiang3的博客
 

然后再单独执行这个testNG文件,成功了!
那我再试试maven test,看是否还是不执行。
如图,还是会跳过这几个testNG文件!我的内心已经不能用崩溃来形容了。
eclipse+maven+testng+maven-surefire-plugin使用与问题全记录 - 隋相 - suixiang3的博客

 5)出现这种执行了但是跳过test的情况这还是第一次遇见,不知从何下手。想了很久,觉得最根本的原因很有可能是从使用中央仓库变成私服导致的。我先把testng的依赖换成中央仓库的写法:

 <dependency>
          <groupId>org.testng</groupId>
          <artifactId>testng</artifactId>
          <version>6.8.8</version>
          <scope>test</scope>
          </dependency>

试了下maven test,成功了!!!

eclipse+maven+testng+maven-surefire-plugin使用与问题全记录 - 隋相 - suixiang3的博客
 
6)尝试显式使用maven-surefire-plugin。在pom.xml中添加插件:
     <build>
      <plugins>
          <plugin>
              <groupId>org.apache.maven.plugins</groupId>
              <artifactId>maven-surefire-plugin</artifactId>
              <version>2.14.1</version>
              <configuration>
                 <includes>
                    <include>**/*Test.java</include>
                </includes>
            </configuration>
          </plugin>
      </plugins>        
  </build>

maven-surefire-plugin关键配置在configuration定义中,这里申明了最简单的执行哪个测试文件(执行所有以Test结尾的java文件)。
也可以使用命令行:mvn test -Dtest=ATest 
多个测试文件的情况使用命令行:mvn test -Dtest=ATest,BTest 
在Jenkins中实验设置options and goals为次命令行,可以持续构建单个或者多个测试文件,跟ant一样~

关于surefire的高级选项:
(1)如果想跳过测试失败的用例,在configuration中添加设置:
 <testFailureIgnore>true</testFailureIgnore>
(2)如果想跳过测试的话,可以在configuration中添加设置:
      <skip>true</skip>
      当然也可以直接执行
      mvn install -Dmaven.test.skip=true
(3)不执行一些测试文件,可以在configuration中添加设置:
  <configuration>  
   <includes>  
   <include>**/*Test.java</include>  
   </includes>  
   <excludes>  
   <exclude>**/*SecondTest.java</exclude>  
   <exclude>**/ThirdTest.java</exclude>  
   </excludes>  
   </configuration>  

 
(4)使用testng.xml的文件来配置想要运行的测试集合,可以在configuration中添加设置:
<suiteXmlFiles>  
  <suiteXmlFile>testng.xml</suiteXmlFile>  
</suiteXmlFiles> 
注意testng.xml文件的位置应该位于项目主目录下,如放在LifeIsNew项目目录C:\Users\hzsuixiang\workspace\LifeIsNew下。
(5)使用testNG测试组,可以在configuration中添加设置:
<groups>group_name_1,group_name_2</groups> 

关于surefire插件使用,更为详细的内容可参考中文教程http://outofmemory.cn/code-snippet/3857/maven-surefire-plugin-introduction
  评论这张
 
阅读(995)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2016