前言
在執行自動化測試指令碼的時候,我們需要自動判斷測試指令碼執行完成後的實際結果是否與預期結果一致,這個時候就需要在程式執行之前寫入斷言,判斷當前程式執行後是否正常。
關於TestNG斷言分為兩種:
- 軟斷言
- 硬斷言
硬斷言
在TestNg中,Assert類為硬斷言,裡面有多個靜態方法被稱為硬斷言,特點就是,如果指令碼執行斷言失敗,馬上停止執行,後面程式碼將不會被執行。
TestNG中提供了多個assert*()方法,主要是匹配不同的資料型別和集合類及其他物件操作。
舉例如下:
import org.testng.Assert; import org.testng.annotations.Test; public class TestAssert { @Test public void testAssert() throws Exception { Assert.assertEquals(4, 2 * 2); Assert.assertEquals(5,1+9); } }
執行上面的程式碼,結果如下:
從上面可以看出assertEquals中Expected和Actual不相等,如果實際結果和預期結果不相等,就會丟擲斷言異常並顯示內容,這樣丟擲的錯誤,更方便定位錯誤的原因和具體的業務邏輯。
- 關於assert常見斷言方法及描述如下:
- assertTrue:判斷是否為True。
- assertFalse:判斷是否為false。
- assertSame:判斷引用地址是否相同。
- assertNotSame:判斷引用地址是否不相同。
- assertNull:判斷是否為null。
- assertNotNull:判斷是否不為null。
- assertEquals:判斷是否相等,Object型別的物件需要實現haseCode及equals方法。
- assertNotEquals:判斷是否不相等。
- assertEqualsNoOrder:判斷忽略順序是否相等
軟斷言
在TestNg中,SoftAssert類為軟斷言,特點是如果執行斷言失敗,不會停止執行,會繼續執行這個斷言下的其他語句或者斷言,不影響其他斷言的執行。
使用說明:assertAll()一定要放在該測試類的最後一個斷言後面,軟斷言的類,叫SoftAssert.java,這個類是需要建立例項物件,才能呼叫相關例項方法進行軟斷言。
舉例如下:
import org.testng.annotations.Test; import org.testng.asserts.SoftAssert; public class TestSoftAssert { @Test public void testSoftAssert(){ System.out.println("指令碼執行開始。。。。。。。。。。。。。。。。。。"); //例項化SoftAssert SoftAssert assertion = new SoftAssert(); assertion.assertEquals(5, 6,"我倆不是一樣大"); System.out.println("指令碼執行結束。。。。。。。。。。。。。。。。。。"); System.out.println("我是觀望,到這會不會執行的"); //這個必須放到最後,沒什麼可說的 assertion.assertAll(); } }
執行上面的程式碼,結果如下:
通過執行結果發現,可以看到在斷言5和6相等的這行程式碼後,,還有其他的語句,如果這裡採用的是硬斷言,那麼後面的"指令碼執行結束"和"我是觀望,到這會不會執行的"是不會輸出的
也就是這兩條語句不會輸出。這個就是SoftAssert的優點,再強調一次,最後一定要呼叫assertAll()方法。