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>


测试报告如下:





Gradle是一个基于Apache Ant和Apache Maven概念的项目自动化构建工具。它使用一种基于Groovy的特定领域语言(DSL)来声明项目设置,比传统的XML方式更加简洁和灵活。下面是一个Gradle项目的简单实例: 首先,你需要在项目根目录创建一个名为`build.gradle`的文件,这个文件是Gradle项目的核心配置文件。 ```groovy // build.gradle 文件内容 // 定义项目对象模型(Project Object Model) apply plugin: 'java' // 应用Java插件,为Java项目提供编译、测试等功能 // 配置项目信息 group = 'com.example' version = '1.0-SNAPSHOT' // 仓库配置,用于解析依赖 repositories { mavenCentral() } // 依赖配置,列出项目所需的库 dependencies { // 依赖TestNG测试框架 testImplementation 'org.testng:testng:7.1.0' // 编译时依赖的库 compileOnly 'org.projectlombok:lombok:1.18.12' // 运行时依赖的库 runtimeOnly 'com.h2database:h2:1.4.199' } // 定义任务,这里是定义一个编译Java代码的任务 task compileJava(type: JavaCompile, group: 'build') { sourceCompatibility = '1.8' targetCompatibility = '1.8' source = sourceSets.main.allJava } // 定义测试任务,使用TestNG框架运行测试用例 task test(type: Test) { useTestNG() { // 这里可以添加TestNG的配置 } } // 定义清理任务 task clean(type: Delete) { delete rootProject.buildDir } ``` 这个简单的Gradle项目文件定义了一个Java项目的基本构建逻辑,包括项目依赖、仓库配置、编译和测试任务等。当你运行Gradle命令,比如`gradle build`,它会根据这个配置文件执行相应的任务,如编译Java代码、运行测试等。 要开始一个Gradle项目,通常还需要在项目创建一个`settings.gradle`文件,用于配置项目的模块信息(如果项目只包含一个模块,这个文件可以省略)。 ```groovy // settings.gradle 文件内容 rootProject.name = 'example-project' ``` 通过这个文件,Gradle知道项目的名称,并且可以在构建过程正确地引用项目
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值