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>
测试报告如下: