printf主要是繼承了C語言的printf的一些特性,能夠進行格式化輸出html
print就是通常的標準輸出,可是不換行java
println和print基本沒什麼差異,就是最後會換行chrome
System.out.printf("the number is: d",t);
參照JAVA API的定義以下:
'd' 整數結果被格式化爲十進制整數
'o' 整數結果被格式化爲八進制整數
'x', 'X' 整數結果被格式化爲十六進制整數
'e', 'E' 浮點結果被格式化爲用計算機科學記數法表示的十進制數
'f' 浮點結果被格式化爲十進制數
'g', 'G' 浮點根據精度和舍入運算後的值,使用計算機科學記數形式或十進制格式對結果進行格式化。
'a', 'A' 浮點結果被格式化爲帶有效位數和指數的十六進制浮點數數據庫
println("test")至關於print("test\n")就是通常的輸出字符串數組
print\println\printf的區別併發
print將它的參數顯示在命令窗口,並將輸出光標定位在所顯示的最後一個字符以後。框架
println 將它的參數顯示在命令窗口,並在結尾加上換行符,將輸出光標定位在下一行的開始。eclipse
printf是格式化輸出的形式。yii
下在舉個例子:ide
package other;
public class TestPrint {
public static voidmain(String[] args) {
int i = 4;
double j = 5;
System.out.print("用print輸出i:"+ i);
System.out.println( "用println輸出i:"+ i);
System.out.printf("i的值爲%d,j的值爲%f", i,j);
}
}
運行結果爲
用print輸出i:4用println輸出i:4
i的值爲4,j的值爲5.000000
能夠看到,用print輸出i後,沒有換行,用println輸出的結果直接在print輸出語句後面,而輸出println後換行了
printf 「i的值爲%d,j的值爲%f」這個字符串中的"%d"變爲i的值了,而"%f"變爲了j的值了!
這裏,"%d"的意思是一個int值的佔位符,"%f"爲一個double 或float值的點位符,這個變量的參數在後面提供。注意的是實參名必須按順序排
。否則就會錯了。並且類型也要相符。若是咱們把語句改成
System.out.printf("i的值爲%d,j的值爲%f", j,i);//i和j位置反了
這時就有錯了由於"%d"對應的參數變爲j,"%f"對應的變爲i了,而j是double的,與"%d"是int形的不一致。因此有錯了。
還有"%s"是一個字符串值的點位符的意思。"%c"是一個字符值的點位符的意思。
可能讀者還會問爲何j輸出變成了5.000000?那是由於double是默認有6位小數的(這個可能和系統電腦有關,有的不是6位吧)可是若是你想
只要輸出兩位小數
System.out.printf("i的值爲%d,j的值爲%.2f", i,j);
這裏的"%.2f"的意思是輸出兩位小數點。若是想輸出三位那就"%.3f"。
再學多點知識吧,將代碼改成如下:
public class TestPrint {
public static voidmain(String[] args) {
int i = 4;
double j = 5.000f;
System.out.printf("i的值爲],\n", i);
System.out.printf("i的值爲=,j的值爲%.2f", i,j);
}
}
運行結果爲:
i的值爲 4,
i的值爲 4,j的值爲5.00
原來在"%"與"d"之間加個數5的意思是輸出5個佔位符。默認向右對齊。這樣的輸出是頗有用的,好比你想輸出一個表格,因各個數大小不一,有的5位有的4位,這樣輸出的的表格結果就對不齊了。若是將輸出結果所有爲同同樣的佔位符數。
除了"%d"能夠這樣外,別的也能夠,讀者不防試試。會有不少收穫的。
咱們再試着將代碼改一下:
public class TestPrint {
public static voidmain(String[] args) {
int i = 4;
double j = 5.000f;
System.out.printf("i的值爲d,\n", i);
}
}
運行結果爲:
i的值爲00004,
,原來"d"的意思是輸出5個佔位符,若是數字不足5的話就有左邊以0相補
1、TestNG的優勢
1.1 漂亮的HTML格式測試報告
1.2 支持併發測試
1.3 參數化測試更簡單
1.4 支持輸出日誌
1.5 支持更多功能的註解
2、編寫TestNG測試用例的步驟
2.1 使用 Eclipse生成TestNG的測試程序框架
2.2 在生成的程序框架中編寫測試代碼邏輯
2.3 根據測試代碼邏輯,插入TestNG註解標籤
2.4 配置Testng.xml文件,設定測試類、測試方法、測試分組的執行信息
2.5 執行TestNG的測試程序
3、如何安裝TestNG?
啓動Eclipse,選擇Help-》Install New Software-》點擊add-》name中輸入TestNG,location中輸入「http://beust.com/eclipse/」,點擊ok-》在彈出的install對話框中勾選TestNG複選框-》Next-》Accept-》Finish
4、testNG用例執行後如何查看執行結果?
4.1 在Console標籤欄中展現測試用例的執行結果:
在工程下也會生成一個test-output文件夾
5、TestNG經常使用註解:執行順序以下
@BeforeSuite > @BeforeTest > @BeforeMethod > @Test > @AfterMethod > @AfterTest > @AfterSuite
@BeforeSuite |
表示會在當前測試集合中的任意一個測試用例開始運行前執行 |
@AfterSuite |
表示會在當前測試集合中的全部測試程序運行結束以後執行 |
@BeforeTest |
表示會在Test中的任意一個測試用例開始運行前執行 |
@AfterTest |
表示會在Test中的全部測試用例運行結束後執行 |
@BeforeGroups |
分組測試用例的任一測試用例開始運行前執行 |
@AfterGroups |
分組測試用例的全部測試用例運行結束後執行 |
@BeforeClass |
在當前測試類的任意一個測試用例開始運行前執行 |
@AfterClass |
在當前測試類的全部測試用例運行結束後執行 |
@BeforeMethod |
在每一個測試方法開始運行前執行 |
@AfterMethod |
在每一個測試方法運行結束後執行 |
@Test |
被認爲是一個測試方法,既一個測試用例 |
6、如何建立TestNG測試集合?
6.1 測試集合:在自動化測試的執行過程當中,一般會產生批量運行多個測試用例的需求,此需求稱爲運行測試集合(Test Suite)
6.2 TestNG的測試用例能夠是相互獨立的,也能夠按照特定的順序來執行(配置TestNG.xml)
6.3 如何配置testNG.xml文件?
<suite name = "TestNG Suite"> //自定義的測試集合名稱 <test name = "test1"> //自定義的測試名稱 <classes> //定義被運行的測試類 <class name = "cn.gloryroad.FirstTestNGDemo" /> //測試類的路徑 <class name = "cn.gloryroad.NewTest" /> </classes> </test> </suite>
7、測試用例的分組(group)
7.1 只執行一組分組配置以下:
<suite name = "TestNG Suite"> <test name = "Grouping"> <groups> <run> <include name = "動物" /> </run> </groups> <classes> <class name = "cn.gloryroad.Grouping"/> </classes> </test> </suite>
7.2 執行多組分組時配置以下(兩種形式均可以):
<suite name = "TestNG Suite"> <test name = "Grouping"> <groups> <run> <include name = "動物" /> //name分組名稱 <include name = "人" /> </run> </groups> <classes> <class name = "cn.gloryroad.Grouping"/> </classes> </test> </suite>
<suite name = "TestNG Suite"> <test name = "Grouping"> <groups>
<define name = "All">
<include name = "動物" />
<include name = "人" />
</define>
<run>
<include name = "All" />
</run>
</groups>
<classes> <class name = "cn.gloryroad.Grouping"/> </classes> </test> </suite>
8、依賴測試(dependsOnMethod)
@Test(dependsOnMethod = {"方法名稱"})
被依賴的方法優先於此方法執行
9、特定順序執行測試用例(priority)
@Test(priority = 0/1/2/3/4/…)
按照數字大小順序優先執行,優先執行1,而後是2…
10、如何跳過某個測試方法(enabled = false)
@Test(priority = 0/1… , enabled = false)
執行結束後,在測試報告中顯示跳過的測試用例數,例如skip=1
11、數據註解
11.1 參數化測試(@Parameters-》經過xml文件從外部給測試方法傳參):<Parameter name="Type" value="chrome"/> -》參考http://www.yiibai.com/html/testng/2013/0916303.html
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
|
建立測試案例類
建立一個Java測試類 ParameterizedTest1.java.
測試方法parameterTest()添加到測試類。此方法須要一個字符串做爲輸入參數。
添加註釋
@Parameters
(
"myName"
) 到此方法。該參數將被傳遞testng.xml,在下一步咱們將看到一個值。
建立Java類文件名 ParameterizedTest1.java 在 C:\ > TestNG_WORKSPACE
import
org.testng.annotations.Parameters;
import
org.testng.annotations.Test;
public
class
ParameterizedTest1 {
@Test
@Parameters
(
"myName"
)
public
void
parameterTest(String myName) {
System.out.println(
"Parameterized value is : "
+ myName);
}
}
建立 TESTNG.XML
建立 testng.xml C:\ > TestNG_WORKSPACE 執行測試案例
<?xml version=
"1.0"
encoding=
"UTF-8"
?><!DOCTYPE suite SYSTEM
"http://testng.org/testng-1.0.dtd"
>
<suite name=
"Suite1"
>
<test name=
"test1"
>
<parameter name=
"myName"
value=
"manisha"
/>
<classes>
<
class
name=
"ParameterizedTest1"
/>
</classes>
</test>
</suite>
咱們還能夠定義參數在<suite>級別。假設咱們已經定義在兩個<suite>和<test>級別myName,在這種狀況下,常規的做用域規則適用。這意味着,任何類裏面<test>標籤將查看值參數定義在<test>,而testng.xml文件中的類的其他部分將看到定義在<suite>中值
編譯使用javac的測試用例類。
C:\TestNG_WORKSPACE>javac ParameterizedTest1.java
如今,運行testng.xml,其中將運行parameterTest方法。TestNG的將試圖找到一個命名myName的第一<test>標籤的參數,而後,若是它不能找到它,它會搜索包圍在的<suit>標籤。
C:\TestNG_WORKSPACE>java -cp
"C:\TestNG_WORKSPACE"
org.testng.TestNG testng.xml
驗證輸出。
Parameterized value is : manisha
===============================================
Suite1
Total tests run:
1
, Failures:
0
, Skips:
0
===============================================
TestNG 對testng.xml 的參數的類型指定的值會自動嘗試轉換。下面是支持的類型:
String
int
/Integer
boolean
/Boolean
byte
/Byte
char
/Character
double
/Double
float
/Float
long
/Long
short
/Short
|
11.2 數據驅動(@DataProvider)-》參考http://www.yiibai.com/html/testng/2013/0916303.html
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
|
當你須要經過複雜的參數或參數須要建立從Java(複雜的對象,對象讀取屬性文件或數據庫等..),在這種狀況下,能夠將參數傳遞使用數據提供者。數據提供者
@DataProvider
的批註的方法。這個註解只有一個字符串屬性:它的名字。若是不提供名稱,數據提供者的名稱會自動默認方法的名稱。數據提供者返回一個對象數組。
讓咱們看看下面的例子使用數據提供者。第一個例子是
@DataProvider
的使用Vector,String或Integer 做爲參數,第二個例子是關於
@DataProvider
的使用對象做爲參數。
實例
1
在這裏
@DataProvider
經過整數和布爾參數。
建立Java類
建立一個java類PrimeNumberChecker.java。這個類檢查,若是是素數。建立這個類在 C:\ > TestNG_WORKSPACE
public
class
PrimeNumberChecker {
public
Boolean validate(
final
Integer primeNumber) {
for
(
int
i =
2
; i < (primeNumber /
2
); i++) {
if
(primeNumber % i ==
0
) {
return
false
;
}
}
return
true
;
}
}
建立測試案例類
建立一個Java測試類 ParamTestWithDataProvider1.java.
定義方法primeNumbers(),其定義爲DataProvider 使用註釋。此方法返回的對象數組的數組。
測試方法testPrimeNumberChecker()添加到測試類中。此方法須要一個整數和布爾值做爲輸入參數。這個方法驗證,若是傳遞的參數是一個素數。
添加註釋
@Test
(dataProvider =
"test1"
) 到此方法。dataProvider的屬性被映射到
"test1"
.
建立Java類文件名ParamTestWithDataProvider1.java 在 C:\ > TestNG_WORKSPACE
import
org.testng.Assert;
import
org.testng.annotations.BeforeMethod;
import
org.testng.annotations.DataProvider;
import
org.testng.annotations.Test;
public
class
ParamTestWithDataProvider1 {
private
PrimeNumberChecker primeNumberChecker;
@BeforeMethod
public
void
initialize() {
primeNumberChecker =
new
PrimeNumberChecker();
}
@DataProvider
(name =
"test1"
)
public
static
Object[][] primeNumbers() {
return
new
Object[][] { {
2
,
true
}, {
6
,
false
}, {
19
,
true
},
{
22
,
false
}, {
23
,
true
} };
}
// This test will run 4 times since we have 5 parameters defined
@Test
(dataProvider =
"test1"
)
public
void
testPrimeNumberChecker(Integer inputNumber,
Boolean expectedResult) {
System.out.println(inputNumber +
" "
+ expectedResult);
Assert.assertEquals(expectedResult,
primeNumberChecker.validate(inputNumber));
}
}
建立 TESTNG.XML
建立 testng.xml C:\ > TestNG_WORKSPACE 執行測試案例。
<?xml version=
"1.0"
encoding=
"UTF-8"
?><!DOCTYPE suite SYSTEM
"http://testng.org/testng-1.0.dtd"
>
<suite name=
"Suite1"
>
<test name=
"test1"
>
<classes>
<
class
name=
"ParamTestWithDataProvider1"
/>
</classes>
</test>
</suite>
編譯使用javac的測試用例類。
C:\TestNG_WORKSPACE>.javac ParamTestWithDataProvider1.java PrimeNumberChecker.java
運行testng.xml.
C:\TestNG_WORKSPACE>java -cp
"C:\TestNG_WORKSPACE"
org.testng.TestNG testng.xml
驗證輸出。
2
true
6
false
19
true
22
false
23
true
===============================================
Suite1
Total tests run:
5
, Failures:
0
, Skips:
0
===============================================
實例
2
在這裏,
@DataProvider
傳遞對象做爲參數。
建立Java類
建立一個Java類 Bean.java, 對象帶有 get/set 方法, 在 C:\ > TestNG_WORKSPACE.
public
class
Bean {
private
String val;
private
int
i;
public
Bean(String val,
int
i){
this
.val=val;
this
.i=i;
}
public
String getVal() {
return
val;
}
public
void
setVal(String val) {
this
.val = val;
}
public
int
getI() {
return
i;
}
public
void
setI(
int
i) {
this
.i = i;
}
}
建立測試案例類
建立一個Java測試類 ParamTestWithDataProvider2.java.
定義方法primeNumbers(),其定義爲DataProvider使用註釋。此方法返回的對象數組的數組。
添加測試類中測試方法TestMethod()。此方法須要對象的bean做爲參數。
添加註釋
@Test
(dataProvider =
"test1"
) 到此方法. dataProvider 屬性被映射到
"test1"
.
建立Java類文件名 ParamTestWithDataProvider2.java 在 C:\ > TestNG_WORKSPACE
import
org.testng.annotations.DataProvider;
import
org.testng.annotations.Test;
public
class
ParamTestWithDataProvider2 {
@DataProvider
(name =
"test1"
)
public
static
Object[][] primeNumbers() {
return
new
Object[][] { {
new
Bean(
"hi I am the bean"
,
111
) } };
}
@Test
(dataProvider =
"test1"
)
public
void
testMethod(Bean myBean) {
System.out.println(myBean.getVal() +
" "
+ myBean.getI());
}
}
建立 TESTNG.XML
建立一個文件 testng.xml C:\ > TestNG_WORKSPACE 來執行測試用例.
<?xml version=
"1.0"
encoding=
"UTF-8"
?><!DOCTYPE suite SYSTEM
"http://testng.org/testng-1.0.dtd"
>
<suite name=
"Suite1"
>
<test name=
"test1"
>
<classes>
<
class
name=
"ParamTestWithDataProvider2"
/>
</classes>
</test>
</suite>
編譯使用javac的測試用例類。
C:\TestNG_WORKSPACE>javac ParamTestWithDataProvider2.java Bean.java
運行 testng.xml.
C:\TestNG_WORKSPACE>java -cp
"C:\TestNG_WORKSPACE"
org.testng.TestNG testng.xml
驗證輸出。
hi I am the bean
111
===============================================
Suite1
Total tests run:
1
, Failures:
0
, Skips:
0
===============================================
|
12、測試報告中自定義日誌(Reporter.log(「輸入自定義內容」)),例如:
@Test(groups = {"人"})
public void student(){
System.out.println("學生方法被調用");
Reporter.log("學生方法自定義日誌");
}