• gradle-TestNG配置


    1.gradle项目

    在eclipse中创建的Java项目,用gradle管理。我要复习的是关于在gradle中使用TestNG的知识。首先TestNG环境配置如上一篇文章

    测试目录下有2个java文件。一个是PersonTest.java,一个是SimpleTest。

    PersonTest.java:用junit写的测试类。

    SimpleTest:TestNG写的测试类。

    [java] view plain copy
     
     在CODE上查看代码片派生到我的代码片
    1. public class PersonTest {  
    2.     @Test  
    3.     public void canConstructAPersonWithAName() {  
    4.         Person person = new Person("Larry");  
    5.         assertEquals("Larry", person.getName());  
    6.     }  
    7. }  



    [java] view plain copy
     
     在CODE上查看代码片派生到我的代码片
    1. public class SimpleTest {  
    2.     @BeforeClass  
    3.     public void setUp() {  
    4.         System.out.println("setUp");  
    5.     }  
    6.   
    7.     @Test(groups = { "slow" })  
    8.     public void aSlowTest() {  
    9.         System.out.println("slow test");  
    10.     }  
    11.   
    12.     @Test(groups = { "fast" })  
    13.     public void aFastTest() {  
    14.         System.out.println("fast test");  
    15.     }  
    16. }  


    build.gradle原始脚本如下:

    build.gradle

    [java] view plain copy
     
     在CODE上查看代码片派生到我的代码片
    1. apply plugin: 'java'  
    2. apply plugin: 'eclipse'  
    3.   
    4. sourceCompatibility = 1.7  
    5. version = '1.0'  
    6. jar {  
    7.     manifest {  
    8.         attributes 'Implementation-Title': 'Gradle Quickstart', 'Implementation-Version': version  
    9.     }  
    10. }  
    11.   
    12. repositories {  
    13.     mavenCentral()  
    14. }  
    15.   
    16. dependencies {  
    17.     compile group: 'commons-collections', name: 'commons-collections', version: '3.2'  
    18.     compile 'org.testng:testng:6.8.17'  
    19.     testCompile group: 'junit', name: 'junit', version: '4.+'  
    20. }  
    21.   
    22. task copyJars(type:Copy){  
    23.     from configurations.runtime  
    24.     into 'libs'  
    25. }  
    26. uploadArchives {  
    27.     repositories {  
    28.        flatDir {  
    29.            dirs 'repos'  
    30.        }  
    31.     }  
    32. }  


    这个时候执行命令,你会发现默认会执行JUnit的case。

    [java] view plain copy
     
     在CODE上查看代码片派生到我的代码片
    1. D:eclipseworkspareTestNG_gradl>gradle build  
    2. :compileJava  
    3. :processResources  
    4. :classes  
    5. :jar  
    6. :assemble  
    7. :compileTestJava  
    8. :processTestResources  
    9. :testClasses  
    10. :test  
    11. :check  
    12. :build  
    13.   
    14. BUILD SUCCESSFUL  
    15.   
    16. Total time: 5.179 secs  


    报告如下:

    那么我要如何选择TestNG的呢?

    2.执行TestNG测试

    很简单,在build.gradle添加如下语句

    [java] view plain copy
     
     在CODE上查看代码片派生到我的代码片
    1. test {  
    2.     useTestNG()  
    3. }  


    先执行clean任务清空之前的build文件。重新build:

    [java] view plain copy
     
     在CODE上查看代码片派生到我的代码片
    1. D:eclipseworkspareTestNG_gradl>gradle clean  
    2. :clean  
    3.   
    4. BUILD SUCCESSFUL  
    5.   
    6. Total time: 4.355 secs  
    7. D:eclipseworkspareTestNG_gradl>gradle build  
    8. :compileJava  
    9. :processResources  
    10. :classes  
    11. :jar  
    12. :assemble  
    13. :compileTestJava  
    14. :processTestResources  
    15. :testClasses  
    16. :test  
    17. :check  
    18. :build  
    19.   
    20. BUILD SUCCESSFUL  
    21.   
    22. Total time: 5.319 secs  


    你会发现,执行的case就是TestNG的case啦。

    就是这么简单。

    3.TestNG配置

    报告配置

    默认情况下报告中html文件是存在的,我们可以选择不生成html文件。

    build.gradle:

    [java] view plain copy
     
     在CODE上查看代码片派生到我的代码片
    1. test {  
    2.     useTestNG()  
    3.     reports.html.enabled = false  
    4. }  


    这个时候重新构建的话就不再生成reports文件了。

    如果我们想将报告copy到其他路径。注意这里是copy不是重定向。

    [java] view plain copy
     
     在CODE上查看代码片派生到我的代码片
    1. task testReport(type:TestReport){  
    2.     destinationDir = file("D:/gradle_product/0120")  
    3.     reportOn test  
    4. }  


    这个时候clean在执行testReport:

    [java] view plain copy
     
     在CODE上查看代码片派生到我的代码片
    1. D:eclipseworkspareTestNG_gradl>gradle clean testReport  
    2. :clean  
    3. :compileJava  
    4. :processResources  
    5. :classes  
    6. :compileTestJava  
    7. :processTestResources  
    8. :testClasses  
    9. :test  
    10. :testReport  
    11.   
    12. BUILD SUCCESSFUL  
    13.   
    14. Total time: 5.447 secs  

    这个时候你会在相应目录下找到报告相关的文件。

    分组测试

    选择某一个组的case进行测试

    build.gradle:

    [java] view plain copy
     
     在CODE上查看代码片派生到我的代码片
    1. test {  
    2.     useTestNG{  
    3.         includeGroups 'slow'  
    4.     }  
    5.     //reports.html.enabled = false  
    6. }  


    我们选择测试slow分组的case。重新构建查看报告如下:

    发现就执行了一条case,点进去

    分组配置成功。

    分class文件测试

    我们上面是根据TestNG中分组来进行测试的,也有按照一个测试类文件进行测试,比如我们就像测试一个java文件里的测试项。为了区分,我们添加了一个SimpleTest1.java的TestNG的case类。

    [java] view plain copy
     
     在CODE上查看代码片派生到我的代码片
    1. public class SimpleTest1 {  
    2.     @BeforeClass  
    3.     public void setUp() {  
    4.         System.out.println("setUp");  
    5.     }  
    6.   
    7.     @Test(groups = { "slow" })  
    8.     public void aSlowTest1() {  
    9.         System.out.println("slow test1");  
    10.     }  
    11.   
    12.     @Test(groups = { "fast" })  
    13.     public void aFastTest1() {  
    14.         System.out.println("fast test1");  
    15.     }  
    16. }  


    这个时候我们如果想测SimpleTest1有两种方法。

    1.include包含被测类文件

    build.gradle:

    [java] view plain copy
     
     在CODE上查看代码片派生到我的代码片
    1. test {  
    2.     useTestNG()  
    3.     systemProperty 'some.prop', 'value'  
    4.     include 'org/gradle/SimpleTest1.class'  
    5.       
    6. }  


    2.由于我们这里面只有2个文件,这样我们通过剔除SimpleTest类来达到测试SimpleTest1类的效果。

    测试的结果是和上面的结果一样的,就不再贴图了。

    两种过滤条件的结合

    现在我们将分组条件和分class文件这两个条件一起使用,看看效果。

    上面我们只测试了SimpleTest1.class中的全部方法,这个时候我们用分组来过滤一下,只测试SimpleTest1.class里的slow分组的方法。

    build.gradle:

    [java] view plain copy
     
     在CODE上查看代码片派生到我的代码片
    1. test {  
    2.     useTestNG{  
    3.         includeGroups 'slow'  
    4.     }  
    5.     systemProperty 'some.prop', 'value'  
    6.     exclude 'org/gradle/SimpleTest.class'  
    7.       
    8. }  


    这个时候我们重新构建,执行后你会发现只测试了aSlowTest1方法。

    当然过滤分组还可以通过excludeGroups ‘fast’和上面的效果是一样的,就不再举例了。

    下面要尝试的是,当这两个条件组合在一起的时候没找到要测试的case会发生什么?

    刚才我们测试了SimpleTest1.class中的slow分组的case,现在把添加改成slow1,因为slow1是没有的,所以应该不会在SimpleTest1.class找到相应的case,看这次的构建结果是啥样的。

    build.gradle

    [java] view plain copy
     
     在CODE上查看代码片派生到我的代码片
    1. test {  
    2.     useTestNG{  
    3.         includeGroups 'slow1'  
    4.     }  
    5.     systemProperty 'some.prop', 'value'  
    6.     exclude 'org/gradle/SimpleTest.class'  
    7.       
    8. }  


    结果文件如下,结果文件是有的,但是可以看到结果文件没有case的相关信息,说明没有执行任何case。

    3.利用testng.xml进行配置

    gradle项目中也可以使用testng.xml来进行测试case的配置

    我们首先新建一个testng.xml文件:

    [java] view plain copy
     
     在CODE上查看代码片派生到我的代码片
    1. <?xml version="1.0" encoding="UTF-8"?>  
    2. <suite name="doctorng">  
    3.     <!--enabled="true"让测试生效,可根据情况开启或关闭某些测试-->  
    4.     <test name="test" enabled="true">  
    5.         <!--指定参数-->  
    6.         <parameter name="accesskey" value="f0af8e412cef7e5058beeb6df2012e1e"/>  
    7.         <!--指定测试包,注意加 .* -->  
    8.         <packages>  
    9.             <package name="org.gradle.*"/>  
    10.         </packages>  
    11.         <!--指定测试类-->  
    12.         <classes>  
    13.             <class name="org.gradle.SimpleTest"/>  
    14.             <!--过滤测试类的方法-->  
    15.             <class name="org.gradle.SimpleTest1">  
    16.               <methods>  
    17.                 <include name="aFastTest" />  
    18.               </methods>  
    19.             </class>  
    20.         </classes>  
    21.         <!--指定测试分组-->  
    22.         <groups>  
    23.           <run>  
    24.             <!--包含-->  
    25.             <include name="fast"/>  
    26.             <!--排除-->  
    27.             <exclude name="slow"/>  
    28.           </run>  
    29.         </groups>  
    30.     </test>  
    31. </suite>  


    然后在build.gradle中获得该文件中的内容:

    [java] view plain copy
     
     在CODE上查看代码片派生到我的代码片
    1. test {  
    2.     useTestNG{  
    3.             suites(file('src/test/resources/org/gradle/testng.xml'));  
    4.     }  
    5.     beforeTest { descriptor ->  
    6.       logger.lifecycle("Running test: " + descriptor)  
    7.    }  
    8.    onOutput { descriptor, event ->  
    9.       logger.lifecycle("Test: " + descriptor + " produced standard out/err: " + event.message )  
    10.    }  
    11. }  


    重点就是useTestNG里的闭包代码,这就把testng.xml包含进来了。

    [java] view plain copy
     
     在CODE上查看代码片派生到我的代码片
    1. D:eclipseworkspareTestNG_gradl>gradle clean test  
    2. :clean  
    3. :compileJava  
    4. :processResources  
    5. :classes  
    6. :compileTestJava  
    7. :processTestResources  
    8. :testClasses  
    9. :test  
    10. Running test: test method aFastTest(org.gradle.SimpleTest)  
    11. Test: test method aFastTest(org.gradle.SimpleTest) produced standard out/err: fa  
    12. st test  
    13.   
    14. Running test: test method aFastTest1(org.gradle.SimpleTest)  
    15. Test: test method aFastTest1(org.gradle.SimpleTest) produced standard out/err: f  
    16. ast test1  
    17.   
    18. Running test: test method aFastTest2(org.gradle.SimpleTest)  
    19. Test: test method aFastTest2(org.gradle.SimpleTest) produced standard out/err: f  
    20. ast test2  
    21.   
    22. Running test: test method aFastTest3(org.gradle.SimpleTest)  
    23. Test: test method aFastTest3(org.gradle.SimpleTest) produced standard out/err: f  
    24. ast test3  
    25.   
    26. Running test: test method aFastTest1(org.gradle.SimpleTest1)  
    27. Test: test method aFastTest1(org.gradle.SimpleTest1) produced standard out/err:  
    28. fast test1  
    29.   
    30.   
    31. BUILD SUCCESSFUL  
    32.   
    33. Total time: 5.741 secs  
    34. D:eclipseworkspareTestNG_gradl>  

    测试报告如下:


  • 相关阅读:
    IOS开发--网络篇-->GCD(Grand Central Dispatch)的详解
    drf viewset
    12.6 drf 结构化组建
    12.5
    12.4
    12.3
    12.2
    12.1 angular vue react web前端三大主流框架的对比
    11.30
    11.28 过滤器的相关操作
  • 原文地址:https://www.cnblogs.com/yhcreak/p/6609972.html
Copyright © 2020-2023  润新知