## 1.gradle項目
在eclipse中創建的java項目,用gradle管理。我要復習的是關于在gradle中使用TestNG的知識。首先TestNG環境配置如[上一篇文章](http://blog.csdn.net/itfootball/article/details/42918445)。
測試目錄下有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學習(1)-helloworld
- gradle學習(2)-基礎語法
- gradle學習(3)-基礎認識
- gradle學習(4)-構建java項目
- gradle學習(5)-創建eclipse項目
- gradle學習(6)-依賴管理
- gradle學習(7)-groovy
- gradle學習(8)-gradle的命令行
- gradle學習(9)-獲取build相關信息
- gradle學習(10)-gui
- gradle學習(11)-編寫構建腳本
- gradle學習(12)-groovy一些基礎語法
- gradle學習(13)-有的沒的
- gradle學習(14)-任務
- gradle學習(15)-任務
- gradle學習(16)-操作文件
- gradle學習(17)-被合并的ant
- gradle學習(18)-ant的屬性
- gradle學習(19)-log系統
- gradle學習(20)-詳解java插件
- gradle學習(21)-在eclipse中構建java項目
- gradle復習(1)-2種定義任務方式的區別
- gradle復習(2)-eclipse中添加依賴jar包
- gradle復習(3)-在gradle項目中使用TestNG
- gradle復習(4)-Cannot find System Java Compiler
- gradle復習(5)-Test remote debug
- gradle復習(6)-深入Jacoco
- gradle復習(7)-深入Jacoco
- gradle復習(8)-Task中行為
- gradle學習(22)-Sonar
- gradle學習(23)-Sonar runner