自動化測試面試關於TestNg用法
阿新 • • 發佈:2021-09-13
在Java自動化測試中,面試官經常會出關於TestNg問題,本篇將分析面試中高頻問題:
TestNg概念:
-
testNG代表”測試下一代”。它是用於Java程式語言的自動化測試框架, 是從JUnit框架得到啟發而來的。TestNG不僅包含JUnit框架的所有功能, 還包含一些其他功能, 這些功能使TestNG更加強大。
-
常用註解
-
BeforeTest
表示註釋下的方法將在屬於該資料夾的任何測試之前首先執行,一般用於初 始化資料,準備測試環境等操作
@BeforeTest public void Before() { System.out.println("測試之前"); }
-
AfterTest
表示帶註釋的方法下的測試方法是在所有可用類的測試方法執行後執行,用於結束驅動,銷燬驅動等操作
@AfterTest public void After() { System.out.println("測試結束"); }
-
AfterMethod
表示在測試前執行
-
@AfterMethod public void After() { System.out.println("測試結束");
-
BeforeMethod
表示在測試後執行
@BeforeMethod public void
-
注意:與AfterTest、BeforeTest不同,Method作用於測試方法,所以運行了兩次。
-
BeforeSuite
在test suite中的所有test執行之前執行,只執行一次;
@BeforeSuite public void Before() { System.out.println("測試套件之前"); }
-
AfterSuite
在test suite中的所有test執行之後執行,只執行一次。
套件程式碼:
-
//方法
-
@BeforeSuite
xml檔案
<suite name="Suite1" parallel="tests" > <test name="test12"> <classes> <class name="part_2.Test_01"/> </classes> </test> <test name="test13"> <classes> <class name="part_2.Test_9"/> </classes> </test> </suite> 執行後:
-
Test
具體的測試方法
@Test public void test_01() { Assert.assertEquals("測試", "大牛測試", "比較值"); //實際值、預期的 // Assert.assertEquals(actual, expected); } @Test public void test_02() { Assert.assertEquals("大牛測試開發", "大牛測試開發", "比較值"); } @Test public void test_03() { //true,false Assert.assertTrue(true); }
Test中還可增加引數,如
@Test(invocationCount=5)其中invocationCount為執行次數 @Test(enabled=false) false為不可用
-
執行方式
通過testng test執行,右鍵->TestNG Test
通過test.xml執行
選中所需執行的testng.xml檔案,右鍵TestNgSuite執行
-
依賴執行 如下執行test_01之前需先執行test_02
例:
-
String i="c"; //執行條件 @Test(dependsOnMethods= {"test_02"}) public void test_01() { System.out.println(i); System.out.println("test01"); } @Test public void test_02() { i="d"; System.out.println(i); System.out.println("test02"); }
-
多執行緒執行
多執行緒執行時,需現在testng檔案中配置執行緒,以下配置實現:一個指令碼同時併發執行
<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" > <suite name="Suite1" parallel="tests" thread-count="2"> <test name="test12"> <parameter name="webdriver" value="webdriver.chrome.driver"/> <parameter name="path" value="C:/Python3/chromedriver.exe"/> <classes> <class name="part_2.Test_05"/> </classes> </test> <test name="test13"> <parameter name="webdriver" value="webdriver.gecko.driver"/> <parameter name="path" value="D:\se\\dr\\geckodriver.exe"/> <classes> <class name="part_2.Test_05"/> </classes> </test> </suite>
-
測試程式碼:
@Test @Parameters({"webdriver","path"}) public void test_02(String webdriver,String path) throws InterruptedException { System.setProperty(webdriver, path);
if(webdriver.contains("chrome")) { driver = new ChromeDriver(); } else {
driver = new FirefoxDriver(); }
driver.get("https://www.baidu.com/");
driver.findElement(By.id("kw")).sendKeys("test"); }
-
DataProvider引數化
@DataProvider() public Object[][] user() { //Object陣列可以儲存不同型別資料 return new Object[][]{ {"timtest", "timtest"}, {"tim2", "1234"}, {"tim3", "tim3"} }; } @BeforeTest public void Before() { System.out.println("測試之前"); } @Test(dataProvider="user") public void test_01(String username,String passwd) { Assert.assertEquals(username, passwd, "比較tim的值"); }
-
冒煙測試僅執行標記為smoke用例
-
程式碼如下:
xml檔案配置
<suite name="Suite1"> <groups> <run> <include name="smoke"/> </run> </groups> <test name="test12"> <classes> <class name="part_2.Test_03"/> </classes> </test></suite>
程式碼如下:
@Test public void test_01() { Assert.assertEquals("測試開發", "高薪必備", "比較值"); } //冒煙測試 @Test(groups= {"smoke"}) public void test_02() { Assert.assertEquals("大牛測試", "大牛測試", "比較值"); }
-
以上列舉方法,面試中經常問,更多請關注公眾號號“大牛測試”,有免費視訊