gradle复习(3)-在gradle项目中使用TestNG

1.gradle项目


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

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

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

SimpleTest:TestNG写的测试类。


public class PersonTest {
    @Test
    public void canConstructAPersonWithAName() {
        Person person = new Person("Larry");
        assertEquals("Larry", person.getName());
    }
}


public class SimpleTest {
	@BeforeClass
	public void setUp() {
		System.out.println("setUp");
	}

	@Test(groups = { "slow" })
	public void aSlowTest() {
		System.out.println("slow test");
	}

	@Test(groups = { "fast" })
	public void aFastTest() {
		System.out.println("fast test");
	}
}

build.gradle原始脚本如下:

build.gradle


apply plugin: 'java'
apply plugin: 'eclipse'

sourceCompatibility = 1.7
version = '1.0'
jar {
    manifest {
        attributes 'Implementation-Title': 'Gradle Quickstart', 'Implementation-Version': version
    }
}

repositories {
    mavenCentral()
}

dependencies {
    compile group: 'commons-collections', name: 'commons-collections', version: '3.2'
    compile 'org.testng:testng:6.8.17'
    testCompile group: 'junit', name: 'junit', version: '4.+'
}

task copyJars(type:Copy){
	from configurations.runtime
	into 'libs'
}
uploadArchives {
    repositories {
       flatDir {
           dirs 'repos'
       }
    }
}

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


D:\eclipse\workspare\TestNG_gradl>gradle build
:compileJava
:processResources
:classes
:jar
:assemble
:compileTestJava
:processTestResources
:testClasses
:test
:check
:build

BUILD SUCCESSFUL

Total time: 5.179 secs

报告如下:




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


2.执行TestNG测试


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


test {
    useTestNG()
}

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


D:\eclipse\workspare\TestNG_gradl>gradle clean
:clean

BUILD SUCCESSFUL

Total time: 4.355 secs
D:\eclipse\workspare\TestNG_gradl>gradle build
:compileJava
:processResources
:classes
:jar
:assemble
:compileTestJava
:processTestResources
:testClasses
:test
:check
:build

BUILD SUCCESSFUL

Total time: 5.319 secs

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



就是这么简单。


3.TestNG配置


报告配置


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

build.gradle:

test {
	useTestNG()
	reports.html.enabled = false
}

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

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


task testReport(type:TestReport){
	destinationDir = file("D:/gradle_product/0120")
	reportOn test
}

这个时候clean在执行testReport:


D:\eclipse\workspare\TestNG_gradl>gradle clean testReport
:clean
:compileJava
:processResources
:classes
:compileTestJava
:processTestResources
:testClasses
:test
:testReport

BUILD SUCCESSFUL

Total time: 5.447 secs

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


分组测试


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

build.gradle:


test {
	useTestNG{
		includeGroups 'slow'
	}
	//reports.html.enabled = false
}

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




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



分组配置成功。


分class文件测试


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


public class SimpleTest1 {
	@BeforeClass
	public void setUp() {
		System.out.println("setUp");
	}

	@Test(groups = { "slow" })
	public void aSlowTest1() {
		System.out.println("slow test1");
	}

	@Test(groups = { "fast" })
	public void aFastTest1() {
		System.out.println("fast test1");
	}
}

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

1.include包含被测类文件

build.gradle:


test {
    useTestNG()
    systemProperty 'some.prop', 'value'
    include 'org/gradle/SimpleTest1.class'
    
}




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


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


两种过滤条件的结合


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

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


build.gradle:


test {
	useTestNG{
		includeGroups 'slow'
	}
	systemProperty 'some.prop', 'value'
	exclude 'org/gradle/SimpleTest.class'
	
}

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


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


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


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

build.gradle


test {
	useTestNG{
		includeGroups 'slow1'
	}
	systemProperty 'some.prop', 'value'
	exclude 'org/gradle/SimpleTest.class'
	
}

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





3.利用testng.xml进行配置


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


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


<?xml version="1.0" encoding="UTF-8"?>
<suite name="doctorng">
    <!--enabled="true"让测试生效,可根据情况开启或关闭某些测试-->
    <test name="test" enabled="true">
        <!--指定参数-->
        <parameter name="accesskey" value="f0af8e412cef7e5058beeb6df2012e1e"/>
        <!--指定测试包,注意加 .* -->
        <packages>
            <package name="org.gradle.*"/>
        </packages>
        <!--指定测试类-->
        <classes>
            <class name="org.gradle.SimpleTest"/>
            <!--过滤测试类的方法-->
            <class name="org.gradle.SimpleTest1">
              <methods>
                <include name="aFastTest" />
              </methods>
            </class>
        </classes>
        <!--指定测试分组-->
        <groups>
          <run>
            <!--包含-->
            <include name="fast"/>
            <!--排除-->
            <exclude name="slow"/>
          </run>
        </groups>
    </test>
</suite>

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


test {
	useTestNG{
			suites(file('src/test/resources/org/gradle/testng.xml'));
	}
	beforeTest { descriptor ->
      logger.lifecycle("Running test: " + descriptor)
   }
   onOutput { descriptor, event ->
      logger.lifecycle("Test: " + descriptor + " produced standard out/err: " + event.message )
   }
}

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


D:\eclipse\workspare\TestNG_gradl>gradle clean test
:clean
:compileJava
:processResources
:classes
:compileTestJava
:processTestResources
:testClasses
:test
Running test: test method aFastTest(org.gradle.SimpleTest)
Test: test method aFastTest(org.gradle.SimpleTest) produced standard out/err: fa
st test

Running test: test method aFastTest1(org.gradle.SimpleTest)
Test: test method aFastTest1(org.gradle.SimpleTest) produced standard out/err: f
ast test1

Running test: test method aFastTest2(org.gradle.SimpleTest)
Test: test method aFastTest2(org.gradle.SimpleTest) produced standard out/err: f
ast test2

Running test: test method aFastTest3(org.gradle.SimpleTest)
Test: test method aFastTest3(org.gradle.SimpleTest) produced standard out/err: f
ast test3

Running test: test method aFastTest1(org.gradle.SimpleTest1)
Test: test method aFastTest1(org.gradle.SimpleTest1) produced standard out/err:
fast test1


BUILD SUCCESSFUL

Total time: 5.741 secs
D:\eclipse\workspare\TestNG_gradl>


测试报告如下:





评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值