在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
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'
}
}
}
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的呢?
很简单,在build.gradle添加如下语句
test {
useTestNG()
}
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
就是这么简单。
默认情况下报告中html文件是存在的,我们可以选择不生成html文件。
build.gradle:
test {
useTestNG()
reports.html.enabled = false
}
如果我们想将报告copy到其他路径。注意这里是copy不是重定向。
task testReport(type:TestReport){
destinationDir = file("D:/gradle_product/0120")
reportOn test
}
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
}
发现就执行了一条case,点进去
分组配置成功。
我们上面是根据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");
}
}
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'
}
当然过滤分组还可以通过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'
}
gradle项目中也可以使用testng.xml来进行测试case的配置
我们首先新建一个testng.xml文件:
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 )
}
}
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>
测试报告如下: