java 測試框架 TestNG Java中print、printf、println的區別

Java中print、printf、println的區別

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中輸入TestNGlocation中輸入「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.數據驅動(@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("學生方法自定義日誌");

  }

相關文章
相關標籤/搜索